java后端发起https请求时Received fatal alert: protocol_version错误

博客内容讲述了在项目中遇到的一个定时任务崩溃问题,原因是Java默认TLS版本与三方服务接口不兼容,导致接收到`javax.net.ssl.SSLException: Received fatal alert: protocol_version`错误。解决方案是强制设置HTTP客户端使用TLSv1.2协议进行连接,通过修改HTTP请求代码,成功解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前段时间项目上明明好好的定时任务,发生了崩溃,好几天的数据都没有获取到。

查了下日志发现大批量的javax.net.ssl.SSLException: Received fatal alert: protocol_version;

原因:

在Java 1.8上,默认TLS协议是v1.2。在Java 1.6和1.7上,默认是已废弃的TLS1.0

这个原因是我能找到的一个可靠的说法,但这个接口以前就是https的,我认为这个三方的服务接口应该是被做了限制。具体怎样的不得而知

解决办法:

平常我们的httpclient请求是这样的

	public static CloseableHttpResponse postHttp(String url) throws Exception{
		CloseableHttpClient httpclient = HttpClients.createDefault();
		HttpPost httpPost = new HttpPost(url);
		CloseableHttpResponse response = null;
		response = httpclient.execute(httpPost);
		return response;
	}

 改为,使用TLSv1.2创建httpclient的方式即可,亲测有效

	public static CloseableHttpResponse getHttp(String url) throws Exception{
		SSLContext ctx = SSLContexts.custom().useProtocol("TLSv1.2").build();
		CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(new SSLConnectionSocketFactory(ctx)).build();
		HttpGet httpGet = new HttpGet(url);
		CloseableHttpResponse response = null;
		response = httpClient.execute(httpGet);
		return response;
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值