跳到主要内容

一、介绍

API - API 类型的部署节点用于支持用户通过API接口的方式获取OHTTPS中申请的证书。


二、使用方法

使用 API - API 类型的部署节点,首先要在OHTTPS中创建API类型部署节点,创建该类型部署节点时,需要点击生成API接口调用时使用的API密钥。当部署节点创建完成后,即可通过API接口的方式获取证书。具体接口调用方式如下:

  • 接口地址: https://ohttps.com/api/open/getCertificate

  • 请求方法: GET

  • 请求参数:

    • apiId: 即部署节点ID,示例:push-1xlpm40g1105n9gz

    • timestamp: 接口调用时的实时ms时间戳,5分钟内有效,示例:1695743251613

    • certificateId: 即证书ID,示例:cert-n2x740m2qxg8kwyz

    • sign: 参数签名(注意为32位小写MD5哈希值),用于接口权限校验,生成代码示例:

      // 以下为javascript生成参数签名代码示例

      // 用以获取传入字符串的32位小写MD5哈希值
      function md5(string) {
      // 函数示例
      }

      // 部署节点Id,下方为示例值
      const apiId = "push-1xlpm40g1105n9gz"
      // API接口密钥,下方为示例值
      const apiKey = "89066abd0f21b983331f3aca02590ea3"
      // 当前ms时间戳,下方为示例值
      const timestamp = 1695743251613
      // 目标证书ID,下方为示例值
      const certificateId = "cert-n2x740m2qxg8kwyz"

      // 用于请求的参数列表
      const params = [`apiId=${apiId}`, `timestamp=${timestamp}`, `certificateId=${certificateId}`]
      // 用于签名的参数列表:用于请求的参数列表 + API接口密钥
      const paramsForSign = [...params, `apiKey=${apiKey}`]
      // 用于签名的参数列表使用字母序进行排序
      paramsForSign.sort()
      // 用于签名的参数列表使用"&"号进行拼接成用以签名的字符串
      const stringForSign = paramsForSign.join('&')
      // 以上字符串的32位小写MD5哈希值即为参数签名
      // 以上示例参数的最终签名为: c58d69d9e59923f16b7dafa45bef208d
      const sign = md5(stringForSign)

      // 接口最终请求地址
      // 注意最终请求的参数中不包含apiKey
      const url = `https://ohttps.com/api/open/getCertificate?sign=${sign}&${params.join("&")}`
  • 请求响应:

    • success: 请求是否成功标志,成功时为true,否则为false
    • msg: 信息提示,成功时为"成功",失败时为具体失败原因,常见失败原因示例:
      • 证书ID(certificateId)参数缺失
        • 错误说明: 请求参数中缺少certificateId
      • 证书ID(certificateId)参数格式错误
        • 错误说明: certificateId必须以"cert-"开头
      • 部署节点ID(apiId)参数缺失
        • 错误说明: 请求参数中缺少apiId
      • 时间戳(timestamp)参数缺失
        • 错误说明: 请求参数中缺少timestamp
      • 时间戳(timestamp)参数无效
        • 错误说明: timestamp与当前时间戳差值超过了5分钟
      • 签名(sign)参数缺失
        • 错误说明: 请求参数中缺少sign
      • 部署节点ID(apiId)参数格式错误
        • 错误说明: apiId必须以"push-"开头
      • 签名(sign)校验失败
        • 错误说明: 签名与根据请求参数生成的签名不一致
      • 账户余额不足
        • 错误说明: 账户内余额不足
      • 证书ID(certificateId)输入错误
        • 错误说明: certificateId不存在或已删除
      • 证书不存在有效版本
        • 错误说明: 证书没有有效的证书版本
      • 证书版本已过期
        • 错误说明: 最新的证书版本已经过期
    • payload: 请求成功时返回的数据
      • certKey: PEM格式的证书私钥
      • fullChainCerts: PEM格式的证书文件(包含证书和中间证书)
      • expiredTime: 证书过期时间
    • 成功响应示例:
      {
      "success": true,
      "msg": "成功",
      "payload": {
      "certKey": "-----BEGIN RSA PRIVATE KEY-----\nMIIEogIBAAKCAQEA7o8I0jT1...3balniJJw7zfou0=\n-----END RSA PRIVATE KEY-----\n",
      "fullChainCerts": "-----BEGIN CERTIFICATE-----\nMIIFMzCCBBugAwIBAgISA4qi...YKEBpsr6GtPAQ3ec5\n-----END CERTIFICATE-----\n",
      "expiredTime": "2021-08-09T14:37:10.000Z"
      }
      }
    • 失败响应示例:
      {
      "success": false,
      "msg": "签名(sign)校验失败"
      }