gradlew.bat(和 gradlew)包装器上的 SSLHandShakeException,但安装的 gradle 上没有
gradlew.bat (and gradlew) SSLHandShakeException on wrappers but not on installed gradle
Downloading https://services.gradle.org/distributions/gradle-2.12-bin.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
与此类似的问题:
除非我只在通过包装器执行时得到这个异常? (已安装的本地 gradle 命令可以正常工作。)我尝试了建议的解决方案,但无法正常工作。我什至在 cacerts
中下载并安装了来自 https://services.gradle.org/distributions/ 的证书
keytool -import -file "C:\tmp\gradlew.x509.base64.cer" -alias gradle -keystore "C:\Apps\java\jre\lib\security\cacerts"
我从包装器得到命令:
java -Dorg.gradle.appname=gradlew -classpath "C:\mystuff\gradle-2.12\samples\java\multiproject\gradle\wrapper\gradle-wrapper.jar" org.gradle.wrapper.GradleWrapperMain clean
我的猜测是证书本身有问题或者我使用了错误的编码?
$ java -version
Picked up _JAVA_OPTIONS: -Xmx512M
java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)
为了使这个复杂化,我尝试使用此处建议的方法从 gradle 安装证书,这似乎有效(根据输出)
http://infposs.blogspot.ca/2013/06/installcert-and-java-7.html
但是当我 运行 包装器时,我仍然得到同样的错误。
我不太了解 SSL 证书,但我注意到当我尝试为上面的 url 安装证书时,实际上返回了 2 个证书...仔细查看 java InstallCert.java 中的代码我注意到它只安装(天真地?)第一个证书。
我更改了 InstallCert.java 中的代码(添加了一个 for 循环)和中提琴,安装了证书并且 gradle 和 java 很高兴地握手,每个人都过着幸福的生活之后。
这是我更改的代码
for (int i = 0; i < chain.length; i++) {
final X509Certificate cert = chain[i];
final String alias = host + "-" + (i + 1);
ks.setCertificateEntry(alias, cert);
final OutputStream out = new FileOutputStream(file);
ks.store(out, passphrase);
out.close();
System.out.println();
System.out.println(cert);
System.out.println();
System.out.println(
"Added certificate to keystore 'cacerts' using alias '"
+ alias + "'");
}
它位于调用实际密钥库方法的主函数末尾。
所以如果你对InstallCert.java进行上面的修改,解决方案很简单:
javac InstallCert.java
java InstallCert services.gradle.org
顺便说一下,当我 运行 客户端针对 java 的旧版本(我认为是 1.6)时,导致我调查这条途径的原因是,它吐出以下错误:
java.security.cert.CertPathValidatorException: The certificate issued by ... is not trusted; internal cause is:
java.security.cert.CertPathValidatorException: Certificate chaining error
Downloading https://services.gradle.org/distributions/gradle-2.12-bin.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
与此类似的问题:
除非我只在通过包装器执行时得到这个异常? (已安装的本地 gradle 命令可以正常工作。)我尝试了建议的解决方案,但无法正常工作。我什至在 cacerts
中下载并安装了来自 https://services.gradle.org/distributions/ 的证书 keytool -import -file "C:\tmp\gradlew.x509.base64.cer" -alias gradle -keystore "C:\Apps\java\jre\lib\security\cacerts"
我从包装器得到命令:
java -Dorg.gradle.appname=gradlew -classpath "C:\mystuff\gradle-2.12\samples\java\multiproject\gradle\wrapper\gradle-wrapper.jar" org.gradle.wrapper.GradleWrapperMain clean
我的猜测是证书本身有问题或者我使用了错误的编码?
$ java -version
Picked up _JAVA_OPTIONS: -Xmx512M
java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)
为了使这个复杂化,我尝试使用此处建议的方法从 gradle 安装证书,这似乎有效(根据输出)
http://infposs.blogspot.ca/2013/06/installcert-and-java-7.html
但是当我 运行 包装器时,我仍然得到同样的错误。
我不太了解 SSL 证书,但我注意到当我尝试为上面的 url 安装证书时,实际上返回了 2 个证书...仔细查看 java InstallCert.java 中的代码我注意到它只安装(天真地?)第一个证书。
我更改了 InstallCert.java 中的代码(添加了一个 for 循环)和中提琴,安装了证书并且 gradle 和 java 很高兴地握手,每个人都过着幸福的生活之后。
这是我更改的代码
for (int i = 0; i < chain.length; i++) {
final X509Certificate cert = chain[i];
final String alias = host + "-" + (i + 1);
ks.setCertificateEntry(alias, cert);
final OutputStream out = new FileOutputStream(file);
ks.store(out, passphrase);
out.close();
System.out.println();
System.out.println(cert);
System.out.println();
System.out.println(
"Added certificate to keystore 'cacerts' using alias '"
+ alias + "'");
}
它位于调用实际密钥库方法的主函数末尾。
所以如果你对InstallCert.java进行上面的修改,解决方案很简单:
javac InstallCert.java
java InstallCert services.gradle.org
顺便说一下,当我 运行 客户端针对 java 的旧版本(我认为是 1.6)时,导致我调查这条途径的原因是,它吐出以下错误:
java.security.cert.CertPathValidatorException: The certificate issued by ... is not trusted; internal cause is:
java.security.cert.CertPathValidatorException: Certificate chaining error