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实现”。
编辑:感谢引用我的书!