Apache 中未关闭 TLSv1

Apache 中未关闭 TLSv1

查看在 CentOS 7 服务器上我的 SSLProtocols 可能被覆盖的最佳方法是什么?Apache 2.4.6(意识到这个版本也相当旧了,所以我必须在非工作时间更新它,看看它是否能解决问题)。

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

SSLProtocol -all +TLSv1.1 +TLSv1.2

然而,当我运行它时,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 

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

所以我进入了 ssl.conf 文件并更改了第 74 行以匹配,但问题仍然存在。第 227 行和第 257 行是针对两个虚拟主机的,我目前没有测试它们,但稍后我会更新。

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

答案1

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

SSLProtocol             all -SSLv2 -SSLv3

Certbot 会自动在虚拟主机配置中安装对此文件的引用,而该证书恰好安装在我的服务器配置中的第一个虚拟主机上。我将其更改为与我之前的设置相匹配,SSLProtocol -all +TLSv1.1 +TLSv1.2并且它运行正常。

笔记:

  1. 虚拟主机继承了其兄弟设置。
  2. 全局文件设置不优先。

答案2

使用

SSLProtocol TLSv1.2

或者

SSLProtocol -ALL +TLSv1.2

应该可以。但是(总有一个但是!)在虚拟主机中配置它不起作用。使用虚拟主机时,它会为所有其他虚拟主机保留第一个虚拟主机选项。

至少这在运行 Apache (httpd) 2.4.6 的 CentOS 7.6 中发生。

答案3

当你有多个 TLS 虚拟主机并使用服务器名称指示 (SNI) 时,允许使用以下语法SSLProtocol 指令为每个 VirtualHost,但除非你有 IP VirtualHosts 在实践中,SSLProtocol从第一个 VirtualHost 的指令设置用于整个服务器和/或全部支持 TLS 的基于名称的虚拟主机1

答案4

对我来说,在花了一个小时绞尽脑汁试图弄清楚为什么我的网站一直提供 TLS 1.0 和 TLS 1.1 之后——即使在手动编辑自动包含的 letsencrypt 覆盖之后。我意识到我正在使用 Cloudflare,并且 Cloudflare 在 2023 年仍然默认提供 TLS 1.0 和 TLS 1.1。疯了。无论如何,如果任何读到这篇文章的人都遇到了同样的问题,那么你可以在 Cloudflare 中设置最低 TLS 版本,如下所示(免费):https://developers.cloudflare.com/ssl/edge-certificates/additional-options/minimum-tls/

相关内容