日常 - HttpURLConnection 网络请求 TLS 1.2

news2024/11/26 4:51:37

文章目录

  • 环境
  • 前言
  • 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 请求流程

Client Server https 请求 https://www.baidu.com/ TCP 三次握手 SYN SYN + ACK ACK 服务端 TLS 信息 Client Hello(发送客户端随机数、支持的 TLS 版本、加密算法) Server Hello(服务端随机数、选定的密钥等) Certificate(网站证书 public key) Server Hello Done(服务端消息发送完毕) 客户端证书验证 客户端 TLS 信息 Client Key Exchange(提供客户端密钥交换算法) Change Cipher Spec(切换加密模式) Finished Change Cipher Spec Finished TLS 验证完毕,发送加密应用数据 Client Server

服务端支持

要判断服务端是否支持 TLS 1.2,最简单的方法就是使用浏览器请求下,然后在开发人员工具上查找其安全连接信息,
百度 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);

HttpRequest#execute#846

httpResponse:                          # HttpResponse
  httpConnection:                      # HttpConnection
    conn:                              # HttpURLConnection
      delegate:                        # DelegateHttpsURLConnection
        inputStream:                   # HttpURLConnection$HttpInputStream
          in:                          # ChunkedInputStream
            hc:                        # HttpsClient
              session:                 # SSLSessionImpl
                protocolVersion:       # ProtocolVersion
                  name: "TLSv1.2"

百度 HTML

就可以确定如果服务端启用 TLS 1.2,那么 JDK 8 是可以支持的了。

资源

JDK 8
百度百科 HTTPS
dromara/hutool - 🍬A set of tools that keep Java sweet.
http客户端(Hutool-http)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/578461.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

有序表2:跳表

跳表是一个随机化的数据结构,可以被看做二叉树的一个变种,它在性能上和红黑树,AVL树不相上下,但是跳表的原理非常简单,目前在Redis和LeveIDB中都有用到。 它采用随机技术决定链表中哪些节点应增加向前指针以及在该节点…

找不到“SqlServer”模块-- 在此计算机上找不到任何 SQL Server cmdlet。

https://github.com/PowerShell/PowerShell/releases/tag/v7.2.2SQL Server Management Studio 18 启动触发器报错 标题: 找不到“SqlServer”模块 --------------- 在此计算机上找不到任何 SQL Server cmdlet。 在 https://powershellgallery.com/packages/SqlServer 上获取“…

PyTorch深度学习实战(1)——神经网络与模型训练过程详解

PyTorch深度学习实战(1)——神经网络与模型训练过程详解 0. 前言1. 传统机器学习与人工智能2. 人工神经网络基础2.1 人工神经网络组成2.2 神经网络的训练 3. 前向传播3.1 计算隐藏层值3.2 执行非线性激活3.3 计算输出层值3.4 计算损失值3.5 实现前向传播…

Linux——应用层之序列号与反序列化

TCP协议通讯流程 tcp是面向连接的通信协议,在通信之前,需要进行3次握手,来进行连接的建立。 当tcp在断开连接的时候,需要释放连接,4次挥手 服务器初始化: 调用socket, 创建文件描述符; 调用bind, 将当前的文件描述符和ip/port绑定在一起; 如果这个端口已经被其他进程占用了…

【机器学习】9种回归算法及实例总结,建议学习收藏

我相信很多人跟我一样,学习机器学习和数据科学的第一个算法是线性回归,它简单易懂。由于其功能有限,它不太可能成为工作中的最佳选择。大多数情况下,线性回归被用作基线模型来评估和比较研究中的新方法。 在处理实际问题时&#…

VirtualBox安装增强功能

在刚安装完的VisualBox中,默认屏幕是固定设置的,不会根据实际的窗口大小做自适应,这时候我们需要【安装增强功能】,然后打开【自动调整显示大小】,就可以实现虚拟机中屏幕自适应。 本教程的软件环境如下: 宿…

数据结构: 第四章 串

文章目录 一、串的定义和实现1.1串的定义和基本操作1.1.1串的定义1.1.2串的基本操作1.1.3小结 1.2串的存储结构1.2.1顺序存储1.2.2链式存储1.2.3基于顺序存储实现基本操作1.2.4小结 二、串的模式匹配2.1什么是字符串的模式匹配2.2朴素模式匹配算法2.3KMP算法2.4求next数组2.5KM…

python+django协同过滤算法的美食O2O外卖点餐系统vue

