Scala sbt和公司代理- SunCertPathBuilderException(证书路径生成器异常)

rta7y2nd  于 2022-12-13  发布在  Scala
关注(0)|答案(8)|浏览(195)

当我尝试使用SBT时,无法下载某些文件,并出现以下错误:
服务器访问错误:sun.security.validator.ValidatorException:PKIX路径构建失败:安全提供程序证书路径生成器异常:无法找到请求的目标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激活器时,同样的事情。

uqdfh47h

uqdfh47h1#

因此,当您使用代理时,我们需要将代理服务器证书添加到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 cacerts -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
p5cysglq

p5cysglq2#

如果我没记错的话,SBT间接使用了一个旧版本的apache commons httpclient(3.1),默认情况下,它不考虑用于指定信任库的java系统属性。
我可以想到三种可能的解决方案:
1.使用artifactory之类的代理存储库,这样SBT只需连接到代理,代理就可以通过公司代理处理https。
1.将公司颁发的证书安装到JVM的默认信任库中(通常为%JDK_HOME%/jre/lib/security/cacerts)。每次运行新JRE时都必须执行此操作。
1.尝试使用coursier。它是SBT的一个插件,它提供了一种不同的方式来获取依赖项,而不是通过apache httpclient。它使用了一个http库,我认为它应该尊重信任库的java系统属性。它也快得多。

eqoofvh9

eqoofvh93#

这样就解决了问题:
将-Djavax .NET.ssl.trustStore=“C:\程序文件\Java\jre1.8.0_121\lib\security\cacerts”添加到sbt配置文件(sbtconfig)中。
如果使用IntelliJ Idea,请单击“SBT设置”-〉JVM选项-〉VM参数并添加同一行。
路径是cacerts文件的路径,该文件位于JDK路径-〉lib -〉security中。
必须使用密钥库工具导入代理证书,如中所述:SSL certificate problem in a web service proxy

ldioqlga

ldioqlga4#

假设您在windows下,当然配置正确,您可以改为:
1.下载证书。右键单击-〉安装证书-〉本地计算机-〉自动。
1.更新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参数”中。

cygmwpex

cygmwpex5#

如果您使用的是过时的Java版本,也可能会出现此错误。我使用Java版本1.8.0_45-b14时遇到此错误。更新到Java版本11.0.2+7(2018-10-16)后,我解决了此问题。
仅供参考,我得到的完整错误消息是:
[错误] typesafe-ivy-版本:无法获取com资源。geirsson#sbt-scalafmt; 1.6.0-RC 4:分辨率= 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路径构建失败:安全提供程序证书路径生成器异常:找不到所请求目标的有效证书路径
切换到较新的Java版本立即解决了这个问题。

gtlvzcf8

gtlvzcf86#

在我的例子中,它是SBT_OPTS环境变量的错误内容

dfddblmv

dfddblmv7#

第一步:下载失败的URL的证书。子步骤1.1 -复制URL并粘贴到浏览器中。1.2 -在浏览器的地址栏旁边有一个锁符号,点击它。1.3 -点击“连接确定”1.4 -点击“证书有效”1.5 -点击选项卡中的详细信息1.6 -以Base64格式导出证书
第二步-
后藤以下位置(根据您自己的JDK版本进行更改):

cd /Library/Java/JavaVirtualMachines/jdk-17.0.5.jdk/Contents/Home/lib/security/

第三步-
使cacerts可写

sudo chmod -R 777 /Library/Java/JavaVirtualMachines/jdk-17.0.5.jdk/Contents/Home/lib/security/cacerts

第四步-
使用以下命令安装证书

keytool -importcert -file /Users/IN45599512/Downloads/_.jfrog.io.cer  -trustcacerts -keystore "/Library/Java/JavaVirtualMachines/jdk-17.0.5.jdk/Contents/Home/lib/security/cacerts"

keytool -importcert -file /Users/IN45599512/Downloads/ repo1.maven.org.cer  -trustcacerts -keystore "/Library/Java/JavaVirtualMachines/jdk-17.0.5.jdk/Contents/Home/lib/security/cacerts"

如果提示输入密码,请使用“changeit”
最后一步:再次更改cacerts的权限

sudo chmod -R 644 /Library/Java/JavaVirtualMachines/jdk-17.0.5.jdk/Contents/Home/lib/security/cacerts
rdrgkggo

rdrgkggo8#

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

相关问题