2017-09-06 58 views
0
接收服務器證書

我想通過在鏈接使用installCert.javaPKIX錯誤,同時通過InstallCert.java

獲得服務器的SSL證書下面

https://github.com/escline/InstallCert/blob/master/InstallCert.java

我可以得到服務器證書一些服務器,但同時試圖獲得一些服務器證書我得到以下錯誤

javax.net.ssl.SSLHandshakeException: 

sun.security.validator.ValidatorException: PKIX路徑建設失敗: sun.security.provider.certpath.SunCertPathBuilderException:

我搜索,但大家都說你應該輸入你的證書文件到Java cacerts的,但我用這個java類獲取證書文件。

而且我得到的錯誤在socket.startHandshake();

System.out.println("Opening connection to " + host + ":" + port + "..."); 
    SSLSocket socket = (SSLSocket) factory.createSocket(host, port); 
    socket.setSoTimeout(10000); 
    try { 
     System.out.println("Starting SSL handshake..."); 
     socket.startHandshake(); 
     socket.close(); 
     System.out.println(); 
     System.out.println("No errors, certificate is already trusted"); 
    } catch (SSLException e) { 

回答

0

的錯誤意味着你的JVM不信任服務器證書

sun.security.validator.ValidatorException:PKIX路徑建設失敗:太陽.security.provider.certpath.SunCertPathBuilderException

您需要包含手動 JVM的信任庫中的CA根證書,默認情況下爲cacerts文件。 CA根是服務器證書或中間實體的發行者(如果存在的話)

+0

是否有任何方法可以使他信任:)我想通過代碼導出和導入證書 – Cihad

+0

不,您不能。根CA證書不是由SSL服務器發送的(實際上它是可選的,但實際上它不是由大多數服務器發送的)。假設將根CA添加到信任庫的操作必須單獨完成。這是避免自動信任CA的安全措施。請注意,如果你這樣做了,攻擊者可以在第一個連接上發送信任證書 – pedrofb

+0

當然,你可以通過安裝一個信任所有證書的TrustManager來避免這種異常,但不要在真實系統上使用它 – pedrofb