http.HttpClientHandler =>httpclient执行postEntity请求发生异常 java.net.SocketException: Connection reset处理过程

刚上线的业务系统,对接方无法注册且未收到注册请求。查看tomcat日志有提示,测试访问对方接口提示nss error -5961。先升级nss、导入对方接口域名证书到Linux服务器根证书,仍报错。后发现tomcat加载java中cacerts证书库,将jdk从1.7.x升级到1.8版本,重启服务后日志无报错。

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

问题:
刚上线的一个业务系统,系统对接方xxx无法注册,没有收到我们的注册请求
日志:
查看tomcat日志,提示

MESSAGE:com.xxxx.http.HttpClientHandler =>httpclient执行postEntity请求发生异常:
java.net.SocketException: Connection reset
结果:jsonView={"code":"4004","msg":"调用xxxx注册接口无响应。"}

在这里插入图片描述
在这里插入图片描述
处理过程:
测试访问对方接口

#curl -v https://xxxx.com.cn/wechat-api/member/xxxx.do

提示nss error -5961
在这里插入图片描述
升级nss

#yum update nss

导入对方接口域名证书到我方Linux服务器根证书ca-bundle.crt
#ll /etc/pki/tls/certs/ca-bundle.crt
操作指引可参考:linux系统添加根证书 linux证书信任列表
在这里插入图片描述
再次测试访问对方接口,正常访问

 #curl -v https://xxxx.com.cn/wechat-api/member/xxxx.do

在这里插入图片描述
但检查日志,发现tomcat日志还是报一样的错误…
想起tomcat运行时会加载java中的cacerts证书库
目前tomcat服务器上安装jdk为1.7.x版本,尝试将jdk升级到1.8版本

# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

升级完jdk,重启tomcat服务,以jdk1.8环境运行tomcat
在这里插入图片描述
再次检查日志,无报错~

当你遇到 `HttpClient` 发送 POST 请求时,如果遇到 "未能创建 SSL/TLS 安全通道" 的错误,通常是因为以下几个原因: 1. **证书问题**:可能是服务器使用的证书不是受信任的,或者客户端计算机缺少必要的根证书。你可以尝试更新你的证书存储,或者直接在代码中添加不受信任证书的信任。 2. **SSL/TLS版本兼容性**:确保你的 `HttpClient` 和目标服务器支持相同的TLS协议版本。比如,如果你的服务器只支持 TLS 1.2 或更高,需要设置 `HttpClientHandler` 的 `SslProtocols` 属性。 3. **网络防火墙或代理设置**:检查是否存在阻止连接到特定端口或阻止 SSL/TLS通信的防火墙规则。如果有,你需要配置它们允许相应的连接。 4. **证书验证设置**:如果你正在使用自定义的 `CertificateValidationCallback`,确保其正确处理了证书验证。 5. **系统时间问题**:如果系统时间过期或者与UTC有较大偏差,也可能导致SSL连接失败。请确保系统的日期和时间正确。 解决这个问题的代码示例通常是这样的: ```csharp using HttpClientHandler = System.Net.Http.HttpClientHandler; // 创建一个新的 HttpClientHandler,并设置证书验证 HttpClientHandler handler = new HttpClientHandler(); handler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true; // 简单地忽略所有错误 // 使用 HttpClient 并指定 HttpClientHandler using HttpClient client = new HttpClient(handler); client.DefaultRequestHeaders.Accept.Clear(); // 如果有必要,清除 Accept 头部 var content = new StringContent(jsonData, Encoding.UTF8, "application/json"); var response = await client.PostAsync(url, content); ``` 记得检查
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值