scala sbt和公司代理 - SunCertPathBuilderException

时间:2017-02-01 13:43:24

标签: java scala ssl sbt

当我尝试使用SBT时,某些文件无法下载,并出现以下错误:

  

服务器访问错误:sun.security.validator.ValidatorException:PKIX   路径构建失败:   sun.security.provider.certpath.SunCertPathBuilderException:无法   找到所请求目标的有效证书路径   URL = https://repo1.maven.org/maven2/org/scala-sbt/sbt/1.0.0-M4/sbt-1.0.0-M4.jar

我已经对Stack Overflow提出了一些建议,并使用java keytool导入了公司代理SSL证书,如下所述: SSL certificate problem in a web service proxy

它似乎不会影响SBT工具。它是否在不同的密钥库中查找?有什么想法吗?

如果我将URL粘贴到浏览器上,则会下载该文件。

在运行我安装的SBT工具时出现此错误。当我尝试在IntelliJ Idea上创建一个SBT项目并更新它时,它会给我带来不同URL的相同错误。尝试使用lightbend激活器时也是如此。

6 个答案:

答案 0 :(得分:5)

所以当你在代理后面并且我们需要将代理服务器证书添加到java信任库时会发生这种情况

cp $JAVA_HOME/jre/lib/security/cacerts <some accessible dir>/
# Get the certificate of the proxy server and store it in a file-proxy.pem
keytool -keystore caerts -import -file proxy.pem -alias my_proxy
# Now we can invoke sbt with following config
sbt  "-Djavax.net.ssl.trustStore=/path/to/included/proxycert/cacerts" compile

答案 1 :(得分:3)

如果我没记错的话,SBT间接使用了旧版本的apache commons httpclient(3.1),它默认不遵守指定信任库的java系统属性。

我可以想到三种可能的解决方案:

  1. 使用artifactory之类的代理存储库,以便SBT只需连接到代理,代理就可以通过公司代理向外处理https。

  2. 将公司颁发证书安装到JVM的默认信任库中(通常为%JDK_HOME%/jre/lib/security/cacerts)。每次运行新的JRE时都必须这样做。

  3. 尝试使用coursier。它是SBT的一个插件,它提供了一种不同的方式来获取不通过apache httpclient的依赖项。它使用一个http库,我认为应该尊重truststore的java系统属性。它也快得多。

答案 2 :(得分:1)

这解决了这个问题:

添加-Djavax.net.ssl.trustStore =&#34; C:\ Program Files \ Java \ jre1.8.0_121 \ lib \ security \ cacerts&#34;到sbt配置文件(sbtconfig)。

如果使用IntelliJ Idea,请单击&#34; SBT设置&#34; - &GT; JVM选项 - &gt; VM参数并添加相同的行。

路径是驻留在JDK路径上的cacerts文件的路径 - &gt; lib - &gt;安全。

必须使用密钥库工具导入代理证书,如下所述:SSL certificate problem in a web service proxy

答案 3 :(得分:0)

如果使用过时的Java版本,也会发生此错误。使用Java版本1.8.0_45-b14时出现此错误。更新到Java版本11.0.2 + 7(2018-10-16)为我解决了此问题。

仅供参考,我得到的完整错误消息是:

  

[错误] typesafe-ivy-releases:无法获取com.geirsson#sbt-scalafmt; 1.6.0-RC4的资源:res = {https://repo.typesafe.com/typesafe/ivy-releases/com.geirsson/sbt-scalafmt/1.6.0-RC4/jars/sbt-scalafmt.jar:javax.net.ssl.SSLHandshakeException:sun.security .validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到到请求目标的有效认证路径

切换到较新的Java版本可立即解决该问题。

答案 4 :(得分:0)

在MacOS上,我通过使用sbt运行sudo命令解决了这个问题。

答案 5 :(得分:0)

假设您在 windows 下,当然您可以正确配置:

  1. 下载证书。右键单击 -> 安装证书 -> 本地机器 -> 自动。
  2. 更新C:\Program Files (x86)\sbt\conf\sbtconfig.txt
-Djavax.net.ssl.trustStore=C:\\Windows\\win.ini
-Djavax.net.ssl.trustStoreType=Windows-ROOT

那你用的是IntelliJ,你可以把这些参数加到你sbt项目设置的“VM参数”中。