对不同的 ssl 证书感到困惑

Confused with different ssl certificates

在 ssl 证书方面我是个菜鸟,这几天让我发疯了。

我看到有很多文件格式,例如 .cer、.crt、.pem、.keystore.jks、等

谁能具体告诉我它们是在什么时候以及在什么情况下使用的?

什么是 java 密钥库,什么是密钥库?

不要说jks是在java的上下文中使用的。我还看到 .keystore 文件也被使用。 :)

我知道有些专家会觉得这个问题毫无根据且不合逻辑,但请相信我,新手很难理解所有这些事情。

cer,.crt,.pem,.keystore.jks 是不同类型的编码。例如 "The PEM extension is used for different types of X.509v3 files which contain ASCII (Base64) armored data prefixed with a “—– BEGIN …” line." 你可以在这里看到更多 https://support.ssl.com/Knowledgebase/Article/View/19/0/der-vs-crt-vs-cer-vs-pem-certificates-and-how-to-convert-them

https://helpdesk.ssls.com/hc/en-us/articles/204093372-What-are-certificate-formats-and-what-is-the-difference-between-them-

第二个问题我没看懂。对不起。我看到很多 truestore 和 keystore 之间的比较。希望这会有所帮助。

为了更好地理解什么是密钥库及其不同类型,您需要了解一些非对称密钥对、对称密钥和证书。

非对称密钥对

非对称密钥对是 public 可以共享 public 的密钥和私钥的组合,只有密钥对的所有者知道。这是 Public-key cryptography 的基本构建块。简单来说,如果您使用 public 密钥或私钥加密数据,则可以使用另一个密钥解密数据。

对称密钥(秘密密钥)

这不是一对密钥,它只是一个密钥。如果您使用此密钥加密数据,则需要相同的密钥才能解密。

证书

证书由证书颁发机构 (CA) 颁发给用户。用户可以是个人、服务器、设备和其他几种类型。基本上要从 CA 请求证书,用户首先创建一个密钥对。然后使用密钥对生成 PKCS10(又名 Certificate Signing Request),并将此 CSR 发送给 CA。 CA 然后验证用户的身份,并颁发证书。证书基本上是 - 用户详细信息 + Public 密钥 + 密钥对详细信息。所以,证书基本上就是用户的数字身份。


密钥库

现在,您可能会想,我将所有这些存储在哪里?这就是密钥库的用武之地。密钥库基本上是一个受密码保护的文件,它存储所有这些不同类型的密钥和证书。存储在密钥库中的密钥或证书称为条目。并且像密钥对或秘密密钥这样的条目也可以通过密码来保护。还有几种类型的密钥库。

JKS

Java (< 9) 中的默认密钥库类型称为 Java 密钥库 (JKS)。它可以存储密钥对和证书,但不能存储对称密钥。

JCEKS(Java 增强型密钥存储)

这是可以存储密钥对、证书和对称密钥的密钥库类型。

PKCS#12

这是一种不同类型的密钥库。根据互联网标准,它应该只包含 1 个密钥对条目(尽管它可以容纳更多),并且该密钥对的密码应该与密钥库的密码相同。

TrustStore

是张根硕。但是当在特定上下文中使用时,它被称为信任库,而在其他情况下,它被称为密钥库。您知道密钥库可以保存密钥对和证书,但是当密钥库仅包含证书时,它被称为信任库。当您拥有信任库时,最好不要向其中添加任何密钥对条目。信任库的目的是维护受信任 CA 的所有证书(例如 java 中的 cacerts)。


现在,您问题的答案:

  • 您可以使用 .jks 扩展名和 .keystore 扩展名来命名 jks 文件。最好维护扩展,这样它就可以知道它是什么类型的密钥库。这些扩展不是标准,而是最佳实践
    • JKS - .jks 或 .keystore 或 .truststore
    • PKCS12 - .p12 或 .pkcs12
    • JCEKS - .jceks
    • 证书 - .crt 或 .cer 或 .pem 或 .cert
  • 以某种格式存储在文件中的证书定义了它是什么类型。如果以二进制数据存储,则称其为DER格式。当它存储为 Base64 编码格式并具有 header(BEGIN CERTIFICATE)和页脚(END CERTIFICATE)时,它被称为 PEM 格式。

PS:这些不是技术定义,只是容易理解的陈述。