线上问题排查-接口请求偶尔失败

发布时间:2023年12月20日

问题背景

更换arm机器后,部分接口请求异常。 运维反馈线上微信撤销接口有异常日志 且一个月前就存在

问题分析

1.通过日志查看 请求未正常响应 报错:Caused by: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)

判断是https请求的TLS协议相关问题。

2.通过日志的规律 只有arm架构的服务器出现这个报错 原x86服务器正常,猜测和服务器底层差异相关。

3.jdk层面,x86服务器使用的jdk版本是1.8.0_172,arm架构由于底层构造差异,对应的jdk为openjdk 1.8.303 ,根据openjdk官方介绍:OpenJDK 版本 1.8.0 292 在 JDK 本身中禁用了对 TLS 1.0 和 TLS 1.1 的支持,默认情况下,在 Mule 级别允许使用 TLS 1.1,但是当在 JDK 本身中禁用此功能时,您将在任何连接中看到类似上述的连接错误尝试使用 TLS 1.1 或 TLS 1.0。arm服务器中的jdk版本禁用了TLS1.0和TLS1.1。

4.代码级别,撤销接口使用ssl证书加密 传输

使用的http请求工具类中构建sslSocketFactory时候set的protocol是TLS1.0,在x86架构的服务器上没有异常是因为 x86服务器上的openssl版本是1.0.2k,是支持对应TLS1.0的协议的。arm架构服务器的openssl版本则是openssl 1.1.1k,支持TLS1.2和TLS1.3。

综上,原因为机器底层架构差异导致的使用jdk版本和支持TLS协议的不同,导致撤销接口请求时异常。

问题解决:

工具类中的TLS协议列表设置添加1.2版本(也可以加上TLS1.3,arm服务器上的openssl版本为1.1.1k 可以支持TLS1.2和TLS1.3)。

代码中使用到这个工具类的地方包括微信的撤销和退款接口,其余微信接口基本使用OkhttpClient进行请求,工对应OkhttpClient工具类中进行了忽略校验处理,请求不会出现异常。

文章来源:https://blog.csdn.net/qq_33790251/article/details/135106850
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。