从密钥库获取证书而不是基于java中的别名

时间:2016-03-28 04:59:03

标签: java digital-signature x509certificate keystore mscapi

我使用以下代码

从基于别名的密钥库获取证书
    KeyStore keyStore = KeyStore.getInstance("Windows-MY");

    Enumeration aliasesEnum = keyStore.aliases();

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

有没有办法从当前令牌获取别名而不是从密钥库获取?

提前致谢。

2 个答案:

答案 0 :(得分:1)

除了知道别名之外,无法获得特定证书。

最佳做法是在您的用例中使用唯一的别名,这样您就可以知道要获得哪个证书。

如果您通过KeyStore api存储证书,则可以在保存之前执行containsAlias(alias)以查看别名是否已存在。

答案 1 :(得分: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将别名修改为唯一的(请参阅链接中的代码)。不完全是一个干净的解决方案,但不幸的是唯一的方法。