手打不易,如果转摘,请注明出处!
注明原文:https://zhangxiaofan.blog.csdn.net/article/details/148254122
目录
背景
报错:PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
由于项目是内嵌的Apache HttpClient或OkHttp,项目不方便直接修改,所以需要手动管理证书(从浏览器导出、导入到JDK)。
如果你的项目是自己用Apache HttpClient或OkHttp,可以参考这篇文章来绕过证书检验:
检查项1—JDK17和JDK8的证书路径不同
JDK8: %JAVA_HOME%\jre\lib\security\cacerts
JDK17:%JAVA_HOME%\lib\security\cacerts
检查项2—检查IDEA设置的JDK
- 打开 IntelliJ IDEA →
File
→Project Structure
→SDKs
,检查JDK home path
是否指向你添加证书的 JDK(如C:\Program Files\Java\jdk-17
)。 - 如果配置了多个 JDK,确保项目实际运行的 JDK 是你修改过的版本。
检查项3—导出证书链不完整(关键)
使用浏览器访问目标接口的URL,导出完整的服务器证书(包括所有中间证书和根证书)
继续点击
注意导出证书的时候,需要导出完整的证书链,以及多个证书目录
为了避免出问题,我们要确保导入了所有 根证书(Root CA)或中间证书(Intermediate CA),就是说,只要出现在下面目录的,全部都导出一遍。
例如:证书有问题,尝试把下面3个目录全部导出一遍。这里我只导出了根目录(证书链)。
导出后就可以去安装证书了,以JDK17为例:
导入证书
先进入到JDK证书路径
cd /d %JAVA_HOME%\lib\security
拷贝证书到当前路径,然后导入
keytool -keystore <truststore证书> -import -alias <导入证书别名> -file <导入的证书> -storepass changeit
例如:
keytool -keystore cacerts -import -alias Baidu -file baidu.crt -storepass changeit
查看证书
keytool -list -V -keystore <truststore证书> -storepass changeit -alias <证书别名>
例如:
keytool -list -V -keystore cacerts -storepass changeit -alias Baidu
删除证书
keytool -delete -keystore cacerts -alias <证书别名>
例如:
keytool -delete -keystore cacerts -alias Baidu
至此,手动管理的证书就成功导入JDK,运行项目再试试!!