2016-03-07 40 views
0

我不認爲這是像this one這樣的問題的重複,因爲證書被java識別。自簽名根CA不適用於Java

出於測試的宗旨,我已經生成自己的根CA和這樣的證書:

自己的根CA - >中間CA - >我的證書

我創建了一個密鑰庫與它我成功地在我的java-server中使用該密鑰庫來提供加密內容(在Eclipse應用程序中使用Jetty)。我可以在Firefox中使用SSL來調用我的rest-api(在添加中間CA之後)就好了,一切正常。

但是,我不能從另一個Java應用程序(使用javax.ws.rs)調用Rest-API,因爲證書鏈似乎是錯誤的。

javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路徑建設失敗:sun.security.provider.certpath.SunCertPathBuilderException:無法找到請求的目標的有效證書路徑

如果我檢查異常詳細信息,我可以看到,SunCertPathBuilderException包含我的客戶端證書和中間CA證書,但不包含Root-CA證書(在字段adjList中)。

爲什麼應用程序找不到Root-CA?我猜這就是這個問題,但密鑰庫中的Root-CA ,我使用的是服務器的相同密鑰庫,所以我知道它應該是正確的。

回答

1

客戶需要指定的trustStore不是的keyStore,例如:

Path trustStorePath = ...; 
    System.setProperty("javax.net.ssl.trustStore", trustStorePath.toString()); 
    System.setProperty("javax.net.ssl.trustStorePassword", "<some password>"); 

您可以使用下面的系統屬性,以獲取有關您的SSL配置的詳細信息:

System.setProperty("javax.net.debug", "ssl"); 
+0

謝謝。最後,這不是真正的問題(Eclipse忽略了野蠻設置),但我覺得你的回答是絕對正確的。 (事實上​​它幫助我,因爲我注意到調試輸出丟失了) – looper

相關問題