我正在运行一个使用 Debian 10 和 Apache 版本 2.4.38-3+deb10u3 的服务器。SSLProtocol 的不同设置的行为令人费解。SSL 已配置为非常安全。此设置似乎适用于每个客户端(至少没有证据表明不适用):
SSLProtocol -all +TLSv1.2 +TLSv1.3
从手册中很难确切地看出选项如何组合,但以下内容表面上看起来是相同的,并且在各种帖子中被引用为建议的配置:
SSLProtocol TLSv1.2 TLSv1.3
或者
SSLProtocol "TLSv1.2,TLSv1.3"
这些也适用于通过浏览器访问网站。但是,Alertra 的网站检查显示该网站失败。诊断显示:
Result Error (Connection to HTTPS service failed)
Server Response 0 Unrecognized HTTP error
通过网络代理访问也会失败,因此该问题并非 Alertra 独有。
Apache 的行为在这些替代 SSLProtocol 规范之间有何不同,为什么?
答案1
进一步的实验找到了答案。配置:
SSLProtocol TLSv1.2 TLSv1.3
Apache 2.4 认为仅支持 TLSv1.3。似乎如果引用了多个协议,则只有最后一个协议生效。因此,此规范会导致任何无法使用 TLSv1.3 的客户端失败。如果要使用多个协议,则除第一个协议外,所有协议前面都必须加上 + 符号。因此,这可以提供 TLSv1.2 和 TLSv1.3:
SSLProtocol TLSv1.2 +TLSv1.3
并且似乎是最清楚具体支持哪些内容的方法。似乎使用以下方法可以实现相同的结果:
SSLProtocol -all +TLSv1.2 +TLSv1.3
但还不太清楚。
Apache 没有将上述第一个配置标记为错误,这似乎有点遗憾,因为它包含一个被忽略的元素,因此可能会让用户感到困惑(就像我一样!)。如果 Apache 文档详细说明了不同选项如何协同工作,那也会很有帮助。