跳至內容

為什麼當我連線到負載平衡器時,會出現用戶端 SSL/TLS 協商錯誤?

3 分的閱讀內容
0

我想解決連線到 Elastic Load Balancing (ELB) 時發生的 SSL/TLS 協商錯誤。

簡短描述

當用戶端無法與負載平衡器協商安全連線時,就會發生此錯誤。該問題通常是由不支援的加密套件或通訊協定版本引起的。

若要建立 TLS 連線,請確認您的用戶端支援至少一種由負載平衡器安全政策中定義的加密套件與協議版本。

解決方法

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請參閱AWS CLI 錯誤疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

識別負載平衡器的安全政策

若要識別負載平衡器的安全政策,請完成下列步驟:

  1. 開啟 Amazon Elastic Compute Cloud (Amazon EC2) 主控台
  2. 在導覽窗格的 Load Balancing (負載平衡) 下,選擇 Load Balancers (負載平衡器)。
  3. 選取負載平衡器,然後選擇 Listeners (接聽程式)。
  4. 檢視安全政策。
    若是 Application Load Balancer 和 Network Load Balancer,請在安全政策欄中找到安全政策。
    若是 Classic Load Balancer ,請在 Cipher (加密套件) 欄中選擇 Change (變更),以檢視安全政策。

若要使用 AWS CLI,請執行下列其中一個命令:

請確定支援的通訊協定和加密套件

Classic Load Balancer 支援自訂安全政策。但是,Application Load Balancer 和 Network Load Balancer 不支援自訂安全政策。

如需安全政策的更多資訊,請參閱以下文件:

(選用) 測試負載平衡器的安全政策

測試負載平衡器的安全政策所支援的通訊協定和加密套件。使用開放原始碼命令行工具,例如 sslscanopenssl

如需詳細資訊,請參閱 GitHub 網站上的 sslscan

使用 sslscan 命令

在 Amazon Linux EC2 執行個體上或從本機系統安裝並執行 sslscan 命令。請確定您的負載平衡器接受來自來源 IP 位址的 TLS 連線。

若要在 Amazon Linux EC2 執行個體上使用 sslscan,請完成下列步驟:

  1. 開啟 Extra Packages for Enterprise Linux (EPEL) 儲存庫

  2. 執行下列命令:

    sudo yum install sslscan
  3. 若要掃描負載平衡器以尋找支援的加密套件,請執行下列命令。將 example.com 替換為您的網域:

    [ec2-user@ ~]$ sslscan --show-ciphers example.com

    **注意:**Amazon Linux 2023 (AL2023) 不支援 EPEL。

使用 openssl 命令

若要測試負載平衡器的安全政策,您也可以使用 openssl 命令。在 Amazon Linux EC2 執行個體上或從本機系統執行 openssl 命令。

若要列出特定 SSL/TLS 版本支援的加密套件,請執行以下命令:

*$* openssl ciphers -v

以下命令會顯示 TLS 版本 TLS 1.2 支援的加密套件:

*$* openssl ciphers -V | grep "TLSv1.2"

執行 s_client 命令來測試 TLS 版本和加密套件。若要尋找特定加密套件的強度,請使用第三方網站儲存庫,例如 TLS 加密套件搜尋。例如,如果您執行以下命令,則輸出將顯示 www.example.com 的加密套件:

openssl s_client -connect example.com:443

套件 TLS_PSK_WITH_AES_128_CBC_SHA 較弱。如果您對伺服器使用該套件,則會收到以下錯誤訊息:

openssl s_client -connect example.com:443 -cipher PSK-AES128-CBC-SHA -quiet
140062732593056:error:140740B5:SSL routines:SSL23_CLIENT_HELLO:no ciphers available:s23_clnt.c:508:

套件 ECDHE-RSA-AES128-GCM-SHA256 是強套件。如果您對伺服器使用該套件,那麼您會收到類似以下內容的成功訊息:

openssl s_client -connect example.com:443 -cipher ECDHE-RSA-AES128-GCM-SHA256
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-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-GCM-SHA256
Session-ID: 73B49649716645B90D13E29656AEFEBF289A4956301AD9BC65D4832794E282CD
Session-ID-ctx:
Master-Key: C738D1E7160421281C4CAFEA49941895430168A4028B5D5F6CB6739B58A15235F640A5D740D368A4436CCAFD062B3338
Key-Arg : None
Krb5 Principal: None
PSK identity: None
PSK identity hint: None
Start Time: 1647375807
Timeout : 300 (sec)
Verify return code: 0 (ok)

若要指定連線中使用的 TLS 通訊協定版本,請執行 openssl 命令。下列範例所示為一項測試,用於驗證伺服器是否支援 TLS 1.1:

openssl s_client -connect example.com:443 -tls1_1 -quiet
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root G2
verify return:1
depth=1 C = US, O = DigiCert Inc, CN = DigiCert Global CA G2
verify return:1
depth=0 CN = *.peg.a2z.com
verify return:1

(選用) 檢查 Application Load Balancer 的連線日誌和 Network Load Balancer 的存取日誌

如果您的用戶端連線 Application Load Balancer 的 HTTPS 接聽程式,請使用連線日誌檢查通訊協定和加密套件。連線所使用的通訊協定和加密套件位於 tls_protocoltls_cipher 欄位中。如果 TLS 協商失敗,則 tls_verify_status 欄位將設定為 Failed:$error_codetls_protocoltls_cipher 欄位將設為「-」。

如果您的用戶端連線 Network Load Balancer 的 TLS 偵聽器,請使用存取日誌檢查通訊協定和加密套件。連接所使用的通訊協定和加密套件位於 tls_protocol_versiontls_cipher 欄位中。如果 TLS 協商失敗,則不會記錄存取日誌。

如需詳細資訊,請參閱Application Load Balancer 的連線日誌Network Load Balancer 的存取日誌

更新負載平衡器的安全政策

若要使用支援的通訊協定或加密套件來提高安全性,請更新負載平衡器的安全政策。如需如何更新安全政策的更多資訊,請參閱以下文件: