我有一个使用 Apache 2.4 的 Web 应用程序,它运行外部 API。最近,由于 SSL 握手失败,一个客户端无法连接到我们的系统。他们访问了 ssllabs,发现我们的服务器支持以下适用于 TLS 1.2 的密码套件(他们正在使用):
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (0x9e) DH 2048 bits FS 128
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f) ECDH secp521r1 (eq. 15360 bits RSA) FS 128
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (0x9f) DH 2048 bits FS 256
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030) ECDH secp521r1 (eq. 15360 bits RSA) FS 256
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (0xcca8) ECDH secp521r1 (eq. 15360 bits RSA) FS 256
因为 SSL 握手失败完全发生在他们那边(当LogLevel
设置为时,我的访问或错误日志中没有出现任何debug
内容)他们认为这是一个SSLCipherSuite
问题。
他们希望我添加以下内容SSLCipherSuite
:TLS_RSA_WITH_AES_256_GCM_SHA384 (0x009d)
或者根据谷歌的介绍,在 Apache2 中添加以下内容:TLS_RSA_WITH_AES_256_GCM_SHA384
。
很酷,所以我首先在特定的 apache 配置文件中尝试它,但只是在所有 LetsEncrypt 指令之后包含以下行:
SSLCipherSuite TLS_RSA_WITH_AES_256_GCM_SHA384
不幸的是,ssllabs 和sslscan告诉我我需要的确切 CipherSuite 不存在,即使重新启动 apache2 也是如此。我得到了以下信息:
Preferred TLSv1.2 256 bits ECDHE-RSA-AES256-GCM-SHA384 Curve 25519 DHE 253
Accepted TLSv1.2 256 bits DHE-RSA-AES256-GCM-SHA384 DHE 2048 bits
Accepted TLSv1.2 256 bits ECDHE-RSA-CHACHA20-POLY1305 Curve 25519 DHE 253
Accepted TLSv1.2 128 bits ECDHE-RSA-AES128-GCM-SHA256 Curve 25519 DHE 253
Accepted TLSv1.2 128 bits DHE-RSA-AES128-GCM-SHA256 DHE 2048 bits
因此我进入/etc/options/letsencrypt/options-ssl-apache.conf
并将指令修改SSLCipherSuite
为以下内容,然后重新启动 apache:
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:TLS_RSA_WITH_AES_256_GCM_SHA384
请注意,我停留:TLS_RSA_WITH_AES_256_GCM_SHA384
在原始指令的末尾。然而,ssllabs 和 sslscan 都没有列出此密码。
我不太擅长网络、apache 或一般的密码,所以我不确定我能做些什么来让这个密码出现并修复 SSL 握手错误。