尝试连接到负载均衡器时,为什么会遇到客户端 SSL/TLS 协商错误?

上次更新日期:2022 年 4 月 1 日

当我尝试连接到负载均衡器时,遇到了安全套接字层 (SSL)/传输层安全性 (TLS) 协商错误。我为什么会收到此错误?

简短描述

客户端 TLS 协商错误是指由客户端启动的 TLS 连接无法与负载均衡器建立会话。当客户端尝试使用负载均衡器的安全策略不支持的协议或密码连接到负载均衡器时,会发生 TLS 协商错误。要建立 TLS 连接,请确保您的客户端支持以下内容:

  • 一个或多个匹配密码
  • 安全策略中指定协议

解决方案

注意:如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请确保您运行的是最新版本的 AWS CLI

确定您的负载均衡器的安全策略

从 AWS 管理控制台:

1.    打开 Amazon Elastic Compute Cloud (Amazon EC2) 控制台

2.    在导航窗格中,选择负载均衡下的负载均衡器

3.    选择负载均衡器,然后选择侦听器

4.    查看安全策略。
    对于 Application Load Balancer 和网络负载均衡器,可在 Security policy(安全策略)列中找到安全策略。
    对于 Classic Load Balancer,在 Cipher(密码)列中选择 Change(更改)以查看安全策略。

从 AWS CLI:

确定您的负载均衡器的安全策略支持的协议和密码

Classic Load Balancer 支持自定义安全策略。但是,Application Load Balancer 和 Network Load Balancer 不支持自定义安全策略。有关安全策略(包括默认安全策略)的更多信息,请参阅以下内容:

(可选)测试您的负载均衡器的安全策略

要测试您的负载均衡器的安全策略支持协议和密码,使用诸如 sslscan 之类的开源命令行工具。

使用 sslscan 命令

您可以在任何 Amazon EC2 Linux 实例上或从本地系统安装和运行 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

使用 openssl 命令

或者,您也可以使用 openssl 命令测试负载均衡器的安全策略。您可以在任何 Amazon EC2 Linux 实例上或从本地系统安装和运行 openssl 命令。

要列出特定 SSL/TLS 版本支持的密码,请使用 openssl ciphers 命令:

*$* openssl ciphers -v

例如,以下命令将显示 TLS 版本 TLSv1.2 支持的密码:

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

使用 s_client 命令测试 TLS 版本和密码套件。要了解特定密码套件的强度,您可以使用网站存储库,例如 ciphersuites.info。例如,以下命令将显示 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)

您还可以使用 openssl 命令指定连接中使用的 TLS 协议的版本。以下示例显示了验证服务器是否支持 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

如有必要,更新负载均衡器的安全策略

要更新负载均衡器的安全策略以使用受支持的协议或密码,并达到所需的安全级别,请执行以下操作:


这篇文章对您有帮助吗?


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