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



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

到目前为止,我已经发现我可以使用Windows-My键存储访问证书。我这样做:

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

这有效。我可以在KeyStorespi(在调试器中(中看到所有证书。其中之一是我需要使用的一个 - 我确认。

问题如下:

密钥库API允许我仅通过使用它的别名获得证书。例如keyStore.getCertificate("alias")keystore.getCertificateChain("alias")

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

当我调用上述方法之一时,密钥库仅返回列表中的第一个证书,并带有给定的别名。(通常,在实施中,有一个地图,在该地图上是键,因此所有重复的别名均被忽略(。

不幸的是,第一证书的目的是"电子邮件加密"等。第二证书的目的是" SmartCard登录",我需要使用该证书。我确认,通过进入调试器并手动入侵证书列表。

问题是:当有重复的别名时,如何使用API获得适当的证书(例如第二个(?

如果可以由外部库来完成,我可以选择。

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

  • 我使用密钥库,然后创建keystoreManager。
  • 我用给定的keystoreManager sslContext.init(keyManagerFactory.getKeyManagers(), ...)
  • 初始化sslcontext
  • 我用给定的SSL上下文创建HttpSurlConnection,这是我的目标。

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

最新更新