【问题标题】:Java & Windows-MY keystore - duplicated aliasesJava 和 Windows-MY 密钥库 - 重复的别名
【发布时间】:2018-03-28 12:03:06
【问题描述】:

我正在 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 Logon”,我需要使用这个。我通过进入调试器并手动破解证书列表确认了这一点。

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

如果外部库可以做到这一点,我可以选择。

更多可能有用的细节:

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

【问题讨论】:

    标签: java authentication ssl encryption keystore


    【解决方案1】:

    此问题已在不久前修复。只需更新到最近的 JRE。更多信息请看这里:https://bugs.java.com/bugdatabase/view_bug.do?bug_id=6483657

    【讨论】:

    • 感谢您的回答。听起来很有希望!复活节后我会检查的!
    猜你喜欢
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    相关资源
    最近更新 更多