gpt4 book ai didi

Java keystore 在不使用别名的情况下迭代 Windows-MY

转载 作者:行者123 更新时间:2023-12-01 22:18:09 25 4
gpt4 key购买 nike

是否有任何方法可以在不使用别名枚举的情况下迭代 Windows-MY keystore 。我遇到的问题是,我有一张智能卡,上面有两个具有相同别名的证书,因此当我尝试加载第二个证书时,我会再次获得第一个证书。目前我像这样迭代证书:

try {
KeyStore oks = KeyStore.getInstance("Windows-MY", MSProvider);
oks.load(null, null);
for (Enumeration l = oks.aliases(); l.hasMoreElements();) {
certCount++;
String al = (String) l.nextElement();
Certificate cert = oks.getCertificate(al);//<<returns the same cert twice
//do stuff
}

非常感谢您的帮助。

好吧,事实证明这是 Java Microsoft CryptoAPI KeyStore 实现中的一个已知错误,其中友好名称仅用作别名 - 请参阅 here .

该链接还包含我在下面添加的解决方案,以防链接失效

最佳答案

我在上面的问题中找到的解决方案来自 here .

它涉及使用反射来创建唯一的别名。

private static void _fixAliases(KeyStore keyStore) {
Field field;
KeyStoreSpi keyStoreVeritable;

try {
field = keyStore.getClass().getDeclaredField("keyStoreSpi");
field.setAccessible(true);
keyStoreVeritable = (KeyStoreSpi)field.get(keyStore);

if("sun.security.mscapi.KeyStore$MY".equals(keyStoreVeritable.getClass().getName())) {
Collection entries;
String alias, hashCode;
X509Certificate[] certificates;

field = keyStoreVeritable.getClass().getEnclosingClass().getDeclaredField("entries");
field.setAccessible(true);
entries = (Collection)field.get(keyStoreVeritable);

for(Object entry : entries) {
field = entry.getClass().getDeclaredField("certChain");
field.setAccessible(true);
certificates = (X509Certificate[])field.get(entry);

hashCode = Integer.toString(certificates[0].hashCode());

field = entry.getClass().getDeclaredField("alias");
field.setAccessible(true);
alias = (String)field.get(entry);

if(!alias.equals(hashCode)) {
field.set(entry, alias.concat(" - ").concat(hashCode));
} // if
} // for
} // if
} catch(Exception exception) {
System.err.println(exception);
exception.printStackTrace();
} // catch
} // _fixAliases

关于Java keystore 在不使用别名的情况下迭代 Windows-MY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30577428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com