https单向握手通信异常“PKIX path building failed”

1. 现象

上周五客户做了换卡操作,然后绑卡确认的时候,银行接口报

javax.net.ssl.SSLHandshakeException:
sun.security.validator.ValidatorException: 
PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilder Exception: 
unable to find valid certification path to requested target

然后该步骤一直过不去,因为只有一条换卡的银行绑定信息,所以我们当时直接设置完成处理过去了。

2. 描述

绑卡的过程是https单向握手通信,这里需要服务方认证才可以通信,所以我们机器需要导入相关证书。银行接口使用的是java开发环境,而java的证书库与Windows自带的不共享,这里需要keytool工具导入。
通过与民生技术人员的了解,最近民生监管行的证书有变动,导致现机器使用原有证书认证失败,出现上述的异常。
同样类似的问题也会出现在银联渠道和通联渠道。

3. 解决方法

一般情况下,我们得重新下载证书,然后用keytool工具删除原有的证书,再重新导入证书
以我今天实际处理过程为例,大家可以参考下:

3.1.下载民生证书

IE浏览器下输入https://pay.cmbc.com.cn/epay/fundFileAccess.do 这个地址,看到右边有个证书的认证,点击去会看到“网站标示”页,底部有个“查看证书”,如图:

浏览器查看证书

点击那个“查看证书”,出来一个证书界面,如图:

查看证书界面

切换到“详细信息”菜单栏,找到“复制到文件”,如下图:

复制文件

点击“复制到文件”,出现“证书导出向导”界面,点击“下一步”,如下图:

证书导出向导

勾选第一项“DER编码二进制”,继续下一步,如下图:

DER编码二进制

选择导出的证书路径和名称,这里是pay-cmbc-new.cer,继续下一步,如下图:

保存文件

点击完成即可

3.2.删除原有的证书

找到java安装目录下的cacerts(JAVA_HOME/jre/lib/security),这是java储存证书的文件。我们可以使用keytool命令查看里面的证书信息:
keytool -list -v -keystore D:/cacerts -storepass 123456

keytools查看命令

如上图,里面是有民生的证书信息,这里使用keytool删除命令:
keytool -delete -alias pay-cmbc -keystore D:/cacerts -storepass 123456

删除证书

3.3.导入新证书

我们使用keytool命令导入证书信息:
keytool -import -alias pay-cmbc-new -file D:/pay-cmbc-new.cer -keystore D:/cacerts –storepass 123456
命令行中出现“信任这个认证?”的时候,输入“y”即可,如下图:

导入证书

命令行出现“认证已添加至keystore中”,认证已经添加,如下图:

已经导入证书

添加认证之后,用keytool命令检查一下证书是否有导入。

3.4.重启tomcat或者weblogic中间件

将添加新认证的cacerts认证库文件重新覆盖,然后重启tomcat即可。

同时你可以通过查看,记得打赏哦。

你可能感兴趣的:(https单向握手通信异常“PKIX path building failed”)