502 Bad Gateway - 自签名证书链

<ph type="x-smartling-placeholder"></ph> 您正在查看 Apigee Edge 文档。
转到 Apigee X 文档
信息

<ph type="x-smartling-placeholder">

问题

客户端应用收到 HTTP 响应代码 502 以及消息 Bad Gateway 作为 Edge Microgateway 中 API 调用的响应。

另外,管理员在运行 self signed certificate in certificate chain <ph type="x-smartling-placeholder"></ph> edgemicro configure 命令。

错误消息

客户端将看到以下响应消息:

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' }

可能的原因

原因 说明 适用的问题排查说明
<ph type="x-smartling-placeholder"></ph> 目标服务器提供了自签名证书 Edge Microgateway 将验证目标服务器的证书,如果其不受信任 将引发运行时错误。 Edge 公有云和私有云用户
Apigee Edge Management Server 使用自签名证书 首次配置 Edge Microgateway 时,它将通过 TLS 进行引导。如果 Edge 提供自签名证书,则会失败。 Edge Private Cloud 用户

原因:目标服务器提供了自签名证书

<ph type="x-smartling-placeholder">

如果 自签名证书由目标服务器在 <ph type="x-smartling-placeholder"></ph> 南向连接,那么默认情况下,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 已 很可能收到了来自目标服务器的自签名证书。要确认这一点,请执行 执行下列步骤:

  1. 运行以下 openssl 命令以验证目标服务器的 证书链:
    echo | openssl s_client -connect TARGET_SERVER_HOSTNAME:PORT -servername TARGET_SERVER_HOSTNAME | openssl x509 -noout
    
  2. 如果目标服务器的证书链确实是自签名证书,那么这就是导致 问题。

    在以下示例中,请注意目标服务器提供了一个自签名证书:

    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
    

分辨率

  1. 与拥有目标服务器的团队合作,获取由 受信任的证书授权机构 (CA)。 <ph type="x-smartling-placeholder">
  2. 如果无法实现,请考虑采用以下某个选项来允许自签名 证书。

    <ph type="x-smartling-placeholder">

    方法 1:设置系统属性以允许 Edge Microgateway 信任所有 证书

    1. 如果您使用的是 Docker,请参阅 <ph type="x-smartling-placeholder"></ph> 使用 Node.js 不信任的 CA
    2. 否则,请导出一个名为 NODE_EXTRA_CA_CERTS 的环境变量。 指向根 CA 文件。

      这在官方 Node.js 网站。

    。 <ph type="x-smartling-placeholder">

    选项 2:配置 Edge Microgateway YAML 配置文件以信任特定的 该目标服务器的证书

    1. 确保您拥有 PEM 格式的目标服务器证书(或证书链)。接收者 将其他证书格式转换为 PEM,请按照 <ph type="x-smartling-placeholder"></ph> 将证书转换为支持的格式
    2. 如果存在证书链,请确保证书位于正确的 订单。叶证书应始终是第一个证书,其后才是中间证书 和根证书有关这一点的详细说明,请参见 <ph type="x-smartling-placeholder"></ph> 验证证书链

      在以下示例中,我们为 untrusted-root.badssl.com

      edgemicro:
      ...
      targets:
        - host: 'untrusted-root.badssl.com'
          ssl:
            client
              ca: /opt/apigee/certs/untrusted-root.pem
      

    有关如何配置此功能的说明, <ph type="x-smartling-placeholder"></ph> “边缘 Microgateway 模块 - 配置单向和双向 TLS 传输层安全协议”视频。 请参阅 <ph type="x-smartling-placeholder"></ph> 如需了解详情,请参阅在 Edge Microgateway 服务器上配置 SSL

如果问题仍然存在,请转到 必须收集诊断信息

原因:Apigee Edge Management Server 使用自签名证书

<ph type="x-smartling-placeholder">

首次设置 Edge Microgateway 时,您需要运行下列命令之一 为 edgemicro configureedgemicro private configure。此命令将 引导集群,它会联系 Apigee Edge 以下载所需信息。

对于边缘私有云,管理服务器网址由 -m 参数确定。 如果您已为管理服务器启用 TLS,则 Edge Microgateway 会尝试验证 管理服务器提供的证书。

Edge 私有云的 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' }

诊断

  1. 在这种情况下,管理服务器 (management.apigee-dev.net) 可能会返回自签名 TLS 证书。
  2. 您的 Apigee Edge 系统管理员可能提供了证书 以及副本。
  3. 否则,请运行以下命令来获取有关该证书的信息:
    echo | openssl s_client -connect management.apigee-dev.net:8443 -servername management.apigee-dev.net | openssl x509 -noout
    
  4. 如果管理服务器具有自签名证书,那么这就是导致此问题的原因。 问题。

分辨率

  1. 与拥有目标服务器的团队合作,获取由 受信任的证书授权机构 (CA)。 <ph type="x-smartling-placeholder">
  2. 如果无法进行,则执行以下操作以允许自签名 证书。

  3. <ph type="x-smartling-placeholder">
  4. 设置系统属性以允许 Edge Microgateway 信任所有证书。
  5. 如果您使用的是 Docker,请参阅 <ph type="x-smartling-placeholder"></ph> 使用 Node.js 不信任的 CA。
  6. 否则,请导出一个名为 NODE_EXTRA_CA_CERTS 的环境变量。 指向根 CA 文件 已记录在官方 Node.js 网站。 <ph type="x-smartling-placeholder">

必须收集的诊断信息

按照上述说明操作后,如果问题依然存在,请收集以下内容 然后联系 Apigee Edge 支持团队

  • 日志文件:默认文件夹是 /var/tmp,但该文件可能会被覆盖 主 config.yaml 文件 (logging > dir parameter)。时间是 建议先将 log > level 更改为 info,然后再提供 日志文件复制到 Apigee Edge 支持
  • 配置文件:Edge Microgateway 的主要配置位于 YAML 中 文件(位于默认的 Edge Microgateway 文件夹 $HOME/.edgemicro 中)。这里有 名为 default.yaml 的默认配置文件,然后为每个环境分别创建一个配置文件 ORG-ENV-config.yaml。上传此文件 受影响的组织和环境。

    参考文档

    <ph type="x-smartling-placeholder"></ph> 将 Edge 界面配置为使用 TLS 访问 Edge API