JDK17从浏览器导入证书,解决报错:PKIX path building failed

手打不易,如果转摘,请注明出处!

注明原文:https://zhangxiaofan.blog.csdn.net/article/details/148254122


目录

背景

检查项1—JDK17和JDK8的证书路径不同

检查项2—检查IDEA设置的JDK

检查项3—导出证书链不完整(关键)

导入证书

查看证书

删除证书


背景

报错: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,可以参考这篇文章来绕过证书检验:

Java Apache Http绕过Https证书校验:PKIX failed: SunCertPathBuilderException:unable to find valid certificat_pkix path building failed 绕过-CSDN博客文章浏览阅读465次,点赞9次,收藏3次。Java Apache Http绕过Https证书校验:PKIX failed: SunCertPathBuilderException:unable to find valid certificat_pkix path building failed 绕过 https://zhangxiaofan.blog.csdn.net/article/details/140637934

检查项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,运行项目再试试!!

### DBeaver 连接 Hive 安全证书验证错误解决方案 当遇到 `sun.security.validator.ValidatorException` 和 `PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException` 错误时,这通常意味着 Java 应用程序无法找到有效的认证路径来验证服务器的 SSL/TLS 证书。对于 DBeaver 连接到 Hive 的情况,可以采取以下措施: #### 修改 JVM 参数配置 为了使 DBeaver 能够信任特定的 CA 或自签名证书,在启动 DBeaver 之前设置环境变量或者修改其快捷方式中的目标字段,加入如下参数[^1]: ```bash -Djavax.net.ssl.trustStore=/path/to/trusted/cacerts.jks \ -Djavax.net.ssl.trustStorePassword=changeit ``` #### 导入所需证书到 cacerts 文件 如果问题是由于缺少某些根证书引起的,则可以通过导入这些缺失的证书JDK/JRE 自带的信任存储文件 (cacerts) 来解决问题。具体操作命令如下所示[^3]: ```bash keytool -importcert -file /path/to/your_certificate.cer \ -alias your_alias_name \ -keystore "$JAVA_HOME/jre/lib/security/cacerts" \ -storepass changeit ``` #### 配置 Maven 设置(适用于通过 Maven 构建项目) 如果是基于 Maven 开发的应用,并且遇到了类似的依赖项下载失败的情况,那么还需要确保本地计算机上的 Maven 已经被正确设置了全局级别的 trustStore 属性。 另外需要注意的是,有时可能是因为网络代理的原因导致 HTTPS 请求受阻而引发此类异常;此时应检查是否有合适的 HTTP(S)_PROXY 变量已定义并生效于当前运行环境中。 以上方法应该可以帮助解决大部分由 PKIX Path Building Failed 引起的问题。不过值得注意的是,安全性和合规性始终是最重要的考虑因素之一,因此建议仅限于开发测试环境下使用上述手段绕过严格的SSL握手流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值