我將我的 Amazon CloudFront 分佈設定為使用 HTTPS 連線至自訂來源。現在,我收到「CloudFront 無法連線至來源」錯誤與 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**設定為 CNAME。
如果您成功地連接至來源,那麼您會看到上述命令的輸出,類似以下内容。輸出會確認您的連線已成功使用 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 狀態碼 (無效閘道)。
相關資訊
CloudFront 和您的自訂來源之間的通訊需要 HTTPS