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

gt0wga4j  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(359)

我正在使用下面的代码从密钥库获取基于别名的证书,

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

    Enumeration aliasesEnum = keyStore.aliases();

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

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

bkkx9g8r

bkkx9g8r1#

除了知道别名之外,不可能获得特定的证书。
最佳实践是在您的用例中使用唯一的别名,这样您就可以知道您将获得哪个证书。
如果您是通过keystoreapi存储证书,您可以 containsAlias(alias) 保存前查看别名是否已存在。

vulvrdjw

vulvrdjw2#

通常别名是唯一的。这是mscapi密钥库特有的问题。关于这个问题,有几个bug报告(其中一些非常旧):
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将别名修改为唯一的名称(请参见链接中的代码)。不完全是一个干净的解决方案,但不幸的是唯一的办法。

相关问题