密钥库types:使用哪一个?

通过查看我的JRE文件java.security ,我发现默认使用的密钥库types被设置为JKS 。 这里有一个可以使用的密钥库types列表。

有推荐的密钥库types吗? 什么是不同的密钥库types的优点/缺点?

还有一些types比您链接到的标准名称列表中列出的更多。 您可以在encryption提供程序文档中find更多信息 。 最常见的是JKS (默认)和PKCS12 (对于PKCS#12文件,通常扩展名为.p12或有时为.pfx )。

JKS是最常见的,如果你留在Java世界。 PKCS#12不是特定于Java的,使用从浏览器备份的证书(使用私钥)或基于OpenSSL的工具( keytool无法在Java之前转换密钥库并导入私钥6,所以你不得不使用其他工具)。

如果您已经有PKCS#12文件,则直接使用PKCS12types通常会更容易。 可以转换格式,但是如果您可以直接select密钥库types,则很less有必要。

在Java 7中, PKCS12主要用作密钥库,但对于信任 (请参阅密钥库和信任库之间的区别)较less,因为不能在没有私钥的情况下存储证书条目。 相比之下, JKS并不要求每个条目都是私钥条目,因此您可以使用只包含证书的条目,这对于信任存储非常有用,您可以在其中存储您信任的证书列表(但您没有他们的私钥)。

这在Java 8中已经发生了变化,因此您现在可以在PKCS12存储中拥有仅限证书的条目。 (有关这些更改和更多计划的更多详细信息,请参见JEP 229:默认情况下创buildPKCS12密钥库 。

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

  • PKCS11 ,用于PKCS#11库,通常用于访问硬件encryption令牌,但Sun提供者实现也通过此支持NSS存储(来自Mozilla)。
  • BKS ,使用BouncyCastle提供程序(通常用于Android)。
  • Windows-MY / Windows-ROOT ,如果你想直接访问Windows证书存储。
  • KeychainStore ,如果你想直接使用OSX钥匙串。

下面是一篇文章,介绍Java中不同types的密钥库以及不同types密钥库之间的差异。 http://www.pixelstech.net/article/1408345768-Different-types-of-keystore-in-Java—-Overview

以下是post中不同密钥库的描述:

JKS,Java密钥库。 你可以在sun.security.provider.JavaKeyStorefind这个文件。 这个密钥库是特定于Java的,它通常具有jks的扩展。 这种types的密钥库可以包含私钥和证书,但不能用来存储密钥。 由于它是一个Java特定的密钥库,因此它不能用于其他编程语言。

JCEKS,JCE密钥存储。 你可以在com.sun.crypto.provider.JceKeyStorefind这个文件。 这个密钥库有一个jceks的扩展。 可以放在JCEKS密钥库中的条目是私钥,秘密密钥和证书。

PKCS12,这是一个标准的密钥库types,可以在Java和其他语言中使用。 你可以在sun.security.pkcs12.PKCS12KeyStorefind这个keystore实现。 它通常具有p12或pfx的扩展名。 您可以存储这种types的私钥,私钥和证书。

PKCS11,这是一个硬件密钥库types。 它为Java库提供一个接口,用于连接硬件密钥存储设备,如Luna,nCipher。 你可以在sun.security.pkcs11.P11KeyStorefind这个实现。 加载密钥库时,不需要创build具有特定configuration的特定提供程序。 这个密钥库可以存储私钥,密钥和证书。 加载密钥库时,将从密钥库中检索条目,然后转换为软件条目。