1. HTTPS 证书报错
错误提示
调用 HTTPS 接口出现证书认证错误或者提示证书已经过期。
原因及解决方案
- 证书不合法 API 提供者使用的证书其他非主流机构颁发的证书,此类证书使用浏览器访问是没有问题的,因为浏览器会自动更新根证书。但老版本操作系统的根证书对这些机构(证书颁发机构)的不信任或者信任时间已经过期。
解决方案 升级客户端根证书。如:Java+Linux 升级 OpenSSL 客户端即可,其他操作系统+编程语言,请升级编程语言中 HTTPS 使用的根证书。 联系 API 提供者,要求其更换兼容性更好的主流 SSL 证书。 程序中忽略检查 SSL 证书有效性(不推荐),忽略后会有请求被劫持的安全风险。只在与 API 提供商无法提供兼容性更好的主流 SSL 证书,且安全风险可控的前提下,可以考虑使用此方法。
- 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