在Apache服务器的SSL密码套件中禁用RC4


17

请在我自己的答案中查看“编辑”部分;他们对此难题作了解释

我试图为在CentOS 6.5 VPS上运行的Apache 2.2.9服务器禁用RC4,但似乎无法成功。

安装了最近购买的经过业务验证的证书,并且SSL连接运行良好,但是我想尽可能地进行配置,以“加强安全性”(如某些教程所述)。

通过Qualys SSL Labs检查配置,结果页面显示“此服务器接受RC4密码,该密码很弱。等级限制为B。”

但是,我将其放在ssl.conf中:

 SSLCipherSuite HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4:!SSLv2:!SSLv3

我已将该问题答案中给出的脚本保存在名为test-ssl-ciphers.sh的文件中,并将IP地址更改为回送地址。这是由于./test-ssl-ciphers.sh | grep -i "RC4"

Testing ECDHE-RSA-RC4-SHA...NO (sslv3 alert handshake failure)
Testing ECDHE-ECDSA-RC4-SHA...NO (sslv3 alert handshake failure)
Testing AECDH-RC4-SHA...NO (sslv3 alert handshake failure)
Testing ADH-RC4-MD5...NO (sslv3 alert handshake failure)
Testing ECDH-RSA-RC4-SHA...NO (sslv3 alert handshake failure)
Testing ECDH-ECDSA-RC4-SHA...NO (sslv3 alert handshake failure)
Testing RC4-SHA...NO (sslv3 alert handshake failure)
Testing RC4-MD5...NO (sslv3 alert handshake failure)
Testing RC4-MD5...NO (sslv3 alert handshake failure)
Testing PSK-RC4-SHA...NO (no ciphers available)
Testing KRB5-RC4-SHA...NO (no ciphers available)
Testing KRB5-RC4-MD5...NO (no ciphers available)
Testing EXP-ADH-RC4-MD5...NO (sslv3 alert handshake failure)
Testing EXP-RC4-MD5...NO (sslv3 alert handshake failure)
Testing EXP-RC4-MD5...NO (sslv3 alert handshake failure)
Testing EXP-KRB5-RC4-SHA...NO (no ciphers available)
Testing EXP-KRB5-RC4-MD5...NO (no ciphers available)

这些行中的每一行都包含“ NO”,根据脚本,这意味着服务器不支持指定的密码组合。

而且,该命令grep -i -r "RC4" /etc/httpd只给我上面提到的ssl.conf文件。

另外,openssl ciphers -V在我的密码套件上运行时,根本没有显示RC4密码,这在给定配置字符串的情况下是有意义的。

因此,对于SSL检查网站为何告诉我“服务器接受RC4”,我莫名其妙。他们甚至列出了以下被接受的密码:

TLS_RSA_WITH_RC4_128_MD5
TLS_RSA_WITH_RC4_128_SHA
TLS_ECDHE_RSA_WITH_RC4_128_SHA

有人有可能的解释吗?我做错了什么?也许在另一个地方可以配置RC4或“接受”的支持?

谢谢。

[ 编辑 ]在家里的虚拟机中使用CentOS 6.6,我再次使用其域名而不是回送地址针对VPS运行了脚本。此设置意味着密码列表由VM中的openssl实例提供:在产生YES的密码中,我仍然没有RC4。

Answers:


16

在安装更新的证书时,我发现问题是由在ISPConfig中(针对域和每个子域)指定HTTPS所需的整个数据集引起的:证书,私钥,CA链等。

换句话说,删除数据集导致Qualys测试对域A评分,同时删除了有关RC4的警告。放回详细信息会导致警告再次出现,并且等级再次被限制在B上,这对因果关系没有疑问。

好像为每个虚拟主机提供详细信息以某种方式创建了一个新环境,在该环境中某些默认值已覆盖了我在ssl.conf中指定的密码套件。奇怪的。

解决方案是在每个虚拟主机的Apache Directives文本区域中添加SSLCipherSuite规范。这是我获得A级成绩的配置:

SSLProtocol ALL -SSLv2 -SSLv3
SSLHonorCipherOrder on
# Compression is disabled by default on my distribution (CentOS 6)
# SSLCompression off 
SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS

