javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated 问题解决

25 篇文章 0 订阅

最近线下调试银联支付时报错:

javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
at sun.security.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:431)
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128)
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:572)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180)
at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:294)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:640)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:479)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:784)

测试环境一直报这个错误,本地调试和生产环境没有问题。

然后就开始搜索 javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated ,网上也有很多解决方案,基本都是与https证书、协议版本有关,尝试了各种方法:

1、忽略证书校验、域名校验

2、将银联https证书导入到JDK中

3、打印ssl debug信息

      System.setProperty("javax.net.debug", "ssl"); 

debug信息如下:

resin-port-8080-30, handling exception: java.net.SocketException: Connection reset
%% Invalidated:  [Session-4, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256]
resin-port-8080-30, SEND TLSv1.2 ALERT:  fatal, description = unexpected_message
resin-port-8080-30, WRITE: TLSv1.2 Alert, length = 2
resin-port-8080-30, Exception sending alert: java.net.SocketException: 断开的管道
resin-port-8080-30, called closeSocket()
resin-port-8080-30, IOException in getSession():  java.net.SocketException: Connection reset
resin-port-8080-30, called close()
resin-port-8080-30, called closeInternal(true)
resin-port-8080-30, called close()
resin-port-8080-30, called closeInternal(true)

然后搜索debug中的各种信息,寻找解决方法,依然没有解决。

最终在一天晚上找到问题了,测试环境 禁止外网访问了!!!

允许银联支付域名访问外网,问题解决了。

javax.net.ssl.SSLException: Unsupported or unrecognized SSL message是一个SSL异常,它表示在进行SSL握手时收到了不支持或无法识别的SSL消息。这可能是由于以下原因导致的: 1. 协议不匹配:客户端和服务器之间的SSL协议版本不匹配。可以尝试升级或降级SSL协议版本来解决问题。 2. 代理问题:如果在客户端和服务器之间存在代理服务器,可能会导致SSL握手失败。可以尝试绕过代理服务器或配置代理服务器以支持SSL。 3. 证书问题:客户端或服务器的SSL证书可能无效或过期。可以尝试更新证书或使用有效的证书来解决问题。 4. 密钥问题:客户端或服务器的SSL密钥可能无效或不匹配。可以尝试重新生成密钥或使用正确的密钥来解决问题解决javax.net.ssl.SSLException: Unsupported or unrecognized SSL message的方法包括: 1. 检查SSL协议版本:确保客户端和服务器之间的SSL协议版本匹配。可以尝试升级或降级SSL协议版本来解决问题。 2. 检查代理设置:如果存在代理服务器,请确保代理服务器正确配置以支持SSL。可以尝试绕过代理服务器或配置代理服务器以支持SSL。 3. 更新证书:检查客户端和服务器的SSL证书是否有效且未过期。如果证书无效或过期,可以尝试更新证书来解决问题。 4. 重新生成密钥:如果SSL密钥无效或不匹配,可以尝试重新生成密钥或使用正确的密钥来解决问题。 范例:<<引用:检查SSL协议版本是否匹配。[^1]。引用:检查代理设置是否正确。[^2]。引用:更新SSL证书。[^3]。引用:重新生成SSL密钥。[^4]。 以下是解决javax.net.ssl.SSLException: Unsupported or unrecognized SSL message的方法: 1. 检查SSL协议版本 - 确保客户端和服务器之间的SSL协议版本匹配。 - 可以尝试升级或降级SSL协议版本来解决问题。 2. 检查代理设置 - 如果存在代理服务器,请确保代理服务器正确配置以支持SSL。 - 可以尝试绕过代理服务器或配置代理服务器以支持SSL。 3. 更新SSL证书[^3] - 检查客户端和服务器的SSL证书是否有效且未过期。 - 如果证书无效或过期,可以尝试更新证书来解决问题。 4. 重新生成SSL密钥[^4] - 如果SSL密钥无效或不匹配,可以尝试重新生成密钥或使用正确的密钥来解决问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值