通过查看我的 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/36783062/