首页 > 解决方案 > 通过人工远程简单存储库提取 gradle distributionUrl 导致 javax.net.ssl.SSLHandshakeException

问题描述

我如何告诉 gradle wrapper 信任我的工件证书而不修改使用它的每台机器,或者我是否以错误的方式通过工件?

我的工件使用自签名证书,并且我的系统设置为信任它。在 gradle 构建中,对工件存储库的访问对我的依赖项非常有效,但 gradlew 则不那么好。

为了提高构建可靠性,我们为https://services.gradle.org/distributions/gradle-添加了一个人工制作的简单远程存储库,但在构建时请参阅以下内容:

gradle-wrapper.properties

distributionUrl=https\://artifactory01.megacorp.us/remote-simple-artifactory/distributions/gradle-4.0.2-all.zip

错误

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

看起来 gradlew 确实将人工制品视为中间人(本质上就是这样)。

这样做的正确方法是什么?

标签: artifactorygradlew

解决方案


该错误是由于运行 Artifactory 的 JAVA 在其受信任的根证书存储中没有受信任的远程 URL 的根证书引起的。

此外,请参阅以下有关 PKIX 的知识库文章。

一个附加选项,如果您的 URL 末尾有一个尾随“/”,这可能导致重定向到远程存储库的安全位置


推荐阅读