还在为PKIXPATHBUILDINGFAILED烦恼?看这里轻松解决

吉云

今天跟大家唠唠嗑,说说我昨天碰到的一个糟心事儿,关于“PKIX path building failed”的。这玩意儿,我一开始看到也是一脸懵,啥玩意儿?后来吭哧吭哧一顿操作,总算是搞明白,也解决。现在就来跟大家分享一下我的踩坑经历。

事情是这样的,昨天我需要调一个https的接口,结果代码一跑起来,直接给我报个错,控制台红彤彤的一片,仔细一看,就是这个“PKIX path building failed”。当时我就纳闷,之前调的好好的,怎么突然就抽风?

赶紧上网搜,各种说法都有,什么证书问题,什么JDK版本问题,看得我眼花缭乱。不过还看不少帖子,大概知道是个什么情况。简单来说,就是我的程序在验证服务器的SSL证书的时候,出问题。可能是因为服务器的证书不受信任,或者证书链不完整之类的。

还在为PKIXPATHBUILDINGFAILED烦恼?看这里轻松解决

解决过程

既然知道大概原因,那就开始动手解决呗。我先是尝试最简单粗暴的方法:

  • 方法一:修改代码,跳过证书验证。

网上有很多这种代码,直接复制粘贴,改几个参数就行。但是!我强烈不建议这样做!虽然这样做可以很快解决问题,但是相当于直接放弃安全验证,风险太大。就跟没穿衣服就出门一样,指不定就被谁给看。这个方法我只是用来临时测试一下,看看是不是真的是证书的问题。

还在为PKIXPATHBUILDINGFAILED烦恼?看这里轻松解决

  • 方法二:导入证书到本地信任库。

这个方法才是正道!也是我最终采用的方案。具体步骤如下:

  1. 下载服务器的证书。
  2. 还在为PKIXPATHBUILDINGFAILED烦恼?看这里轻松解决

这个每个服务器获取方式不一样,看服务器提供方,或者自己用浏览器也能下载,保存下来,后缀名一般是.crt或者.cer。我是直接让对方提供的。

  1. 使用keytool工具导入证书。

keytool是JDK自带的一个证书管理工具,具体命令如下:

还在为PKIXPATHBUILDINGFAILED烦恼?看这里轻松解决

keytool -import -alias your_alias -keystore cacerts_path -file your_certificate_path

这里解释一下:

  • your_alias:是你给这个证书起个名字,随便起,别跟已有的重复就行。
  • cacerts_path:是你的JDK的cacerts文件的路径。这个文件是用来存放信任的证书的。一般来说,在JDK的jre/lib/security目录下。比如我的是:/Library/Java/JavaVirtualMachines/jdk1.8.0_*/Contents/Home/jre/lib/security/cacerts
  • your_certificate_path:是你刚刚下载的证书的路径。
  • 还在为PKIXPATHBUILDINGFAILED烦恼?看这里轻松解决

执行这个命令的时候,会让你输入密码,默认密码是changeit。输完密码,再输入yes,确认导入就行。

  1. 重启程序。

重新跑一下你的程序,看看是不是已经好。如果还是不行,那可能就是其他问题,比如JDK版本太低,或者服务器配置有问题等等。

还在为PKIXPATHBUILDINGFAILED烦恼?看这里轻松解决

总结

这回解决“PKIX path building failed”问题,让我学到不少东西。最重要的就是,遇到问题不要慌,一步一步分析,总能找到解决办法的。安全问题一定要重视,不能为方便就牺牲安全。跳过证书验证这种做法,只能用来临时测试,正式环境千万不能用。

希望我的这回分享能帮到大家,如果你们也遇到类似的问题,可以参考一下我的解决过程。每个人的情况可能不一样,具体问题还要具体分析。多尝试,多学习,总能解决的!

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]