通过查看java.securitymy 的文件JRE,我发现默认使用的密钥库类型设置为JKS。在这里,列出了可以使用的密钥库类型。
java.security
JRE
JKS
有推荐的密钥库类型吗?不同密钥库类型的优缺点是什么?
除了链接到的标准名称列表中列出的类型以外,还有更多类型。您可以在加密提供程序文档中找到更多信息。最常见的肯定是JKS(默认)和PKCS12(对于PKCS#12文件,通常带有扩展名.p12,有时带有.pfx)。
PKCS12
.p12
.pfx
如果您停留在Java世界中,那么JKS是最常见的。PKCS#12不是特定于Java的,使用从浏览器备份或来自基于OpenSSL的工具备份的证书(带有私钥)特别方便(keytool在Java 6之前无法转换密钥库并导入其私钥) ,因此您必须使用其他工具)。
keytool
如果您已经有PKCS#12文件,则PKCS12直接使用该类型通常会更容易。可以转换格式,但是如果直接选择密钥库类型,则几乎没有必要。
在Java 7中,PKCS12它主要用作 密钥库, 但对 信任 库 用处不大(请参阅密钥库和truststore之间的区别(http://codingdict.com/questions/105824),因为没有私有密钥就无法存储证书条目。相反,JKS并不需要每个条目都是私钥条目,因此您可以拥有仅包含证书的条目,这对于信任存储很有用,在信任存储中您存储了信任的证书列表(但是您没有他们的私钥)。
这在Java 8中已更改,因此您现在也可以在PKCS12商店中拥有仅证书条目。(有关这些更改和更多计划的更多详细信息,请参见JEP 229:默认情况下创建PKCS12密钥库。)
还有其他一些密钥库类型,可能不太常用(取决于上下文),包括:
PKCS11
BKS
Windows-MY
Windows-ROOT
KeychainStore