调用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 秘钥库的口令

删除证书:

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PKIX path building failed是Java中的一个常见错误,它通常表示在建立PKIX路径出现了问题。PKIX(Public Key Infrastructure X.509)是一种用于验证和建立数字证书链的标准协议。 要解决PKIX path building failed错误,可以尝试以下几种方法: 1. 检查证书链:首先,确保你的证书链是完整和正确的。检查证书是否过期、是否被吊销或是否存在其他问题。可以使用Java的keytool工具来检查证书。 2. 更新证书库:如果你的Java环境中的证书库已过或缺少必要的根证书,可以尝试更新证书库。可以从可信任的证书颁发机构(CA)获取最新的根证书,并将其添加到Java的证书库中。 3. 禁用证书验证:在某些情况下,你可能希望暂禁用证书验证以解决问题。但请注意,这会降低安全性。可以通过设置SSLContext来禁用证书验证,例如: ``` SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, new TrustManager[] { new X509TrustManager() { public void checkClientTrusted(X509Certificate[] chain, String authType) {} public void checkServerTrusted(X509Certificate[] chain, String authType) {} public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } }}, new SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory()); ``` 请注意,禁用证书验证可能会导致安全风险,请在仔细评估后使用。 4. 检查网络连接:有PKIX path building failed错误可能是由于网络连接问题引起的。确保你的网络连接正常,并且可以访问远程服务器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值