【问题标题】:Open x509 Certificate store from Java APIs从 Java API 打开 x509 证书存储
【发布时间】:2013-01-11 06:24:47
【问题描述】:

我正在尝试在 JSP 中显示来自客户端证书存储的证书列表。 在 .Net 中有一个选项可以使用以下代码显示证书列表...

X509Store xStore = new X509Store(...);
xStore.Open(...); // This will open the list of certicates in open dialog box.

在 Java 中是否有任何类似的功能可以获取此信息?

【问题讨论】:

标签: java x509certificate digital-certificate e-token


【解决方案1】:

您可以使用默认的 JDK 类打开 JKS 存储,打开 pkcs12 文件或类似的文件,您需要像 bouncycastle 这样的库。例如:

KeyStore keystore = KeyStore.getInstance("PKCS12", "BC");

然后加载实际的密钥库:

keystore.load(inputStream, password);

请注意,bouncycastle 或 jdk 对空密码的处理方式不同(一个需要空字符串,另一个需要空 iirc)。拥有密钥库实例后,您可以通过遍历别名并检查类型轻松获取证书:

Enumeration<String> aliases = keystore.aliases();
while (aliases.hasMoreElements()) {
    String alias = aliases.nextElement();
    if (store.entryInstanceOf(alias, KeyStore.TrustedCertificateEntry.class))
        certificates.put(alias, (X509Certificate) store.getCertificate(alias));
}

【讨论】:

  • 感谢您的即时回复...使用上面的代码,我可以获取集合中的证书列表,现在我想显示“选择证书”对话框。 JAVA API 是否会为此提供任何方法,或者我们需要创建任何小程序来显示此类对话框。再次感谢您的即时回复... :)
  • “选择证书对话框”是一个非常模糊的描述。我对 JSP 不是很熟悉,但我认为经典的
  • 好的..我将添加“下拉列表”而不是“对话框”。但是如果我们想从客户端机器获取证书列表,我们需要从客户端机器执行代码的和平......如果我在 servlet 中编写获取证书逻辑,那将只获取服务证书。所以我打算在Applet中实施。有没有办法克服这个....和其他没有小程序的解决方案...谢谢....
  • 这取决于您当前访问客户端证书的方式。用户如何指示要使用哪个商店?它是在固定位置还是用户在文件上传等中选择它?如果是后者,您可以使用 javascript 将其发送到服务器,在那里解析并发送回结果。并非完全最优,但在我看来仍然比小程序 (ymmv) 更好
猜你喜欢
  • 1970-01-01
  • 2011-09-02
  • 2019-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-25
  • 1970-01-01
  • 2020-12-08
相关资源
最近更新 更多