SSLSocket.getEnabledProtocols()方法返回以下内容:[SSLv2Hello, SSLv3, TLSv1]。确实,当我调用connect()并启用SSL调试时,我看到使用了v2客户端问候:

main, WRITE: TLSv1 Handshake, length = 81
main, WRITE: SSLv2 client hello message, length = 110

但是我发现有两个(很老的)引用,它们说JSSE确实而不是支持SSL版本2:

Fundamental Networking in Java:



JSSE Reference Guide:



现在,我的理解是,仅当客户端确实支持SSL 2.0版时,才发送2.0版客户端问候。从RFC 2246:



那么,为什么Java使用它呢?

最佳答案

Sun的JSSE不支持SSLv2,但它支持SSlv2ClientHello,以支持某些需要它的SSL服务器。您可以通过将其从启用的协议(protocol)中删除来关闭它。

IBM的JSSE确实完全支持SSLv2。

JSSE Reference Guide:



我想象“服务器实现”应该读为上面的“SSL实现”。

编辑:感谢引用我的书!

09-11 09:04