scala sbt和公司代理 - SunCertPathBuilderException

Thi*_*yão 8 java ssl scala sbt

当我尝试使用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激活器时也是如此.

谢谢.

use*_*330 8

因此,当您在代理后面并且我们需要将代理服务器证书添加到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
Run Code Online (Sandbox Code Playgroud)


Bri*_*ith 5

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

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

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

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

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