【发布时间】:2018-10-21 14:57:15
【问题描述】:
我已使用-Djavax.net.debug=all 选项在我的应用程序中启用日志。编写的代码应该使用 SSLv3 协议,但是在我检查时在日志中显示为 ::
*** ClientHello, TLSv1
*** ServerHello, TLSv1
据我了解,客户端和服务器使用 TLSv1 进行握手,但由于我在启动套接字时在代码中使用了 SSLv3,因此理想情况下它应该打印 SSLv3 而不是 TLSv1。
下面是我用过的sn-p代码:
SSLContextBuilder builder = new SSLContextBuilder();
builder.useProtocol("SSLv3");
SSLContext sslContext = builder.build();
有人可以澄清同样的原因,还是我错过了其他东西。只是补充一下,我使用的是 Java 7。
【问题讨论】:
-
为什么?只需让 Java 选择支持的最高版本即可。没有理由使用故意过时的协议。
-
@EJP 如果 Java 选择支持的最高版本,那么它不应该打印 1.2 而不是 1,因为 java7 支持 TLSv1.2 吗?我的意思是我不太确定,但如果我必须在某处使用 SSLv3 并且它也受 java 支持,那么为什么在日志中打印 TLSv1。我的问题是,不应该抛出错误信息吗?
-
握手期间message-related日志条目中的版本可能是错误的;见stackoverflow.com/questions/49748108/…。
READ:和WRITE:应该显示正确的记录版本,或者查看以十六进制转储的实际消息。注意 ClientHello 中的记录版本不控制使用的协议;这取决于 ClientHello 的 body 和 ServerHello 的 body 中的版本。 (对于 1.3,它也将取决于 extensions。但 j7 不做 1.3。)
标签: java tls1.2 sslv3 sslcontext ssl-security