解决 『SunCertPathBuilderException:unable to find valid certification path to requested target』 问题

解决 『SunCertPathBuilderException:unable to find valid certification path to requested target』 问题

★ 问题

在 maven 编译的时候,出现证书校验错误,部分log如下:

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

此问题通常是在访问maven依赖库的网站(https的)时,证书被替换了,然后导致的。
为什么证书会被替换?可能的原因是,代理服务器作为中间人,在https传输过程中,将服务器的证书替换了,然后就可以监听https的流量了。通常,公司里会这么干。这里代理服务器利用了https协议的密钥交换过程,可以参考这篇文章:扫盲 HTTPS 和 SSL/TLS 协议

解决此问题,有两种方法。

★ 方法1:为maven添加属性maven.wagon.http.ssl.insecure=true

在mvn命令后面加上-Dmaven.wagon.http.ssl.insecure=true。此属性是让maven忽略安全性,不再校验服务器的证书(此时服务器的证书可能是被替换的)。

mvn -Dmaven.wagon.http.ssl.insecure=true package

★ 方法2:将证书添加到 cacerts 中

环境:Windows。

cacerts包含了很多CA证书,位置在Java的安装目录: 『Java\jdk1.8.0_65\jre\lib\security\cacerts』。

执行如下命令,将证书加到cacerts中:

keytool.exe -importcert -file <新证书> -keystore Java\jdk1.8.0_65\jre\lib\security\cacerts -storepass changeit

<新证书>可以是cer格式的,例如,xxx.cer。

执行此命令会提示你是否信任此证书,输入yes,回车。然后证书就加入cacerts中了。部分log如下:

Trust this certificate? [no]:  yes
Certificate was added to keystore

◇ 关于cacerts的说明

参考: https://www.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/com.ibm.java.security.component.80.doc/security-component/keytoolDocs/cacertsfile.html

A certificates file named “cacerts” resides in the security properties directory, java.home\lib\security, where java.home is the runtime environment directory (the jre directory in the SDK or the top-level directory of the Java™ 2 Runtime Environment).

The “cacerts” file represents a system-wide keystore with CA certificates. System administrators can configure and manage that file using keytool, specifying “jks” as the keystore type. The “cacerts” keystore file ships with several root CA certificates. The initial password of the “cacerts” keystore file is “changeit”. System administrators should change that password and the default access permission of that file when installing the SDK.

★ 参考

https://stackoverflow.com/questions/30480086/how-to-integrate-ssl-certificates-to-the-cacerts-file-in-jre-security-folder

GRADLE SunCertPathBuilderException: unable to find valid certification path to requested target错误是由于无法找到有效的证书路径引起的。 这个错误通常发生在使用HTTPS连接时,因为Java无法验证服务器的证书。解决这个问题的常用方法是下载站点证书,并将其导入到密钥库中,然后通过-Djavax.net.ssl.trustStore=... JVM选项来使用该密钥库。 另外,您还可以在Gradle的构建配置文件中配置信任的证书,以避免出现证书验证错误。 请注意,这个错误可能是由于服务器配置问题或证书过期等原因引起的,您可能需要与服务器管理员联系以获得更多支持。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [SunCertPathBuilderException: unable to find valid certification path to requested target错误的方法](https://blog.youkuaiyun.com/wh445306/article/details/128265595)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [gradle-trust-all:一个用于禁用 SSL 证书验证的 gradle 插件](https://download.youkuaiyun.com/download/weixin_42120541/19325493)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值