2013-08-02 32 views
0

我想知道是否有任何方法檢查默認密鑰庫如果必要的話在指定密鑰庫中找不到密鑰或如何設置密鑰庫檢查順序。Java多密鑰庫檢查順序

例如 - 我有兩個密鑰庫:

  • 全球Java默認密鑰庫(如cacerts的),其中包含我上傳的自簽名證書
  • 「Folder1中/ mykestore.jks」。

我在程序中設置屬性:

System.setProperty("javax.net.ssl.keyStore","Folder1/mykeystore.jks"); 

和方案,試圖從mykeystore.jks連接證書,但沒有發現它,所以拋出異常。現在我想強制我的程序檢查全局默認密鑰庫或任何其他密鑰庫(如果存在)。

我需要在我的應用程序中執行此操作,其中用戶可以定義某些郵箱並可以上載自簽名證書。應用程序適用於自簽名證書,但不適用於帶有官方證書的公用郵箱(如GMail),因爲它們在mykestore.jks中不存在。 (當我嘗試連接,而不指定的keyStore屬性,它連接沒有任何問題)

也許最簡單的方法是這樣的:

try{ 
    System.setProperty("javax.net.ssl.keyStore","Folder1/mykeystore.jks"); 
    store.connect(host,login,password) 
catch{ 
    //Set default keystore 
    //try store.connect() again 
} 

,但問題是我不知道如何設置默認的Java密鑰庫(它是一個gralils應用程序,我不知道默認密鑰庫的路徑)。

也許有另一種更好的方法,你可以推薦我嗎?

問候, 阿圖爾

+0

爲了澄清這個問題,你是在談論一個* keystore *還是一個* truststore *? (請參閱區別[here](http://stackoverflow.com/a/6341566/372643)。)您明顯嘗試將密鑰庫文件用作* keystore *('javax.net.ssl.keyStore'),然而,你所描述的聽起來更像是你試圖用它作爲信任存儲。另外,JRE中沒有默認的密鑰庫(只有默認的信任庫)。 – Bruno

回答

1

最簡單的事情是隻進行從JDK的默認密鑰庫的副本,並用其作爲初始密鑰庫爲您的應用程序,必要時增加更多的證書給它。