许多 SSL 客户端(尤其是 JDK 6)使用 SSLv2Hello 协议与服务器握手。使用此协议不是意味着你正在使用 SSL 2.0 或 3.0;它只是一种握手方式来确定哪个使用的协议。[https://www.rfc-editor.org/rfc/rfc5246#appendix-E.2]
然而,在 Apache 中,如果您禁用 SSLv3 支持,这显然会删除对 SSLv2Hello 协议的支持。Apache Tomcat 明确支持 SSLv2Hello;也就是说,您可以启用它,但不能启用 SSLv3。
有没有办法在 Apache 中做到这一点?
[更新]
这是我的协议配置:
SSLProtocol +TLSv1 +TLSv1.1 +TLSv1.2 -SSLv3
答案1
显然 mod_ssl 在过去一年左右发生了变化(我还没有找到源代码的确切提交,但发现了“问题”)。源代码现在这样做:
If SSLProtocol only includes only one Protocol:
Handshake = That Protocol's Handshake Only
Else
Handshake = SSLv2 Handshake
此设置无法覆盖。你唯一能做的就是编辑源代码,重新编译你自己的版本。我创建了一个差异如果您想编译自己的,则强制 SSLv2 握手兼容性。
答案2
所以事实证明这一直都不是问题。Apache 将接受我上面发布的任一配置的 SSLv2 握手。我被握手错误误导,以为这就是问题所在;这实际上只是一个配置问题,即服务器不信任客户端的 CA。