我知道您认为这是一个重复的问题,但请先听我说完。我无法在与 min 具有相同配置的系统中找到答案,因此这是我的服务器配置:
Red Hat 4.1.2-44
CentOS 版本 5
OpenSSL 1.0.2a
服务器版本:Apache/2.2.3
我在安装新的 SSL 证书时遇到了协议问题。我发现我启用了 TLSv1。然后我看了一篇文章(链接:https://www.leaderssl.com/news/471-how-to-disable-outdated-versions-of-ssl-tls-in-apache)尝试禁用 TLSv1。我尝试了多种可能的解决方案,但还是出现Illegal protocol 'TLSv1.1' in linux
错误或No SSL protocols available [hint: SSLProtocol]
我得到Illegal protocol 'TLSv1.1' when restart command (service httpd restart) fails after I change SSL protocol to
SSLProtocol 全部 -SSLv2 -SSLv3 -TLSv1 -TLSv1.1`)
当我应用 SSL 协议时:SSLProtocol all -SSLv2 -SSLv3
,服务器成功重启,但我在 httpd 的错误日志中收到错误No SSL protocols available [hint: SSLProtocol]
答案1
CentOS 5 已经过了使用寿命(2017 年 3 月)好几年了,并且永远不会支持 TLS 1.1 或更高版本,即使你尝试替换关键系统库(就像有人似乎对这个系统所做的那样)。
此系统几年前就应该升级了。不能再推迟了。如果您想要支持 TLS 1.1 及更高版本,则需要升级到当前支持的 CentOS 版本(7 或 8,最好是 8)。
答案2
警告:可怕的黑客攻击即将来临
我很惊讶您使用的是 OpenSSL 1.0.2a。我使用 CentOS 5.6 存档的一个测试 VM 使用的是 1.0.1e,rpmfind 显示 6.10 也是如此,所以我不认为任何 5 会有更高的版本。但是,两个都1.0.1 和 1.0.2 实现 TLSv1.1 和 TLSv1.2;这是你老旧的 Apache 版本,不知道如何配置在 OpenSSL 中。因此:
指定
SSLProtocols all -SSLv3 -TLSv1
确保
SSLCiphers
禁用所有 SSLv2 密码套件。/etc/ssl/conf.d/ssl.conf
我的mod_ssl
软件包中的版本为 2.2.15(如果与 Apache 的其余部分同步,则版本高于您的版本),!SSLv2
其中已经有几个“删除”,但如果您的软件包中没有,或者它已在您的配置中被删除/更改/替换,请添加它
由于这种结合,Apache想启用了协议,即 SSLv2,但由于 SSLv2 的密码套件与更高协议的密码套件不相交,密码套件设置会阻止任何 SSLv2 握手实际成功,从而处理任何疯狂愚蠢的客户端或(更重要的)安全扫描器和审计员。 SSLv3 和 TLSv1.0 已按规定禁用,TLSv1.1 和 TLSv1.2(两者)保持启用状态,因为您的 Apache 没有(也无法)禁用它们。在我上述存档 VM 的副本上测试时有效。
不要用作SSLProtocols SSLv2
“缩写”。我不确定,但这可能会导致 mod_ssl 使用特定的 SSLv2 方法(即函数),而不是使用带有“选项”标志的通用方法(在 OpenSSL 的这些版本中被误导性地命名为 SSLv23;在 1.1.x 中,它最终被修复为 TLS_*method)。您绝对需要后者。
话虽如此,我同意迈克尔的观点:尽快更换这个系统