调用ETC接口时出现PKIX path building failed错误

最近做ETC项目时候,在调用ETC接口出现了javax.net.ssl.SSLHandshakeException异常。

完整的异常信息:

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

上面异常信息提示:请求目标没有发现有效的证书路径。访问ETC接口使用的是HTTPS安全的网络通信协议,导致该问题的原因是应用程序所在JVM环境没有找对对应的证书文件。

其实解决方法也挺简单,就是把接口地址的证书下载下来,然后安装到JVM所在环境中。具体步骤如下:

  • 第一步: 在浏览器上输入应用程序需要调用的接口地址,然后按下F12,然后在security栏目中点击View certificate按钮;
    在这里插入图片描述
    记住证书的名字:
    在这里插入图片描述

  • 第二步:在“运行”中输入certmgr.msc,打开证书管理窗口后,找到我们需要下载的证书文件;
    在这里插入图片描述

  • 第三步:选中需要下载的证书文件,然后鼠标右键->所有任务->导出,把证书导出到本地磁盘上;
    在这里插入图片描述

  • 第四步:打开命令窗口,然后执行keytool命令,将证书安装到本地环境中;

参数说明:
  -import 导入证书操作
  -alias 秘钥对的别名
  -keystore 秘钥对的路径及名称
  -file 证书文件的路径
  -trustcacerts 告诉keytool您要将其导入作为受信任的证书

例如:

keytool -import -alias cacerts -keystore cacerts -file D:\JavaEE\JDK\jdk1.8.2\jre\lib\security\zsetc.crt -trustcacerts

输入秘钥库的口令回车即可。
在这里插入图片描述
如果要查看已安装的证书,可以执行以下命令:

keytool -list -v -alias cacerts -keystore cacerts -storepass 秘钥库的口令

删除证书:

扫描二维码关注公众号,回复: 13117336 查看本文章
keytool -delete -alias cacerts -keystore cacerts -storepass 秘钥库的口令

除了上面方法以外,在JDK 8u101版本添加了三个新的根证书(https://bugs.openjdk.java.net/browse/JDK-8154757)。
在这里插入图片描述
因此,也可以通过升级JDK的方式解决上面的问题。

猜你喜欢

转载自blog.csdn.net/zhongliwen1981/article/details/106767589