java - keystore 类型 : which one to use?

标签 java security ssl jsse

通过查看我的 JRE 的文件 java.security,我看到默认使用的 keystore 类型设置为 JKS . Here ,有一个可以使用的 keystore 类型的列表。

是否有推荐的 keystore 类型?不同 keystore 类型的优缺点是什么?

最佳答案

除了您链接到的标准名称列表中列出的类型之外,还有一些类型。您可以在 cryptographic providers documentation 中找到更多信息.最常见的肯定是 JKS(默认值)和 PKCS12(对于 PKCS#12 文件,扩展名通常为 .p12 或有时为 .pfx).

如果您留在 Java 世界中,JKS 是最常见的。 PKCS#12 不是特定于 Java 的,使用从浏览器备份或来自基于 OpenSSL 的工具(keytool 无法转换 keystore )的证书(带有私钥)特别方便并在 Java 6 之前导入其私钥,因此您必须使用其他工具)。

如果您已有 PKCS#12 文件,直接使用 PKCS12 类型通常会更容易。可以转换格式,但如果您可以直接选择 keystore 类型,则很少需要。

在 Java 7 中,PKCS12 主要用作 keystore 而不是用作 truststore(参见 difference between a keystore and a truststore),因为您没有私钥无法存储证书条目。相比之下,JKS 不要求每个条目都是私钥条目,因此您可以拥有仅包含证书的条目,这对信任存储很有用,您可以在其中存储您信任的证书列表(但您没有他们的私钥)。

这在 Java 8 中有所改变,因此您现在也可以在 PKCS12 存储中拥有仅证书条目。 (有关这些更改和进一步计划的更多详细信息,请参阅 JEP 229: Create PKCS12 Keystores by Default。)

还有一些其他的 keystore 类型,可能不太常用(取决于上下文),包括:

  • PKCS11,用于 PKCS#11 库,通常用于访问硬件加密 token ,但 Sun 提供程序实现也通过它支持 NSS 存储(来自 Mozilla)。
  • BKS,使用 BouncyCaSTLe 提供程序(通常用于 Android)。
  • Windows-MY/Windows-ROOT,如果您想直接访问 Windows 证书存储。
  • KeychainStore,如果你想直接使用 OSX keychain。

关于java - keystore 类型 : which one to use?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33569201/

相关文章:

java - 关于 docs.oracle 类 LinkedList<E> 的问题

php - $_SERVER ['HTTP_REFERER' ] 安全吗?

java - 如何在 jboss 7.0.0.GA 中启用 ssl

java - 对于在静态哈希表上同步的 java.util.Calendar 构造函数,我们可以做些什么?

java - 与 Spring Security 的 Cors

c# - Visual Studio 2010 添加服务引用无法创建 SSL/TLS 安全通道

javascript - 使用 SSL 和证书通过 Phonegap 连接到 Web 服务器

web-services - 带有 ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED 错误消息的 THttpRio https (Wininet)

java - 从 Aspose.slide java 替换图像时出错

linux - 将 key Material 传递给 openssl 命令