2017-04-25 55 views
3

在我的Ubuntu(16.04)開發。 ENV。我可以創建一個默認的httpclient,然後發送一個請求給https端點(例如Slack),然後在產品上。 ENV。 (DO與Ubuntu 14.04液滴)我得到這個錯誤:爲什麼httpclient在DO液滴上有不同的行爲(SSL相關)?

sun.security.validator.ValidatorException: PKIX path building failed: 
    sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 

編輯:仍在試圖弄清楚這一點...我想這與Java(Oracle)的安裝DO液滴並不比Ubuntu的相同證書桌面圖像。我添加了Slack證書(在SO上其他地方提到的這個InstallCert工具)到cacerts(並且運行update-ca-certificates)無濟於事。

+0

這通常表示「透明」企業代理。 –

+0

對於解決方案 - 你可以啓用握手調試嗎? -Djavax.net.debug = ssl:handshake 然後你會看到什麼是certficates是受信任的,什麼是真正的接收和使用 – gusto2

+0

仍在掙扎着,我已經更新了我的OP來反映我目前的狀態。 – Rhangaun

回答

3

您的Java cacerts可能缺少geotrust根目錄。

您可以使用keytool查看哪些證書是可信的。 例如,對於Oracle JVM:

keytool -list -keystore /usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts 

查找與正確的簽名即進入:

debian:geotrust_global_ca.pem, 18/05/2015, trustedCertEntry, 
Certificate fingerprint (SHA1): DE:28:F4:A4:FF:E5:B9:2F:A3:C5:03:D1:A3:49:A7:F9:96:2A:82:12 

如果不相信你可以安裝它,從這裏下載:
https://www.geotrust.com/resources/root_certificates/certificates/GeoTrust_Global_CA.pem

安裝它
keytool -import -trustcacerts -file GeoTrust_Global_CA.pem -alias GeoTrust_Global_CA -keystore $JAVA_HOME/jre/lib/security/cacerts 
+0

結果:'證書已經存在於別名下的密鑰倉庫中' – Rhangaun

+0

我想你的環境中的某些東西會覆蓋'javax.net.ssl.trustStore'位置。 – Magnus

+0

任何想法可以做什麼? – Rhangaun

相關問題