Apache 中的 TLSv1 未关闭

Aar*_*ain 2 ssl pci-dss apache-2.4

查看 CentOS 7 服务器上 SSL 协议可能被覆盖的最佳方式是什么?Apache 2.4.6(意识到这也很旧,所以我必须在下班时间更新它,看看它是否解决了问题)。

我正在尝试在我的配置根目录 (/etc/httpd/conf/httpd.conf) 中使用此 Apache 指令禁用 TLSv1

SSLProtocol -all +TLSv1.1 +TLSv1.2
Run Code Online (Sandbox Code Playgroud)

然而,当我运行任一nmap --script ssl-enum-ciphers -p 443 <mysite.com>它显示 TLSv1 仍然启用:

ssl-enum-ciphers: 
|   TLSv1.0: 
|     ciphers: 
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) - A
|     compressors: 
|       NULL
|     cipher preference: server 
Run Code Online (Sandbox Code Playgroud)

SSL实验室测试也揭示了同样的情况。

SSLProtocol虚拟主机中没有提供其他指令。

之后,我决定使用此命令搜索所有配置文件sudo grep -rnw '/etc/httpd' -e 'SSLProtocol',它显示了以下位置:

/etc/httpd/conf/httpd.conf:359:SSLProtocol -all +TLSv1.1 +TLSv1.2
/etc/httpd/conf.d/ssl.conf:74:SSLProtocol ALL -SSLv2 -SSLv3
/etc/httpd/conf.d/ssl.conf:227:SSLProtocol ALL -SSLv2 -SSLv3
/etc/httpd/conf.d/ssl.conf:257:SSLProtocol ALL -SSLv2 -SSLv3
/etc/httpd/conf.d/ssl.conf.rpmnew:75:SSLProtocol all -SSLv2 -SSLv3
Run Code Online (Sandbox Code Playgroud)

所以我进入 ssl.conf 文件并更改第 74 行以匹配,问题仍然存在。第 227 行和第 257 行适用于我当前未测试的两个虚拟主机,但稍后我会更新。

编辑:尽管剩下的两行用于虚拟主机,并给出了有关 OpenSSL bug 的答案,我更改了所有引用SSLProtocol -all +TLSv1.1 +TLSv1.2并重新启动了我的服务器,但没有任何改变。为什么会这样呢?我想知道这是否是 Apache 2.4.6 本身的一个错误。

Aar*_*ain 8

我通过意外的修复解决了这个问题。我在 Bugzilla 上发现了这个问题,并正在研究它,后来有人提到 Let's Encrypt/etc/letsencrypt/options-ssl-apache.conf在该文件中有一个独立的文件,其中有一个设置:

SSLProtocol             all -SSLv2 -SSLv3
Run Code Online (Sandbox Code Playgroud)

Certbot 会自动在虚拟主机配置中安装对此文件的引用,并且该证书恰好安装在我的服务器配置中的第一个虚拟主机上。我对其进行了更改以匹配我之前的设置,SSLProtocol -all +TLSv1.1 +TLSv1.2并且效果非常好。

笔记:

  1. 虚拟主机继承其同级虚拟主机的设置。
  2. 全局文件设置不优先。