当然使用的数据库是mysql。尽管没有面向对象的数据库的作用强大,但是在Python开发上还是比较的灵活和方便的。系统功能主要介绍以下几点: 本外卖点餐系统主要包括二大功能模块,即用户功能模块和管理员功能模块。 (1)管…

Linux上安装jdk Tomcat mysql redis

1.安装JDk 1.1这里使用xshell中xfxp进行文件的上传,将jdk二进制包上传到Linux服务器上 下载地址:Java Downloads | Oracle 或者这里有下载好的安装包:链接:https://pan.baidu.com/s/1ZSJxBDzDaTwCH2IG-d2Gig 提取码:…

dubbo 3.2.0 consumer bean初始化及服务发现简记

consumer bean初始化 以spring 如下配置<dubbo:reference id"versionConsumerBean" interface"org.apache.dubbo.samples.version.api.VersionService" version"*"/>为例&#xff0c;先使用spring 的初始化&#xff0c;核心代码 try {fin…

EDR(端点、端点检测与响应中心、可视化展现)

EDR基本原理与框架 EDR定义 端点检测和响应是一种主动式端点安全解决方案&#xff0c;通过记录终端与网络事件&#xff08;例如用户&#xff0c;文件&#xff0c;进程&#xff0c;注册表&#xff0c;内存和网络事件&#xff09;&#xff0c;并将这些信息本地存储在端点或集中数…

C#,码海拾贝(26)——求解“一般带状线性方程组banded linear equations”之C#源代码,《C#数值计算算法编程》源代码升级改进版

using System; namespace Zhou.CSharp.Algorithm { /// <summary> /// 求解线性方程组的类 LEquations /// 原作 周长发 /// 改编 深度混淆 /// </summary> public static partial class LEquations { /// <summary> /…

Redis五大基本数据结构(原理)

一、 Redis数据结构-String String是Redis中最常见的数据存储类型&#xff1a; 其基本编码方式是RAW&#xff0c;基于简单动态字符串&#xff08;SDS&#xff09;实现&#xff0c;存储上限为512mb。 如果存储的SDS长度小于44字节&#xff0c;则会采用EMBSTR编码&#xff0c;…

c++ 11标准模板(STL) std::map(六)

定义于头文件<map> template< class Key, class T, class Compare std::less<Key>, class Allocator std::allocator<std::pair<const Key, T> > > class map;(1)namespace pmr { template <class Key, class T, clas…

优化器| SGD/SGD-m/SGD-NAG/Adagrad/Adadelta/RMSProp/Adam/Nadam/Adamax

前言&#xff1a;最近准备复习一下深度学习的基础知识&#xff0c;开个专栏记录自己的学习笔记 各种SGD和Adam优化器整理 基本概念 优化&#xff1a;最大化或最小化目标函数&#xff0c;具体指最小化代价函数或损失函数 损失函数 J(θ)f(hθ(x)&#xff0c;y)&#xff0c;h…

软考A计划-试题模拟含答案解析-卷五

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

Android 12.0仿ios的hotseat效果修改hotseat样式

1.概述 最近在12.0产品项目需求的需要,系统原生Launcher的布局样式很一般,所以需要重新设计ui对布局样式做调整,产品在看到 ios的hotseat效果觉得特别美观,所以要仿ios一样不需要横屏铺满的效果 居中显示就行了,所以就要看hotseat的具体布局显示了 效果图如下: 2.仿io…

《Spring Guides系列学习》guide51 - guide55

要想全面快速学习Spring的内容&#xff0c;最好的方法肯定是先去Spring官网去查阅文档&#xff0c;在Spring官网中找到了适合新手了解的官网Guides&#xff0c;一共68篇&#xff0c;打算全部过一遍&#xff0c;能尽量全面的了解Spring框架的每个特性和功能。 接着上篇看过的gui…

网络设备的部署(串行与并行)

串行设备 1.防火墙&#xff1a;能够实现区域隔离和访问控制 2.IPS(入侵防御系统)&#xff1a;能够检测入侵行为并阻断 3.WAF&#xff08;上网行为管理设备&#xff09;&#xff1a;保障web应用的安全 4.上网行为管理设备&#xff1a;对用户上网行为进行控制 5.FC交换机&am…

【源码解析】SpringBoot使用Nacos配置中心和使用 @NacosValue 进行热更新

SpringBoot使用Nacos 引入依赖 <dependency><groupId>com.alibaba.boot</groupId><artifactId>nacos-config-spring-boot-starter</artifactId><version>0.2.12</version> </dependency>增加本地配置 nacos:config:server-…