在试图连接到负载均衡器时,为什么出现了客户端 SSL/TLS 协商错误?

2 分钟阅读
0

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

简短描述

客户端 TLS 协商错误意味着客户端启动的 TLS 连接无法与负载均衡器建立会话。在客户端尝试使用负载均衡器的安全策略所不支持的协议或密码来连接到负载均衡器时,会发生 TLS 协商错误。要建立 TLS 连接,请确保客户端支持以下各项:

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

解决方案

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

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

从 AWS 管理控制台执行下列操作:

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

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

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

4.    查看安全策略。
对于应用程序负载均衡器和网络负载均衡器,在安全策略列中找到安全策略。
对于经典负载均衡器,在密码列中选择更改,以查看安全策略。

从 AWS CLI 中执行下列操作:

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

经典负载均衡器支持自定义安全策略。但是,应用程序负载均衡器和网络负载均衡器不支持自定义安全策略。有关安全策略(包括默认安全策略)的更多信息,请参阅以下内容:

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

要测试负载均衡器安全策略支持的协议和密码,请使用 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 实例上或者从本地系统运行 sslscan 命令。

要列出特定 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

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

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


AWS 官方
AWS 官方已更新 2 年前