如何排查 CloudFront 分发版通过 HTTPS 与自定义源连接时遇到的问题?

上次更新日期:2021 年 7 月 9 日

我已将 Amazon CloudFront 分发版配置为使用 HTTPS 连接到自定义源。现在,我收到错误消息“CloudFront could not connect to Origin”和 HTTP 状态代码 502(无效网关)。

解决方法

验证 CloudFront 分发版的源域名是否与证书域名匹配

验证 CloudFront 分发版上指定的源域名是否与源 SSL/TLS 证书上的域名匹配。分配的源域名可以与以下任一项匹配:

  • 指定为证书通用名称 (CN) 的域名
  • 证书的主题替代名称 (SAN) 中指定的域名

如果源域名与关联到您的证书的任何域名不匹配,那么 CloudFront 将返回 HTTP 状态码 502(无效网关)。

检查是否有任何缺失的中间证书颁发机构

使用 SSL 检查器测试您的源的证书链是否可用并且不需要任何中间证书颁发机构。

如果您使用 Elastic Load Balancing 作为自定义源且必须更新证书链,请执行以下操作:

使用正确的证书链再次上传证书。

–或者–

使用 AWS Certificate Manager (ACM) 请求公有证书来保护您的域。ACM 可与 Elastic Load Balancing 完全集成。

测试您的源的受支持协议策略和密码

对于为了让 SSL 握手成功,您的源必须支持 CloudFront 使用的密码

如果您的源协议策略启用了 SSLv3,CloudFront 将仅使用 SSLv3 从命令行或 Windows 终端与您的源进行通信。

注意:默认情况下,OpenSSL 通常在 Linux 和 macOS 系统上可用。适用于 Windows 的 OpenSSL 可在 OpenSSL 网站上找到。

要测试您的源是否支持 CloudFront 使用的密码,请运行以下 OpenSSL 命令。

如果您的原始协议策略设置为 SSLv3,请运行:

echo | openssl s_client -ssl3 -cipher 'ECDHE-RSA-AES256-GCM-SHA384 ECDHE-RSA-AES256-SHA384 ECDHE-RSA-AES256-SHA ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES256-SHA AES128-SHA DES-CBC3-SHA RC4-MD5 ECDHE-ECDSA-AES256-GCM-SHA384 ECDHE-ECDSA-AES256-SHA384 ECDHE-ECDSA-AES256-SHA ECDHE-ECDSA-AES128-GCM-SHA256 ECDHE-ECDSA-AES128-SHA256 ECDHE-ECDSA-AES128-SHA' -connect your.origin.domain:443

如果您的源使用了 TLS,请使用以下命令针对每个协议测试您的源:

对于 TLS,请运行:

echo | openssl s_client -tls1 -cipher 'ECDHE-RSA-AES256-GCM-SHA384 ECDHE-RSA-AES256-SHA384 ECDHE-RSA-AES256-SHA ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES256-SHA AES128-SHA DES-CBC3-SHA RC4-MD5 ECDHE-ECDSA-AES256-GCM-SHA384 ECDHE-ECDSA-AES256-SHA384 ECDHE-ECDSA-AES256-SHA ECDHE-ECDSA-AES128-GCM-SHA256 ECDHE-ECDSA-AES128-SHA256 ECDHE-ECDSA-AES128-SHA' -connect your.origin.domain:443 -servername your.origin.domain

对于 TLS 1.1,请运行:

echo | openssl s_client -tls1_1 -cipher 'ECDHE-RSA-AES256-GCM-SHA384 ECDHE-RSA-AES256-SHA384 ECDHE-RSA-AES256-SHA ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES256-SHA AES128-SHA DES-CBC3-SHA RC4-MD5 ECDHE-ECDSA-AES256-GCM-SHA384 ECDHE-ECDSA-AES256-SHA384 ECDHE-ECDSA-AES256-SHA ECDHE-ECDSA-AES128-GCM-SHA256 ECDHE-ECDSA-AES128-SHA256 ECDHE-ECDSA-AES128-SHA' -connect your.origin.domain:443 -servername your.origin.domain

对于 TLS 1.2,请运行:

echo | openssl s_client -tls1_2 -cipher 'ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES256-SHA384 AES256-SHA AES128-SHA DES-CBC3-SHA RC4-MD5 ECDHE-ECDSA-AES256-GCM-SHA384 ECDHE-ECDSA-AES256-SHA384 ECDHE-ECDSA-AES256-SHA ECDHE-ECDSA-AES128-GCM-SHA256 ECDHE-ECDSA-AES128-SHA256 ECDHE-ECDSA-AES128-SHA' -connect your.origin.domain:443 -servername your.origin.domain

注意:请将 -servername 的值设为源域名。或者,如果您使用 CloudFront 转发主机标头,请通过 CloudFront 请求将 -servername 设为别名记录。

如果成功连接到源,则会看到上述命令的输出,类似于以下内容。看到此输出即表示确认您已使用 SSL 或 TLS 版本和受支持的密码成功建立连接。

New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES128-SHA256
....
Timeout : 7200 (sec)
Verify return code: 0 (ok)
----
DONE

注意:有关 502 错误的更多故障排除指导,请参阅 HTTP 502 状态代码(无效网关)


这篇文章对您有帮助吗?


您是否需要账单或技术支持?