2017-02-01 117 views
1

當我嘗試使用SBT某些文件無法與以下錯誤下載:斯卡拉SBT和企業代理 - SunCertPathBuilderException

服務器訪問錯誤: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

我按照計算器上的一些建議和進口與Java keytool的企業代理SSL證書中所描述: SSL certificate problem in a web service proxy

它似乎不影響SBT工具。它看起來在不同的密鑰庫中嗎?有任何想法嗎?

如果我將該URL粘貼到瀏覽器上的文件下載。

當我簡單地運行我已經安裝的SBT工具時,出現這個錯誤。當我嘗試在IntelliJ Idea上創建一個SBT項目並對其進行更新時,它給了我與不同URL相同的錯誤。嘗試使用lightbend激活器時也是如此。

謝謝。

回答

0

如果我沒有記錯,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的依賴關係。它使用一個我認爲應該尊重信任庫的java系統屬性的http庫。它也快得多。

+0

謝謝,它導致我找到解決方案:) –

0

這解決了這個問題:

添加-Djavax.net.ssl.trustStore = 「C:\ Program Files文件\的Java \ jre1.8.0_121 \ lib \ security中\ cacerts的」 到SBT配置文件(sbtconfig)。

如果使用IntelliJ Idea,請單擊「SBT設置」 - >「JVM選項」 - >「VM參數」並添加相同的行。

該路徑是駐留在JDK路徑 - > lib - > security上的cacerts文件的路徑。

有必要與密鑰庫工具導入代理證書,如描述:SSL certificate problem in a web service proxy

1

所以出現這種情況,當你使用了代理,我們需要代理服務器證書被添加到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