访问 Java 中的密钥库证书

Accessing keystore certificates in Java

我正在开发一个 Java 小程序,用于在网络浏览器中播放 PDF 文档。该小程序需要能够与 Windows 和 Mac OS 一起工作。该小程序将显示用户计算机上已安装证书的列表,并让用户 select 其中之一进行签名。

我找到了如何使用 "Windows-MY" 标识符从 Windows 密钥库读取证书的示例,但我找不到 any 使用证书的示例Java 对于 Mac OS。如何从 Mac 上的密钥库中读取证书列表?

我是 Java 编程的新手(主要是 .NET 网络开发人员),也许我错过了一些东西。感谢您的帮助。

此处记录:Java Cryptography Architecture Oracle Providers Documentation for JDK 8

您应该阅读整个页面,但与您的问题相关的部分在底部:

The Apple provider implements a java.security.KeyStore that provides access to the Mac OS X Keychain. The following algorithms are available in the Apple provider:

Engine: KeyStore
Algorithm Name(s): KeychainStore

因此,换句话说:您通过使用名称“KeychainStore”获得 Mac OS X 钥匙串的 KeyStore 对象:

KeyStore ks = KeyStore.getInstance("KeychainStore");

之后,它与所有其他密钥库类型基本相同。例如列出所有证书及其别名:

ks.load(null, null);
Enumeration<String> en = ks.aliases();
while (en.hasMoreElements()) {
    String aliasKey = en.nextElement();
    X509Certificate c = (X509Certificate) ks.getCertificate(aliasKey);
    System.out.println("alias: " + aliasKey);
    System.out.println("cert:" + c.getSubjectX500Principal().toString());
}

顺便说一句,浏览器供应商和 Oracle 正在逐步淘汰 applet 的浏览器插件。 Java Web Start 可能是替代方案。