测试 Apache 的密码套件

测试 Apache 的密码套件

当我搜索相关问题时,我看到了这一点: https://superuser.com/questions/109213/how-do-i-list-the-ssl-tls-cipher-suites-a-particular-website-offers

我尝试按照提供的解决方案进行操作,但尚未找到解决方案。

我有 2 台服务器,一个测试服务器和一个生产服务器。

它们都托管一个应用程序,测试和生产。此应用程序需要反向代理,因此我为此设置了 Apache。

我被要求改进用于 HTTPS 的密码套件。

产品在 Apache 中,服务器使用以下内容:

SSLProtocol All -SSLv2 -SSLv3
SSLCipherSuite DES-CBC-SHA:HIGH:!aNULL:!MD5:!EXP
SSLHonorCipherOrder on

测试我目前正在处理的服务器已更新为使用此功能:

SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
SSLHonorCipherOrder on
SSLCompression      off
SSLSessionTickets   off

现在是时候测试新的配置是否有效了(嗯,它已经应该有效了,但是你知道……)。

第三次测试我运行的机器:

curl https://test.servertest.com/test1
against the TEST server
and
curl https://prodserver.com/accept
to the PROD one.

从两个服务器读取 APACHE 错误日志测试产品服务器,我没有发现差异。

TEST:
[Tue Oct 23 13:57:10.846249 2018] [ssl:trace3] [pid 13130] ssl_engine_kernel.c(1795): [remote 1.1.1.1:5555] OpenSSL: Handshake: done
[Tue Oct 23 13:57:10.846257 2018] [ssl:debug] [pid 13130] ssl_engine_kernel.c(1844): [remote 1.1.1.1:5555] AH02041: Protocol: TLSv1, Cipher: ECDHE-RSA-AES256-SHA (256/256 bits)

PROD:
[Tue Oct 23 13:58:04.192403 2018] [ssl:trace3] [pid 6856] ssl_engine_kernel.c(1795): [remote 2.2.2.2:6666] OpenSSL: Handshake: done
[Tue Oct 23 13:58:04.192409 2018] [ssl:debug] [pid 6856] ssl_engine_kernel.c(1844): [remote 2.2.2.2:6666] AH02041: Protocol: TLSv1, Cipher: ECDHE-RSA-AES256-SHA (256/256 bits)

也许 CURL 不是测试密码套件的最佳方式(?)但我的问题是: 我如何确定我应用的更改是正确的(除了在 Apache 手册中查找密码套件本身)?

答案1

curl -vv -k https://test.example.com将输出一些有用的 TLS 信息,但只会协商单身的协议和密码,而不是测试每一个可能和支持的 SSL/TLS 版本和密码。

curl -vv https://test.example.com
* Rebuilt URL to: https://test.example.com/
*   Trying 10.9.8.7...
* TCP_NODELAY set
* Connected to test.example.com (10.9.8.7) port 443 (#0)
...
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384

一个有用的在线测试工具是 Qualis SSL labshttps://www.ssllabs.com/ssltest/或者使用来自的漂亮包装脚本运行你自己的测试https://testssl.sh/ 围绕命令行openssl工具/库。

用于测试正确 SSLProtocol 级别的一些简单的 openssl 命令是:

 openssl s_client -connect test.example.com.com:443 -ssl3

当 SSLv3 被禁用时,应该返回失败SSLProtocol -SSLv3

140304709433232:error:14094410:SSL routines:ssl3_read_bytes:
     sslv3 alert handshake failure:s3_pkt.c:1493:SSL alert number 40
140304709433232:error:1409E0E5:SSL routines:ssl3_write_bytes:
     ssl handshake failure:s3_pkt.c:659:

和测试 TLS 协议 1.0 类似

 openssl s_client -connect test.example.com:443 -tls1

我们应该再次看到握手失败:

 routines:ssl3_read_bytes:tlsv1 alert protocol version:s3_pkt.c:1493:SSL alert number 70
 ssl handshake failure:s3_pkt.c:659:
 openssl s_client -connect test.example.com:443 -tls1_1
139920359683984:error:1409442E:SSL routines:ssl3_read_bytes:
tlsv1 alert protocol version:s3_pkt.c:1493:SSL alert number 70
ssl handshake failure:s3_pkt.c:659:

测试允许的 TLS 协议级别 1.2 时

  openssl s_client -connect test.example.com:443 -tls1_2

您应该看到成功的连接和 TLS 证书的详细信息:

depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
 verify return:1
 depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
 verify return:1
 depth=0 CN = test.example.com
 verify return:1
 ---
 Certificate chain
 0 s:/CN=test.example.com
   i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
 1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
   i:/O=Digital Signature Trust Co./CN=DST Root CA X3
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIGFTCCBP2gAwIBAgISBEs83Gyi/cFWkX3BtmTHk3R5MA0GCSqGSIb3DQEBCwUA
...

以下是针对多种不同服务器的良好 TLS 设置的有用备忘单:https://cipherli.st/

相关内容