该SSLSocket.getEnabledProtocols()方法返回以下内容: [SSLv2Hello, SSLv3, TLSv1].事实上,当我打电话connect()并打开SSL调试时,我看到使用了一个v2客户端问候:
main, WRITE: TLSv1 Handshake, length = 81
main, WRITE: SSLv2 client hello message, length = 110
Run Code Online (Sandbox Code Playgroud)
但我已经发现了两个(诚然旧)基准说JSSE并不能支持SSL版本2:
来自Java的基础网络:
'SSLv2Hello'是一种伪协议,它允许Java使用SSLv2'hello消息'发起握手.这并不会导致使用的SSLv2协议,这是不是Java的所有支持.
并从JSSE参考指南:
J2SDK 1.4及更高版本中的JSSE实现实现了SSL 3.0和TLS 1.0.它没有实现SSL 2.0.
现在,我的理解是,当客户端2.0版客户端问候应只发送不支持SSL 2.0版.来自RFC 2246:
支持SSL 2.0版服务器的TLS 1.0客户端必须发送SSL 2.0版客户端问候消息[SSL2] ... 警告:发送2.0版客户端问候语消息的能力将逐步淘汰.
那么为什么Java使用它呢?
use*_*421 18
Sun的JSSE不支持SSLv2,但它支持SSlv2ClientHello,以支持一些需要它的SSL服务器.您可以通过从启用的协议中删除它来关闭它.
IBM的JSSE完全支持SSLv2.
来自JSSE参考指南:
例如,一些较旧的服务器实现只说SSLv3而不理解TLS.理想情况下,这些实现应该协商SSLv3,但有些只是挂起.为了向后兼容,某些服务器实现(例如SunJSSE)发送封装在SSLv2 ClientHello数据包中的SSLv3/TLS ClientHellos.某些服务器不接受此格式,在这些情况下使用setEnabledProtocols禁用发送封装的SSLv2 ClientHellos.
我想'服务器实现'应该是上面的'SSL实现'.
编辑:谢谢你引用我的书!
| 归档时间: |
|
| 查看次数: |
33886 次 |
| 最近记录: |