文章目录
- 环境
- 前言
- HTTPS 请求流程
- 服务端支持
- JDK 验证
- 资源
环境
JDK 8
Hutool 4.5.1
前言
应供应商 DD 的 TLS 版本升级通知,企业版接口升级后 TLS 1.0 及 1.1 版本请求将无法连接,仅支持 TLS 1.2 及以上版本的客户端发起请求。
当前项目使用 Hutool 的 HttpUtil
作为客户端,而该客户端本质就是对 JDK HttpURLConnection
的封装,因此,也就是要判断 JDK 8 是否支持 TLS 1.2。
HTTPS 请求流程
服务端支持
要判断服务端是否支持 TLS 1.2,最简单的方法就是使用浏览器请求下,然后在开发人员工具
上查找其安全连接信息,
可以看到 https://www.baidu.com
已经支持 TLS 1.2,接下来就该验证 JDK 8 是否支持 TLS 1.2 了。
JDK 验证
首先判断下 JDK 8 支持哪些 HTTPS 的加密协议:
try (SSLServerSocket serverSocket = (SSLServerSocket) SSLServerSocketFactory.getDefault().createServerSocket()) {
System.out.println("服务器支持的协议");
for (String protocol : serverSocket.getSupportedProtocols()) {
System.out.println(protocol);
}
System.out.println("服务器启用协议");
for (String protocol : serverSocket.getEnabledProtocols()) {
System.out.println(protocol);
}
}
System.out.println();
try (SSLSocket socket = (SSLSocket) SSLSocketFactory.getDefault().createSocket()) {
System.out.println("客户端支持的协议");
for (String protocol : socket.getSupportedProtocols()) {
System.out.println(protocol);
}
System.out.println("客户端启用协议");
for (String protocol : socket.getEnabledProtocols()) {
System.out.println(protocol);
}
}
输出:
服务器支持的协议
TLSv1.3
TLSv1.2
TLSv1.1
TLSv1
SSLv3
SSLv2Hello
服务器启用协议
TLSv1.3
TLSv1.2
SSLv2Hello
客户端支持的协议
TLSv1.3
TLSv1.2
TLSv1.1
TLSv1
SSLv3
SSLv2Hello
客户端启用协议
TLSv1.3
TLSv1.2
可以看到 JDK 8 客户端是启用了 TLSv1.2 的,但如果发送 HTTPS 请求,那 JDK 8 是否会使用呢?
接下来初始化好项目,然后在 HttpRequest#execute#846
断点并执行代码:
String html = HttpUtil.get("https://www.baidu.com");
System.out.println(html);
httpResponse: # HttpResponse
httpConnection: # HttpConnection
conn: # HttpURLConnection
delegate: # DelegateHttpsURLConnection
inputStream: # HttpURLConnection$HttpInputStream
in: # ChunkedInputStream
hc: # HttpsClient
session: # SSLSessionImpl
protocolVersion: # ProtocolVersion
name: "TLSv1.2"
就可以确定如果服务端启用 TLS 1.2,那么 JDK 8 是可以支持的了。
资源
JDK 8
百度百科 HTTPS
dromara/hutool - 🍬A set of tools that keep Java sweet.
http客户端(Hutool-http)