编辑(2017-05-16):关于此问题的另一个发现:的指定SSLCipherSuite是强制性的。我无法理解为什么该特定指令(尽管在服务器级别指定)不会自动应用于虚拟主机配置。我在CentOS 6.9上运行Apache 2.2.15。

编辑(2018-06-18):更多信息。我刚刚发现该SSLCipherSuite指令可以一次指定,并且将适用于所有虚拟主机:在基本的mod_ssl配置文件(在CentOS 6中,该文件位于/etc/httpd/conf.d/ssl.conf)中,您只需要在外部指定指令即可。默认的虚拟主机。Apache 2.2文档指出此伪指令的默认值为SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP。我认为这是RC4密码的来源:在没有任何规范的情况下(对我来说就是这样),因为没有规范位于“全局”上下文中,因此使用默认值。这种理解结束了对我来说一直是个谜。具有讽刺意味的是,当我找到这个解释时,我将切换到CentOS 7!HTH。


6
SSLCipherSuite HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4:!SSLv2:!SSLv3
                                                                    ^^^^^^^

馊主意。禁用所有SSLv3密码会导致禁用TLS1.0和TLS1.1可用的密码,并且仅留下TLS1.2新引入的几个密码(如果您的服务器支持TLS1.2)

因此,对于SSL检查网站为何告诉我“服务器接受RC4”,我莫名其妙。他们甚至列出了以下被接受的密码:

确保本地测试和外部测试都访问同一服务器(IP地址)。我见过很多站点example.com都在不同的主机上www.example.com,因此测试也有所不同。


是的,根域及其子域位于同一VPS上。VPS有一个IP地址,我使用ISPConfig对其进行管理。谢谢。
AbVog

使用SSLLabs。将它们显示的IP与系统拥有的IP进行比较。确保前面没有其他(反向)代理或CDN,这可能会影响结果。
Steffen Ullrich

“禁用所有SSLv3密码会导致禁用TLS1.0和TLS1.1可用的密码,而仅留下TLS1.2新引入的几个密码(如果您的服务器支持TLS1.2)”那么正确的解决方案是什么?
罗恩·亚当斯

@RohnAdams:如果目标是禁用RC4,那么'!RC4'部分就可以了。问题是通过额外使用“!SSLv3”进行了过度阻塞。有关使用的有用密码,请参见Mozilla密码生成器
Steffen Ullrich'1

2

Qualys SSL实验室似乎对默认主机等非常敏感。检查该IP地址上的所有HTTPS VirtualHosts是否使用完全相同的设置(除了证书文件),我遇到了类似的问题,其中一些Qualys测试是针对目标VirtualHost和一些测试似乎选择了默认的VirtualHost。我的目标虚拟主机仅启用了一个密码,但是Qualys从默认虚拟主机中找到了更大的列表。

我还在这里找到了一个外观更好的脚本该脚本提供了有关SSL测试的更全面的信息。


2

只是在浏览我的网站之一。根据@AbVog的回答,我发现我的指令实际上仅在默认虚拟主机中。当我将指令移至全局时,一切都很好。

顺便说一句,我还遇到了https://cipherli.st/,其中有很多不同软件包的SSL配置列表。目前针对apache的建议如下:

SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder On
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff

# Requires Apache >= 2.4
SSLCompression off 
SSLSessionTickets Off
SSLUseStapling on 
SSLStaplingCache "shmcb:logs/stapling-cache(150000)" 

0

在具有Apache / 2.4.25的Fedora 25上,密码由加密策略处理(请参阅/ etc / cryptopolicies / backends)。默认设置已完全禁用RC4,因此无需篡改Apache设置中的密码。除了确保您使用最新的ssl.conf之外,因为默认情况下它没有安装,而是在conf.d目录中保留为ssl.conf.rpmnew。

为了配置SSL,我只需要指定证书ServerName和DocumentRoot。对于Squirrelmail。

SSLCertificateFile /etc/letsencrypt/live/mail.xxxx.dk/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mail.xxxx.dk/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/mail.xxxx.dk/chain.pem
SSLCACertificateFile /etc/letsencrypt/live/mail.xxxx.dk/fullchain.pem
ServerName mail.xxxx.dk:443
DocumentRoot "/usr/share/squirrelmail"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.