您正在查看 Apigee Edge 文档。
前往 Apigee X 文档。 信息
问题
客户端应用收到 HTTP 响应代码 502,其中包含消息 Bad Gateway,以此响应 Edge Microgateway 中的 API 调用。
或者,管理员在运行
edgemicro configure 命令时会收到 self signed certificate in certificate
chain 错误。
出错提示
客户端将看到以下响应消息:
HTTP/1.1 502 Bad Gateway
以下是两种常见的错误响应示例:
{"message":"self signed certificate in certificate chain","code":"SELF_SIGNED_CERT_IN_CHAIN"}{"message":"self signed certificate","code":"DEPTH_ZERO_SELF_SIGNED_CERT"}
或者,运行 edgemicro configure 时可能会出现此错误:
{ Error: self signed certificate in certificate chain
at TLSSocket.onConnectSecure (_tls_wrap.js:1051:34)
at TLSSocket.emit (events.js:189:13)
at TLSSocket._finishInit (_tls_wrap.js:633:8) code: 'SELF_SIGNED_CERT_IN_CHAIN' }可能的原因
| 原因 | 说明 | 适用的问题排查说明 |
|---|---|---|
| 目标服务器提供自签名证书 | Edge Microgateway 将验证目标服务器的证书,如果该证书不受信任,则会引发运行时错误。 | Edge Public 和 Private Cloud 用户 |
| Apigee Edge 管理服务器使用自签名证书 | 首次配置 Edge Microgateway 时,它会通过 TLS 连接到 Apigee Edge 以进行启动。如果 Edge 呈现自签名证书,则此测试将失败。 | Edge Private Cloud 用户 |
原因:目标服务器提供的是自签名证书
如果目标服务器在 南向连接中提供 自签名证书,Edge Microgateway 默认会引发此错误,因为它不信任自签名证书。
诊断
您可能会在日志 (/var/tmp/edgemicro-`hostname`-
*.log) 中看到以下错误:
2021-05-18T10:52:46.425Z [error][0:8000][1][gsc][test][edgemicro_badtargethost][][][2db53f80- b7c7-11eb-9abe-05b6297863f1][microgateway-core][][GET][502][self signed certificate in certificate chain][SELF_SIGNED_CERT_IN_CHAIN][]
错误代码 SELF_SIGNED_CERT_IN_CHAIN 表示 Edge Microgateway 很可能已从目标服务器收到自签名证书。如需确认这一点,请执行以下步骤:
- 运行以下
openssl命令,验证目标服务器的证书链:echo | openssl s_client -connect TARGET_SERVER_HOSTNAME:PORT -servername TARGET_SERVER_HOSTNAME | openssl x509 -noout
-
如果目标服务器的证书链确实是自签名的,那么这就是问题的原因。
在以下示例中,请注意目标服务器会提供自签名证书:
echo | openssl s_client -connect untrusted-root.badssl.com:443 -servername untrusted-root.badssl.com | openssl x509 -noout
depth=1 C = US, ST = California, L = San Francisco, O = BadSSL, CN = BadSSL Untrusted Root Certificate Authority verify error:num=19:self signed certificate in certificate chain verify return:0 DONE
分辨率
- 与目标服务器的所属团队合作,获取由可信的证书授权机构 (CA) 签发的适当 TLS 证书。
如果无法做到这一点,请考虑以下选项之一,以允许在 Edge Microgateway 中使用自签名证书。
选项 1:设置系统属性以允许 Edge Microgateway 信任所有证书
- 如果您使用的是 Docker,请参阅 使用不受 Node.js 信任的 CA
否则,请导出名为
NODE_EXTRA_CA_CERTS的环境变量,指向根 CA 文件。官方 Node.js 网站上对此进行了说明。
选项 2:配置 Edge Microgateway YAML 配置文件,以信任该目标服务器的特定证书
- 确保您拥有目标服务器的证书(或证书链),且证书采用 PEM 格式。如需将其他证书格式转换为 PEM,请按照 将证书转换为支持的格式中的说明操作。
如果存在证书链,请确保证书的顺序正确无误。叶证书应始终位于最前面,后面依次是中间证书和根证书。如需详细了解,请参阅 验证证书链。
在以下示例中,我们为
untrusted-root.badssl.com配置了可信 CA 文件。edgemicro: ... targets: - host: 'untrusted-root.badssl.com' ssl: client ca: /opt/apigee/certs/untrusted-root.pem
有关如何配置此功能的说明,请参阅 Edge Microgateway 模块 - 配置单向和双向南向 TLS 视频。 如需了解详情,请参阅 在 Edge Microgateway 服务器上配置 SSL。
如果问题仍然存在,请转到必须收集诊断信息。
原因:Apigee Edge 管理服务器使用自签名证书
首次设置 Edge Microgateway 时,您需要运行的命令之一是 edgemicro configure 或 edgemicro private configure。此命令将引导集群,并与 Apigee Edge 联系以下载所需的信息。
对于 Edge Private Cloud,管理服务器网址由 -m 实参确定。
如果您已为管理服务器启用 TLS,则 Edge Microgateway 会尝试验证管理服务器提供的证书。
以下是 Edge Private Cloud 的 edgemicro configure 命令示例:
edgemicro private configure -u <username> -p <password> -o apigee -e dev -v secure -r https://apigee-dev.net -m https://management.apigee-dev.net:8443
如果管理服务器配置了自签名证书,您将在控制台输出中看到以下错误。
{ Error: self signed certificate in certificate chain
at TLSSocket.onConnectSecure (_tls_wrap.js:1051:34)
at TLSSocket.emit (events.js:189:13)
at TLSSocket._finishInit (_tls_wrap.js:633:8) code: 'SELF_SIGNED_CERT_IN_CHAIN' }诊断
- 在这种情况下,管理服务器 (
management.apigee-dev.net) 可能会返回自签名 TLS 证书。 - 您的 Apigee Edge 系统管理员很可能已提供证书,并且拥有该证书的副本。
- 否则,请运行以下命令以获取有关证书的信息:
echo | openssl s_client -connect management.apigee-dev.net:8443 -servername management.apigee-dev.net | openssl x509 -noout
- 如果管理服务器具有自签名证书,则会导致此问题。
分辨率
- 与目标服务器的所属团队合作,获取由可信的证书授权机构 (CA) 签发的适当 TLS 证书。
如果无法做到这一点,请执行以下操作,以允许在 Edge Microgateway 中使用自签名证书。
- 设置系统属性,以允许 Edge Microgateway 信任所有证书。
- 如果您使用的是 Docker,请参阅 使用不受 Node.js 信任的 CA。
- 否则,请导出名为
NODE_EXTRA_CA_CERTS的环境变量,指向根 CA 文件。官方 Node.js 网站上对此进行了说明。
必须收集的诊断信息
如果按照上述说明操作后问题仍然存在,请收集以下诊断信息,然后联系 Apigee Edge 支持团队:
- 日志文件:默认文件夹为
/var/tmp,但可以在主config.yaml文件 (logging > dir parameter) 中替换该文件夹。建议在向 Apigee Edge 支持团队提供日志文件之前,将log > level更改为info。 - 配置文件:Edge Microgateway 的主要配置位于默认 Edge Microgateway 文件夹
$HOME/.edgemicro中的 YAML 文件中。有一个名为default.yaml的默认配置文件,然后每个环境都有一个配置文件,例如 ORG-ENV-config.yaml。请针对受影响的组织和环境上传此文件的完整版本。参考文档