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

时间:2018-03-28 12:03:06

标签: java authentication ssl encryption keystore

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

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

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

这很有效。我可以在keystoreSpi中看到所有证书(在调试器中)。其中一个是我需要使用的 - 我证实了这一点。

问题如下:

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

我注意到此密钥库中有多个具有相同别名的不同证书。我无法更改别名。我只是在物理上得到了带有证书的智能卡。

当我调用上述方法之一时,keystore只返回列表中第一个带有别名的证书。 (通常,在实现中有一个映射,其中别名是它的键,因此忽略所有重复的别名)。

不幸的是,第一个证书的目的是“电子邮件加密”等。第二个证书的目的是“SmartCard登录”,我需要使用它。我确认通过进入调试器并手动黑客攻击证书列表。

问题是:如果有重复的别名,我如何使用API​​(例如第二个)获得正确的证书?

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

更多可能有用的细节:

  • 我使用KeyStore,然后创建KeyStoreManager。
  • 我使用给定的keyStoreManager sslContext.init(keyManagerFactory.getKeyManagers(), ...)
  • 初始化SSLContext
  • 我使用给定的ssl上下文创建HttpsUrlConnection,这是我的目标。

1 个答案:

答案 0 :(得分:1)

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