Java & Windows-我的密钥库 - 重复的别名

Java & Windows-MY keystore - duplicated aliases

我正在 Windows 上与 Java 中的 Web 服务器实现相互身份验证。 我在智能卡上有一个证书,应该用来验证我(或其他用户)的身份。

到目前为止,我发现我可以使用 Windows-MY 密钥库访问证书。 我是这样做的:

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

这行得通。我可以在 keystoreSpi 中看到所有证书(在调试器中)。其中之一是我需要使用的 - 我确认了这一点。

问题如下:

KeyStore api 允许我仅通过使用它的别名来获取证书。例如keyStore.getCertificate("alias")keystore.getCertificateChain("alias")

我注意到此密钥库中有多个具有相同别名的不同证书。我无法更改别名。我刚拿到带有给定证书的智能卡。

当我调用上述方法之一时,密钥库 returns 只是列表中具有给定别名的第一个证书。 (通常,在实现中有一个映射,其中别名是它的键,因此所有重复的别名都将被忽略)。

不幸的是,第一个证书的用途是 "email encryption",等等。第二个证书的用途是 "SmartCard Logon",我需要使用这个。我通过进入调试器并手动修改证书列表来确认这一点。

问题是:当存在重复的别名时,如何使用 API(例如第二个)获得正确的证书?

如果这可以通过外部库完成,我可以选择它。

更多可能有用的详细信息:

这已在不久前修复。只需更新到最近的 JRE。有关详细信息,请参阅此处:https://bugs.java.com/bugdatabase/view_bug.do?bug_id=6483657