1. HTTPS 证书报错

错误提示

调用 HTTPS 接口出现证书认证错误或者提示证书已经过期。

原因及解决方案

  1. 证书不合法 API 提供者使用的证书其他非主流机构颁发的证书,此类证书使用浏览器访问是没有问题的,因为浏览器会自动更新根证书。但老版本操作系统的根证书对这些机构(证书颁发机构)的不信任或者信任时间已经过期。

解决方案 升级客户端根证书。如:Java+Linux 升级 OpenSSL 客户端即可,其他操作系统+编程语言,请升级编程语言中 HTTPS 使用的根证书。 联系 API 提供者,要求其更换兼容性更好的主流 SSL 证书。 程序中忽略检查 SSL 证书有效性(不推荐),忽略后会有请求被劫持的安全风险。只在与 API 提供商无法提供兼容性更好的主流 SSL 证书,且安全风险可控的前提下,可以考虑使用此方法。

  1. API提供者的 SSL 证书过期 提供者的 SSL 证书过期。

解决方案 联系 API 提供者,要求其更换 SSL 证书。 程序中忽略检查 SSL 证书有效性(不推荐),忽略后会有请求被劫持的安全风险。只在与 API 提供商无法提供兼容性更好的主流 SSL 证书,且安全风险可控的前提下,可以考虑使用此方法。

2. API unsupport the channel

错误原因:

请求的 HTTP Schema 不正确。 不同 API 支持的 HTTP Schama 不同,API 提供者可以自行设置,支持仅 HTTP 访问、仅 HTTPS 访问,或者同时支持 HTTP 和 HTTPS。 API unsupport the channel: HTTP,API 只允许 HTTPS 访问,而发起 API 请求时却使用了 HTTP,则会得到此提示。 API unsupport the channel: HTTPS,API 只允许 HTTP 访问,而 API 请求却使用的是HTTPS,则会得到此提示。

解决方案:

API unsupport the channel: HTTP,更换成为 HTTPS,发起 API 调用。 API unsupport the channel: HTTPS,更换成为 HTTP,发起 API 调用。

3. Invalid Signature

错误原因 客户端与服务端计算的签名不匹配导致的。

解决方案 当签名不匹配时网关会通过 HTTP Response Header 中的 X-Ca-Error-Message 返回服务端参与签名计算的 StringToSign。

StringToSign是用户请求前需要拼接的一个用于计算签名的字符串,在文档:【请求签名说明文档】查看详细说明。

客户端只需打印出本地自己拼接的 StringToSign 进行对比,找出哪里不同,针对性的解决,如果使用的官方提供的调用 Demo,可以到签名计算的工具类中找出计算签名前的 StringToSign 打印出来即可进行对比。

因为 HTTP Response Header 中不允许出现换行符,因此返回结果中的 StringToSign 换行符都已经被抹去。请参照文档合理比对。

如果服务端 StringToSign 与客户端一致,请再检查使用的 AppKey、AppSecret 是否正确,尤其注意是否额外错误添加了空格等不容易发现的字符。

4. Invalid Url

错误原因

请求传入的 HTTP Method 或者 Path 不正确,或者请求指定的环境(X-Ca-Stage)不正确。如指定调用 TEST 环境的 API,但 API 并未被发布到测试。

[!danger] 请求时不指定环境,默认为访问 RELEASE 环境。对 API 定义有修改,需要重新发布才能生效。许多出现这个错误的都是因为修改了 Path 没发布不生效,用新 Path 请求报错。

解决办法

分别检查上述三个因素:HTTP Method、Path、环境。API 说明中要求用 POST 则不能用 GET 请求。Method 要一致。Path 要与当前运行的一致。开放 API 的用户经常修改之后不发布,导致调用失败。指定环境要合理。在请求的 Header 里有个参数 X-Ca-Stage,取值 TEST/PRE/RELEASE,分别指向测试和线上环境,不传入该参数则默认是线上。 更多参数及请求说明,参见 API 调用示例

5. Unauthorized

错误原因

请求 API 时,使用的 AppKey 所属于的 APP 未获得授权。无权调用 API。

解决方法

授权生效的决定因素有:APP、API、环境、已授权

  • 如果是开放 API 的用户自己测试,则需要在 API 网关控制台,真实创建 APP,然后根据 AppId 在 API 列表页操作授权。即开放 API 的用户自测时,其实是自己需要给自己创建的 APP 授权。
  • 如果是购买了 API 的用户,则在 APP 详情页可以查看该 APP 已经被授权的 API,若没有要调用的 API,则自行操作授权。
  • 如果是使用了合作伙伴的 API,没有购买行为的。则联系合作伙伴。您需要提供 AppId,然后由 API 提供者操作授权。
  • 授权关系是有环境属性的,即 APP、API都是同一个的情况下,授权的环境和请求的环境也要相同。授权了某 API 在 A 环境的权限,但是也不能调用该 API 在 B 环境中的服务。请求时的环境等参数指定,请参见【API请求示例】。
  • 最重要的一点是,确认清楚是否用错了 APP,是否调用错了 API。由于 API 和 APP 较多,很多用户因为搞混了而没能调用成功。比如授权了 APP A,但是调用时候用的是 APP B,请仔细排查。

6. 后端服务调不通

  • 需要检查您录入的后端服务地址是否正确。

  • 需要保证您的后端服务可以被网关访问到。

  • 如果使用的是内网 IP ,请保证您的后端服务于您的 API 处于同一地域。

  • 检查您API定义的“后端超时”时间。

  • 该文档仅针对经典网络内网(后端是经典网络的ECS/SLB)或者公网访问后端服务,如果后端ECS在VPC内,请参考VPC的配置页面专属网络 VPC 环境开放 API

  • 在API定义时会要求您录入一个超时时间,当您的后端服务没有在您指定的时间内返回时,API网关仍然会提示您无法链接后端服务。您可以根据后端服务的实际耗时对”后端超时”进行调整,最大支持30000ms。

注意:单位是ms(毫秒)

需要强调,API网关访问外部的出口IP不能保证不会变动,通过设置安全组来判断请求来源的方法可能会由于API网关出口IP变化而导致API网关访问后端服务失败,因此此我们不建议使用安全组方法。API网关提供了完整的后端签名验证的方式来做身份认证,使用后端签名机制可以完全避免这种不确定性,我们强烈建议此方法来确认请求来源。使用具体文档:

https://help.aliyun.com/document_detail/29485.html?spm=a2c4g.11186623.6.579.35hHpb

results matching ""

    No results matching ""