1

我使用以下代码根据别名从密钥库获取证书,

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

    Enumeration aliasesEnum = keyStore.aliases();

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

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

提前致谢。

4

2 回答 2

1

除了知道别名之外,不可能获得特定的证书。

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

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

于 2016-03-28T16:26:14.283 回答
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 将别名修改为独特的名称(请参阅链接中的代码)。不完全是一个干净的解决方案,但不幸的是唯一的方法。

于 2016-03-28T21:17:42.840 回答