java 密钥库口令 密钥库类型:使用哪一个?




密钥库口令 (2)

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

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

https://code.i-harness.com


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

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

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

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

PKCS12,这是一种标准的密钥库类型,可以在Java和其他语言中使用。 您可以在sun.security.pkcs12.PKCS12KeyStore上找到此密钥库实现。 它通常具有p12或pfx的扩展名。 您可以将私人密钥,密钥和证书存储在此类型中。

PKCS11,这是一个硬件密钥库类型。 它为Java库提供接口,以便与Luna,nCipher等硬件密钥存储设备连接。 你可以在sun.security.pkcs11.P11KeyStore上找到这个实现。 加载密钥库时,您无需创建具有特定配置的特定提供程序。 该密钥库可以存储私钥,密钥和证书。 加载密钥库时,将从密钥库中检索条目,然后将其转换为软件条目。


还有几种类型比您链接到的标准名称列表中列出的类型更多。 您可以在加密提供者文档中找到更多信息 。 最常见的是JKS (默认)和PKCS12 (对于PKCS#12文件,通常扩展名为.p12或有时为.pfx )。

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

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

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

这在Java 8中已经发生了变化,因此您现在可以在PKCS12商店中拥有仅限证书的条目。 (有关这些更改和更多计划的更多详细信息,请参见openjdk.java.net/jeps/229 。)

还有其他一些keystore类型,可能使用较少(取决于上下文),其中包括:

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






jsse