Gradle 下载失败找不到证书 ValidatorException

问题

在 Android 打包下载 Gradle 是出现异常

在这里插入图片描述

堆栈信息

Exception in thread "main" 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
	
	at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
	at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1937)
	at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:302)
	at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296)
	at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1478)
	at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:212)
	at sun.security.ssl.Handshaker.processLoop(Handshaker.java:969)
	at sun.security.ssl.Handshaker.process_record(Handshaker.java:904)
	at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1050)
	at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1363)
	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1391)
	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1375)
	at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:563)
	at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
	at sun.net.www.protocol.http.HttpURLConnection.followRedirect0(HttpURLConnection.java:2661)
	at sun.net.www.protocol.http.HttpURLConnection.followRedirect(HttpURLConnection.java:2583)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1769)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1440)
	at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
	at org.gradle.wrapper.Download.downloadInternal(Download.java:78)
	at org.gradle.wrapper.Download.download(Download.java:63)
	at org.gradle.wrapper.Install$1.call(Install.java:68)
	at org.gradle.wrapper.Install$1.call(Install.java:48)
	at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:69)
	at org.gradle.wrapper.Install.createDist(Install.java:48)
	at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:107)
	at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:63)
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: 
	sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:387)
	at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292)
	at sun.security.validator.Validator.validate(Validator.java:260)
	at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324)
	at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:229)
	at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124)
	at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1460)
	... 22 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException:
	unable to find valid certification path to requested target
	at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:145)
	at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:131)
	at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280)
	at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:382)
	... 28 more

解决

1、下载证书

看日志这是 gradle 下载地址

https://services.gradle.org/distributions/gradle-6.5.1-bin.zip

在浏览器访问 https://services.gradle.org/distributions/ 地址,下载证书

在这里插入图片描述
在这里插入图片描述

2、导入证书

  • 查看已有证书

keytool -list -keystore “jdk 路径下的\lib\security\cacerts” > keystore-info.log

例如:
keytool -list -keystore “D:\AndroidStudioLatest\java11\install\lib\security\cacerts” > keystore-info.log

注意:查看和导入证书都需要输入密钥库口令,如果你未曾设置过,默认口令是:changeit

在这里插入图片描述

  • 导入指定证书

keytool -import -keystore “jdk 路径下的\security\cacerts” -file “证书路径”

例如:
keytool -import -keystore “D:\AndroidStudioLatest\java11\install\lib\security\cacerts” -file “C:\Users\QAQ\Downloads\gradle.org.crt”

我发现我本地不同 jdk 版本之间有一个细微的差异:

jdk 11:D:\AndroidStudioLatest\java11\install\lib\security\cacerts

jdk 1.8:C:\Program Files\Java\jdk1.8.0_40\jre\lib\security\cacerts

总之都在 jdk 目录下,找不到时找其他或许能发现

3、检查证书是否导入

在导入证书前,我们先使用查看获取一份已有证书

在导入证书后,再获取一份已有证书

通过对比证书的 SHA-256 是否存在证书列表里判断导入证书成功与否

在这里插入图片描述
在这里插入图片描述

至此,重新打包问题不再出现了!

如果不行,重启一次 Android studio

其他解决方式

如果你不想上面那么‘复杂’的操作,你可以直接在gradle/wrapper/gradle-wrapper.properties更换 gradle 镜像地址即可,快速便捷

  • 腾讯 gradle 镜像

distributionUrl=https://mirrors.cloud.tencent.com/gradle/gradle-6.5.1-bin.zip

  • 华为 gradle 镜像

distributionUrl=https://mirrors.huaweicloud.com/gradle/gradle-6.5.1-bin.zip

在这里插入图片描述

如果更换镜像不行,最好还是根据上述配置证书,并且重启 Android studio

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值