scala sbt和公司代理 – SunCertPathBuilderException

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

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

我已经遵循了stackoverflow的一些建议,并使用java keytool导入了公司代理SSL证书,如下所述: Web服务代理中的SSL证书问题

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

如果我在浏览器上粘贴URL,则下载文件。

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

谢谢。

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

cp $JAVA_HOME/jre/lib/security/cacerts / # 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 

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

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

  1. 使用类似神器的代理存储库,因此SBT只能连接到代理,代理可以通过公司代理向外处理https。

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

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

这解决了这个问题:

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

如果使用IntelliJ Idea,请单击“SBT设置” – > JVM选项 – > VM参数并添加相同的行。

该路径是位于JDK路径上的cacerts文件的路径 – > lib – > security。

必须使用密钥库工具导入代理证书,如下所述: Web服务代理中的SSL证书问题