我正在使用下面的代码从密钥库获取基于别名的证书,
KeyStore keyStore = KeyStore.getInstance("Windows-MY");
Enumeration aliasesEnum = keyStore.aliases();
while(aliasesEnum.hasMoreElements())
{
aAliasName = (String)aliasesEnum.nextElement();
X509Certificate certificate = (X509Certificate)keyStore.getCertificate(aAliasName);
}
有没有办法从当前令牌获取别名而不是从密钥库获取别名?。
提前谢谢。
2条答案
按热度按时间bkkx9g8r1#
除了知道别名之外,不可能获得特定的证书。
最佳实践是在您的用例中使用唯一的别名,这样您就可以知道您将获得哪个证书。
如果您是通过keystoreapi存储证书,您可以
containsAlias(alias)
保存前查看别名是否已存在。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将别名修改为唯一的名称(请参见链接中的代码)。不完全是一个干净的解决方案,但不幸的是唯一的办法。