【发布时间】:2021-11-25 23:38:36
【问题描述】:
我正在寻找一个用于对服务进行 REST API 调用的应用程序(已经开发)。这会导致致命错误,在调试时使用 tcpdump 显示请求使用的是 TLSv1.0,而服务期望使用 v1.2。
此应用程序在 Java 8 上运行,根据 jre 文档,在 Java 8 中,TLS 应该默认为 TLSv1.2。
为什么应用程序不使用 TLSv1.2 发送请求,我该如何调试它?我应该只在 java 参数中传递 https.protocol 选项吗?
谢谢! PS:我对 Java 还很陌生。
【问题讨论】:
-
你在哪个版本的 JDK 上运行?
-
系统属性
https.protocols(带有s或被忽略)可以在命令行或代码中设置,但仅影响使用HttpsURLConnection或在某些情况下Apache httpclient的连接;这就是你的代码的作用吗?对于所有代码方法jdk.tls.client.protocols可以用作默认值。 -
@OldProgrammer JDK 1.8.
-
@dave_thompson_085 为什么即使是 JDK 1.8 应用程序也没有使用默认的 1.2?
-
可能是您使用的应用程序或库、其他代码、JVM 配置或环境。根据您未提供的信息,可能有数千种可能性。查找minimal example that shows the problem,如果您在此过程中没有发现问题,请添加到您的Q。起点可能是一个仅包含
SSLSocket s = (SSLSocket) SSLSocketFactory.getDefault().createSocket(yourhost,yourport);System.out.println (Arrays.toString (s.getEnabledProtocols()));s.startHandshake();的类