您正在查看的是 Apigee Edge 文档。
转到 Apigee X 文档。 信息
问题
客户端应用收到 HTTP 响应代码 502
和消息 Bad Gateway
,作为 Edge Microgate 中 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 Microgate 将验证目标服务器的证书,如果该证书不受信任,则会引发运行时错误。 | Edge 公有云和私有云用户 |
Apigee Edge Management Server 使用自签名证书 | 首次配置 Edge Microgate 时,它将通过 TLS 连接到 Apigee Edge 以进行引导。如果 Edge 提供自签名证书,则会失败。 | Edge Private Cloud 用户 |
原因:目标服务器提供了自签名证书
如果目标服务器在 南向连接上提供 自签名证书,则 Edge Microgate 默认会引发此错误,因为它不信任自签名证书。
诊断
您可能会在日志 (/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 Microgate 可能已经收到来自目标服务器的自签名证书。如需确认这一点,请执行以下步骤:
- 运行以下
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 Microgate 中的自签名证书。
方法 1:设置系统属性以允许 Edge Microgate 信任所有证书
- 如果您使用的是 docker,请参阅 使用 Node.js 不信任的 CA
否则,请导出名为
NODE_EXTRA_CA_CERTS
的环境变量,并使其指向根 CA 文件。如需了解相关信息,请参阅官方 Node.js 网站。
方法 2:配置 Edge Microgate 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 Microgate 模块 - 配置单向和双向南向 TLS 视频也介绍了配置说明。如需了解详情,请参阅 在 Edge Microgate 服务器上配置 SSL。
如果问题仍然存在,请参阅必须收集诊断信息。
原因:Apigee Edge Management Server 使用自签名证书
首次设置 Edge Microgate 时,您需要运行的命令之一是 edgemicro configure
或 edgemicro private configure
。此命令将引导集群,并且它会联系 Apigee Edge 以下载所需信息。
对于 Edge Private Cloud,管理服务器网址由 -m
参数确定。如果您已为管理服务器启用 TLS,则 Edge Microgate 将尝试验证管理服务器提供的证书。
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 Microgate 中使用自签名证书。
- 设置系统属性以允许 Edge Microgate 信任所有证书。
- 如果您使用的是 docker,请参阅 使用 Node.js 不信任的 CA。
- 否则,请导出名为
NODE_EXTRA_CA_CERTS
的环境变量,并将其指向根 CA 文件。如需了解相关信息,请参阅 Node.js 官方网站。
必须收集的诊断信息
如果按照上述说明操作后,问题仍然存在,请收集以下诊断信息,然后联系 Apigee Edge 支持团队:
- 日志文件:默认文件夹为
/var/tmp
,但它可能会在主config.yaml
文件 (logging > dir parameter
) 中被替换。建议您先将log > level
更改为info
,然后再将日志文件提供给 Apigee Edge 支持。 - 配置文件:Edge Microgate 的主要配置位于默认的 Edge Microgate 文件夹
$HOME/.edgemicro
下的 YAML 文件中。系统会先创建一个名为default.yaml
的默认配置文件,然后针对每个环境 ORG-ENV-config.yaml
分别使用一个配置文件。请完整上传此文件,供受影响的组织和环境使用。参考文档