我使用以下代码
从基于别名的密钥库获取证书 KeyStore keyStore = KeyStore.getInstance("Windows-MY");
Enumeration aliasesEnum = keyStore.aliases();
while(aliasesEnum.hasMoreElements())
{
aAliasName = (String)aliasesEnum.nextElement();
X509Certificate certificate = (X509Certificate)keyStore.getCertificate(aAliasName);
}
有没有办法从当前令牌获取别名而不是从密钥库获取?
提前致谢。
答案 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将别名修改为唯一的(请参阅链接中的代码)。不完全是一个干净的解决方案,但不幸的是唯一的方法。