#码力全开·技术π对#Apigee X在混合云部署中如何实现本地数据中心到GCP的mTLS认证?

自签名证书链在Envoy侧配置后仍报`SSL_HANDSHAKE_FAILURE`,如何验证证书链传递顺序?

google
Jimaks
2025-05-16 08:46:35
浏览
收藏 0
回答 2
待解决
回答 2
按赞同
/
按时间
周周的奇妙编程
周周的奇妙编程

Apigee X 在混合云部署中实现本地数据中心到 GCP 的 mTLS 认证,核心在于正确配置双向 TLS(mTLS)链路,确保 Envoy(作为 Apigee hybrid 的数据平面)与后端服务之间能够完成身份验证。通常问题出在证书链的完整性与顺序上,特别是在使用自签名证书时。


当你遇到 ​​SSL_HANDSHAKE_FAILURE​​ 错误,首先要确认的是证书链是否按“叶证书 → 中间 CA → 根 CA”的顺序拼接,并且完整嵌入到 Envoy 配置中。例如,在 Envoy 的 TLS 上下文中应明确指定:

transport_socket:
  name: envoy.transport_sockets.tls
  typed_config:
    "@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext
    common_tls_context:
      tls_certificate_paths:
        - /etc/certs/server.crt
      private_key_path: /etc/certs/server.key
      validation_context:
        trusted_ca: /etc/certs/ca-chain.pem
        verify_certificate_hash: "..."


其中 ​​ca-chain.pem​​ 必须包含完整的信任链,顺序错误会导致握手失败。你可以通过以下命令验证证书链顺序:

openssl x509 -noout -text -in server.crt | grep "CA Issuers"
openssl verify -verbose -CAfile <(cat intermediate.crt root.crt) server.crt


此外,检查证书 SAN(Subject Alternative Name)是否包含正确的 DNS 或 IP 地址,以及时间有效性、密钥用途等字段是否符合 mTLS 要求。结合 Envoy 的访问日志和 ​​openssl s_client​​ 工具进行连接测试,能更准确地定位握手失败的具体原因。

分享
微博
QQ
微信https://www.51cto.com/aigc/
回复
2025-05-16 09:21:36
Jaysir
Jaysir
  • 使用​​openssl s_client -connect <host>:<port> -showcerts​​ 查看实际传输的证书顺序。
  • 确保证书链在Envoy配置中按服务器证书 → 中间CA → 根CA的顺序正确配置。
分享
微博
QQ
微信https://www.51cto.com/aigc/
回复
2025-05-17 16:07:16
发布
相关问题
提问