pem、crt、key文件之间的区别

118

我在理解由openssl生成的文件之间的区别以及如何检测它们方面遇到了问题。

例如,我正在尝试使用私钥生成自签名证书并从p12格式生成JKS文件。我像疯子一样谷歌搜索,但我仍然不知道如何正确生成它以便能够使用以下命令。

openssl pkcs12 -export -in user.pem -inkey user.key -certfile user.pem -out testkeystore.p12
keytool -importkeystore -srckeystore testkeystore.p12 -srcstoretype pkcs12 -destkeystore wso2carbon.jks -deststoretype JKS

来源:https://www.ibm.com/support/pages/how-generate-jks-keystore-existing-private-key

我找到了几个不同的命令来生成自签名证书和私钥,但我不知道如何将生成的文件映射到上面的命令,更糟糕的是我不理解那些命令的作用。 我的意思是,我看到它们生成的文件和理解用于签署它的证书和私钥(或者可能是相反的 :| ),但这些命令之间有什么区别,cert.pem === certificate.crt - 这些文件扩展名让我发疯。

openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt
openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem

这是另一种情况,我遇到了与openssl命令类似的问题。此时,我甚至准备阅读一些RFC(希望不用这么做:))

提前感谢您的帮助。


1
信息提示:最初Java默认需要JKS格式的密钥库,因此有许多网站手册和其他文档提供类似于上面IBM链接的建议,以及许多旧版本的As和其他栈。自2015年8u60版本以来,Java可以使用PKCS12文件和JKS一样,并且不再需要转换步骤。 - dave_thompson_085
3个回答

165

这些文件名代表密钥生成和验证过程的不同部分。请注意,名称只是惯例,你可以随意将文件命名为 pepperoni.pizza ,其内容将是相同的,因此要注意如何使用文件名。

PKI简介-密钥分为两个部分:公钥和私钥。公钥可被广泛公开分发,并用于验证信息,但无法复制使用私钥生成的信息。私钥必须保密。

.key文件通常是私钥,由服务器用于加密和打包数据以便客户端验证。

.pem文件通常是公钥,由客户端用于验证和解密服务器发送的数据。PEM文件也可以是编码的私钥,因此如果不确定,请检查内容。

.p12文件嵌入了密钥的两个部分,以便管理员可以轻松地管理密钥的两个部分。

.cert.crt文件是签名证书——基本上是让某些网站由第三方标记为可信的“魔法”。

.csr是证书签名请求,这是一个由受信任第三方提出的挑战,用于验证密钥对的所有权,而不直接访问私钥(这使得没有直接了解您网站的终端用户能够自信地确认证书有效)。在自签名场景中,您将使用带有自己私钥的证书签名请求来验证自己的私钥(因此是自签名的)。根据您的具体应用程序,可能并不需要这样做(对于Web服务器或RPC服务器是必需的,但其他情况下则不一定)。

JKS密钥库是Java的本机文件格式,用于存储和管理上述某些或所有组件,并保持相关能力的数据库,以便为每个密钥允许或拒绝特定操作。

我认为您列出的命令看起来很好,我也没有看到问题,除了询问不同文件的用途。如果您需要更多信息,请详细阐述您的问题。


2
是的,PEM格式,但通常情况下,标有“PRIVATE KEY”的私钥文件会被命名为.key - PaulProgrammer
27
根据这个答案.crt保存了已签名的证书,而.csr则是证书签名请求。另外,.pem仅表示内容(可以是密钥、证书等)已经进行了Base64编码。 - Wolfson
“.key文件通常是私钥,由服务器用于加密。”但是加密通常是由公钥完成的,解密则由私钥完成。你在这里说的完全相反。 - Mugen
@Mugen PKI在这方面很奇怪。服务器使用私钥加密到公钥以进行验证。客户端使用公钥将数据加密到服务器以保护隐私。 - PaulProgrammer
点赞!愚蠢的问题,为什么certstrap不生成pem文件?https://github.com/square/certstrap - PirateApp
显示剩余2条评论

79
.key私钥,只能被密钥所有者访问,其他人无法访问。.csr证书请求,请求证书颁发机构为密钥签名(但不包括密钥本身)。.crt 是由证书颁发机构产生的证书,用于验证密钥的真实性(但不包括密钥本身),并提供给其他方使用,例如HTTPS客户端。.pem是使用基于base-64编码的文本容器,可以是上述任何文件。
-----BEGIN EXAMPLE-----
...
-----END EXAMPLE-----

.p12 是一个 PKCS12 文件,通常用于组合私钥和证书的容器格式。


不只有一个扩展名。比如你可能会看到具有 .crt.pem 扩展名的证书。


4
只是为了增加更多信息:.der 是另一种(二进制)编码方式,可以用于公钥、私钥或证书签名请求(CSR)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接