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

2022-08-31 08:22:02

通过查看 my 的文件,我看到缺省情况下要使用的密钥库类型设置为 。此处列出了可以使用的密钥库类型。java.securityJREJKS

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


答案 1

比您链接到的标准名称列表中列出的类型多一些类型。您可以在加密提供程序文档中找到更多信息。最常见的当然是(默认)和(对于PKCS#12文件,通常带有扩展名或有时)。JKSPKCS12.p12.pfx

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

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

在 Java 7 中,它主要用作密钥库,但对于信任库则不太有用(请参阅密钥库和信任库之间的区别),因为如果没有私钥,就无法存储证书条目。相反,不要求每个条目都是私钥条目,因此您可以拥有仅包含证书的条目,这对于信任存储区很有用,您可以在其中存储信任的证书列表(但您没有它们的私钥)。PKCS12JKS

这在 Java 8 中已更改,因此您现在也可以在存储区中拥有仅证书条目。(有关这些更改和更多计划的更多详细信息,请参阅 JEP 229:默认创建 PKCS12 密钥库。PKCS12

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

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

答案 2

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

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

JKS,Java Key Store。您可以在 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 上找到此实现。装入密钥库时,无需创建具有特定配置的特定提供程序。此密钥库可以存储私钥、私有密钥和加密。装入密钥库时,将从密钥库中检索这些条目,然后将其转换为软件条目。