AbV*_*Vog 21 apache-http-server ssl openssl
请在我自己的答案中查看编辑部分;它们包含对这个难题的解释。
我正在尝试为在 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
Run Code Online (Sandbox Code Playgroud)
我已将这个问题的答案中给出的脚本保存在名为 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)
Run Code Online (Sandbox Code Playgroud)
这些行中的每一行都包含“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
Run Code Online (Sandbox Code Playgroud)
有没有人有可能的解释?我做错了什么?也许还有另一个地方可以配置对 RC4 或“接受”的支持?
谢谢。
[编辑] 在家里的虚拟机中使用 CentOS 6.6,我使用其域名而不是环回地址再次针对我的 VPS 运行脚本。此设置意味着密码列表由 VM 中的 openssl 实例提供:在产生 YES 的密码中,我仍然没有 RC4。
AbV*_*Vog 17
在安装更新的证书时,我发现问题是由于在 ISPConfig 中指定(针对域和每个子域)HTTPS 所需的整个数据集:证书、私钥、CA 链等引起的。
换句话说,删除数据集导致 Qualys 测试对域 A 进行评级,同时删除关于 RC4 的警告。把细节放回去会导致警告回来,等级再次被限制在 B 级,这对因果关系没有任何怀疑的余地。
就好像为每个 vhost 提供详细信息以某种方式创建了一个新环境,其中一些默认值覆盖了我在 ssl.conf 中指定的密码套件。奇怪的。
解决方案是在Apache Directives textarea 中为每个 vhost添加 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
Run Code Online (Sandbox Code Playgroud)
编辑(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!哈。
SSLCipherSuite HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4:!SSLv2:!SSLv3
^^^^^^^
Run Code Online (Sandbox Code Playgroud)
馊主意。禁用所有 SSLv3 密码会导致禁用可用于 TLS1.0 和 TLS1.1 的密码,并且只留下一些 TLS1.2 新引入的密码(如果您的服务器支持 TLS1.2)
因此,我不知为何 SSL 检查网站告诉我“服务器接受 RC4”。他们甚至列出了以下被接受的密码:
确保本地测试和外部测试都访问相同的服务器(IP 地址)。我已经看到很多站点example.com位于不同的主机上www.example.com,因此测试有所不同。
| 归档时间: |
|
| 查看次数: |
90235 次 |
| 最近记录: |