Apache SSL:“过时的密钥交换(RSA)”[关闭]
Posted
技术标签:
【中文标题】Apache SSL:“过时的密钥交换(RSA)”[关闭]【英文标题】:Apache SSL: "an obsolete key exchange (RSA)" [closed] 【发布时间】:2017-10-09 07:17:52 【问题描述】:我有一个站点https://warsoftheheroes.eu/,它使用带有 SSL 和 Let's Encrypt 证书的 Apache 托管。在开发者工具的 Chrome/Chromium 浏览器中 -> 安全我看到这条消息:
Obsolete Connection Settings
The connection to this site uses a strong protocol (TLS 1.2), an obsolete key exchange (RSA), and a strong cipher (AES_128_GCM).
这是我的 Apache SSL 配置:
<IfDefine SSL>
<IfDefine SSL_DEFAULT_VHOST>
<IfModule ssl_module>
Listen 443
<VirtualHost _default_:443>
ServerName localhost
Include /etc/apache2/vhosts.d/default_vhost.include
ErrorLog /var/log/apache2/ssl_error_log
<IfModule log_config_module>
TransferLog /var/log/apache2/ssl_access_log
</IfModule>
SSLEngine on
SSLProtocol ALL -SSLv2 -SSLv3
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128:AES256:HIGH:!RC4:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK
SSLHonorCipherOrder On
SSLCertificateFile /home/wof/ssl/fullchain1.pem
SSLCertificateKeyFile /home/wof/ssl/privkey1.pem
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/var/www/localhost/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
<IfModule setenvif_module>
BrowserMatch ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
</IfModule>
<IfModule log_config_module>
CustomLog /var/log/apache2/ssl_request_log \
"%t %h %SSL_PROTOCOLx %SSL_CIPHERx \"%r\" %b"
</IfModule>
</VirtualHost>
</IfModule>
</IfDefine>
</IfDefine>
# vim: ts=4 filetype=apache
我应该在这个配置文件中改变什么来摆脱这个过时的密钥交换?
【问题讨论】:
您的服务器似乎没有选择基于 ECDHE 的密码套件。你用的是什么版本的 apache 和 openssl? Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super User 或Unix & Linux Stack Exchange 会是一个更好的提问地方。另见Where do I post questions about Dev Ops? 当我通过谷歌搜索某个地方来问我的问题(apache、stackexchange)时,大多数结果都指向***。我很惊讶,但我追求多数。 @Bartosz - 是的,Stack Overflow 是一个垃圾场。不要根据你从过去看到的内容来判断是否符合主题。 另见New in Chrome 58。通常你可以用SSLProtocol -all +TLSv1 +TLSv1.1 +TLSv1.2
和SSLCipherSuite "HIGH:!aNULL:!kRSA:!MD5:!RC4"
解决大部分的成绩单问题。另请参阅超级用户上的Disabled RC4 and Qualys still says I have it enabled。
【参考方案1】:
对不起,我之前的错误。混合了一些东西。
这是查看服务器支持哪些密码以及首选顺序的方法:
nmap --script ssl-enum-ciphers -p 443 warsoftheheroes.eu
Starting Nmap 7.40 ( https://nmap.org ) at 2017-05-10 17:23 CEST
Nmap scan report for warsoftheheroes.eu (81.163.204.80)
Host is up (0.051s latency).
rDNS record for 81.163.204.80: pppoe-static-a-80.interblock.pl
PORT STATE SERVICE
443/tcp open https
| ssl-enum-ciphers:
| TLSv1.0:
| ciphers:
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 2048) - A
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA (dh 2048) - A
| TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (rsa 2048) - A
| TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA (dh 2048) - A
| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (rsa 2048) - A
| compressors:
| NULL
| cipher preference: server
| TLSv1.1:
| ciphers:
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 2048) - A
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA (dh 2048) - A
| TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (rsa 2048) - A
| TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA (dh 2048) - A
| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (rsa 2048) - A
| compressors:
| NULL
| cipher preference: server
| TLSv1.2:
| ciphers:
| TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 2048) - A
| TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (dh 2048) - A
| TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048) - A
| TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) - A
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 (dh 2048) - A
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 2048) - A
| TLS_RSA_WITH_AES_128_CBC_SHA256 (rsa 2048) - A
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 (dh 2048) - A
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA256 (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA (dh 2048) - A
| TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (rsa 2048) - A
| TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA (dh 2048) - A
| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (rsa 2048) - A
| compressors:
| NULL
| cipher preference: server
|_ least strength: A
如您所见,TLSv1.2 的第三个选项是 TLS_RSA_WITH_AES_128_GCM_SHA256,它是您在配置中启用的“AES128”的一部分。
Steffen Ullrich 关于缺少 ECDHE 支持的说法可能是正确的,这可能就是为什么带有 RSA 密钥交换的密码排在第三位的原因。如果支持,我认为 ECDHE 密码将是首选。
【讨论】:
“所以在你的情况下,RSA 是首选的密钥交换方法。” - 这是错误的。像ECDHE-RSA-AES128-GCM-SHA256
这样的第一个条目使用 RSA 进行身份验证,但使用 ECDHE 进行密钥交换。请参阅openssl ciphers -V
,它显示了身份验证 (Au=...) 和密钥交换 (Kx=...)。
是的,我从 SSLCipherSuite 中删除了所有 RSA 条目,没有任何改变,消息仍然存在【参考方案2】:
根据SSLLabs test,您的站点不支持任何 ECDHE 密码,即使看起来您已经在服务器配置中配置了这些密码。由于 TLS 1.2 支持(你有)和 ECDHE 支持(你没有)都添加到 OpenSSL 1.0.1 中,我猜你有一个 OpenSSL 版本,它编译时不支持 ECC(因此 ECDHE) .
据我所知,旧版本的 RHEL(因此也包括 CentOS)和 Fedora 出厂时出于专利原因删除了 ECC 支持,因此您可以检查您是否使用了受影响的系统之一。 openssl ciphers -V
的输出为您提供支持哪些密码,您应该检查那里是否支持 ECDHE。
【讨论】:
问题是 openssl 出现/使用 bindist USE 标志 (Gentoo) 编译。感谢您为我指明正确的方向。以上是关于Apache SSL:“过时的密钥交换(RSA)”[关闭]的主要内容,如果未能解决你的问题,请参考以下文章