2016-03-28 78 views
1

我正在使用下面的代碼基於別名的密鑰庫證書,獲得來自密鑰庫證書不是基於別名在java中

KeyStore keyStore = KeyStore.getInstance("Windows-MY"); 

    Enumeration aliasesEnum = keyStore.aliases(); 

    while(aliasesEnum.hasMoreElements()) 
    { 
     aAliasName = (String)aliasesEnum.nextElement(); 
     X509Certificate certificate = (X509Certificate)keyStore.getCertificate(aAliasName); 
    } 

有沒有什麼辦法讓從當前令牌,而不是別名從keystore獲取?

在此先感謝。

+0

如果您現在還有其他問題,請創建一個新問題。在回答問題後改變你的問題是一種不好的做法,因爲那時答案不再符合問題。 – Omikron

+0

@Vijaya,正如Omikron指出的那樣,請回復你的問題,併爲你的新問題開一個新的問題。所以下面的答案將與這個問題相匹配,未來訪問這個問題的人知道什麼可以解決他們的問題。你可以接受解決你的問題的答案,從而結束這個問題。 –

回答

1

除了知道別名之外,不可能獲得特定的證書。

最好的做法是在你的用例中有唯一的別名,這樣你就會知道你得到了哪個證書。

如果通過KeyStore API存儲證書,則可以在保存之前執行containsAlias(alias)以查看別名是否已存在。

+0

感謝您的回覆。我通過以下鏈接https://joinup.ec.europa.eu/software/sd-dss/issue/problem-possible-keystore-aliases-collision-when-using-mscapi解決了問題。 – Vijaya

+0

現在我有另一個問題,你可以請檢查更新的問題。 – Vijaya

0

通常別名是唯一的。這是特定於MSCAPI密鑰庫的問題。有關於這個問題的幾個錯誤報告(其中一些很老的):

http://bugs.java.com/bugdatabase/view_bug.do?bug_id=2162058

http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6483657

http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8058544

http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6672015

按照最後一個環節,它包含了一個解決方法。您基本上必須通過反射API將別名修改爲獨特的內容(請參閱鏈接中的代碼)。不完全是一個乾淨的解決方案,但不幸的是唯一的方法

+0

感謝您的回覆。我通過以下鏈接https://joinup.ec.europa.eu/software/sd-dss/issue/problem-possible-keystore-aliases-collision-when-using-mscapi解決了問題。 – Vijaya

+0

我認爲這與您提供的最後一個鏈接相同。 – Vijaya

+0

現在我有另一個問題,你可以請檢查更新的問題。 – Vijaya