许多SSL客户端(特别是JDK 6)使用SSLv2Hello协议与服务器握手。 使用这个协议并不意味着你正在使用SSL 2.0或3.0; 确定使用哪个协议只是一个握手。 [ http://tools.ietf.org/html/rfc5246#appendix-E.2]
但是,在Apache中,如果禁用SSLv3支持,则显然会删除对SSLv2Hello协议的支持。 Apache Tomcat对SSLv2Hello有明确的支持; 也就是说,您可以启用该function,但不启用SSLv3。
有没有办法在Apache中做到这一点?
[更新]
这是我的协议configuration:
SSLProtocol +TLSv1 +TLSv1.1 +TLSv1.2 -SSLv3
显然mod_ssl在去年左右发生了变化(我还没有find确切的提交来源,但find了“问题”)。 现在来源是这样的:
If SSLProtocol only includes only one Protocol: Handshake = That Protocol's Handshake Only Else Handshake = SSLv2 Handshake
这个设置没有覆盖。 你唯一能做的就是编辑源代码,重新编译你自己的版本。 我已经创build了一个diff来强制SSLv2握手的兼容性,如果你想编译自己的。
所以事实certificate这一直是一个非问题。 Apache将接受上面发布的configuration之一的SSLv2握手。 我被一个握手错误误导成了这个问题。 这实际上只是一个服务器不信任客户端CA的configuration问题。