当前位置: 首页 > 面试题库 >

为什么Java的SSLSocket发送第2版客户端问候?

葛修永
2023-03-14
问题内容

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:

来自Java的基础网络:

“ SSLv2Hello”是一个伪协议,它允许Java使用SSLv2“ hello message”启动握手。这并 不会
导致使用的SSLv2协议,这是不是Java的所有支持。

并且从《JSSE参考指南》中:

J2SDK 1.4和更高版本中的JSSE实现实现SSL 3.0和TLS 1.0。它没有实现SSL 2.0。

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

支持SSL版本2.0服务器的TLS 1.0客户端必须发送SSL版本2.0客户端问候消息[SSL2] … 警告:
所有由于急需而淘汰的版本2.0客户端问候消息的能力。

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


问题答案:

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

IBM的JSSE确实完全支持SSLv2。

从《JSSE参考指南》中:

例如,某些较旧的服务器实现仅使用SSLv3,而不能理解TLS。理想情况下,这些实现应与SSLv3协商,但有些只是挂断。为了向后兼容,某些服务器实现(例如SunJSSE)发送封装在SSLv2
ClientHello数据包中的SSLv3 / TLS
ClientHellos。某些服务器不接受此格式,在这种情况下,请使用setEnabledProtocols禁用发送封装的SSLv2
ClientHellos。

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

编辑:感谢引用我的书!



 类似资料:
  • 问题内容: 我正在尝试连接到安全的Web服务。 即使我的密钥库和信任库已正确设置,我也遇到了握手故障。 经过几天的挫败,无休止的谷歌搜索并询问周围的所有人,我发现唯一的问题是java选择在握手期间不将客户端证书发送到服务器。 特别: 服务器请求了客户端证书(CN = RootCA)-即“给我一个由根CA签名的证书” Java查看密钥库,只发现我的客户端证书由“ SubCA”签名,该证书又由“ Ro

  • 我正在尝试在Netty中开始使用HTTP/2。我尝试了“hello world”示例,它按预期工作。在示例中,管道如下所示: 服务器: SslHandler 应用程序协议协商处理程序 Http2ConnectionHandler 客户: SslHandler 应用程序协议协商处理程序 HttpToHttp2ConnectionHandler

  • 这是我的代码: 服务器: 客户: 它可以正常工作,除了我希望当服务器向客户端发送“消息”“|MOD”时,我希望服务器将其发送给所有客户端,我该怎么做? 我是Java新手,但不是编码新手,所以如果我做错了一些可以做得更容易或更好的东西,请帮助我。 请帮忙。 非常感谢。

  • 我的问题是,我仍然可以在客户端之间发送消息(客户端到客户端),但发送两三次后,消息不再显示给收件人。 因此,基本上每当客户机希望向另一个客户机发送消息时,该消息首先被发送到服务器。但正如您从我的编码中注意到的,我是以对象的形式发送服务器数据的。例如: 当您发送消息时,类型是“message”。当服务器接收对象时,它检查接收数据及其类型。例如: 如果类型是“message”,那么它会向特定的客户端发

  • 我有这个代码: 我一直在犯这样的错误: java:不兼容的类型:com。应用句子分类请求。无法将生成器转换为com。应用句子分类请求 我已经使用Maven插件生成了gRPC Java文件。在看了多个例子后,我不确定我的问题是什么。

  • 我有一个java应用程序,它可以作为服务器,使用java监听一些端口。网DatagramSocket类。服务器能够从其他一些java客户端接收数据包。我没有做到的是在服务器上安装一个javascript客户端。我尝试过以WebSocket客户端发送消息 但我在浏览器控制台中发现以下错误: 应用程序。到“ws://localhost:9999/”的js:9 WebSocket连接失败: 我还尝试使用