2016-03-28 35 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