pem、crt、key文件的区别

seb*_*n_t 12 ssl openssl certificate jks pkcs#12

我在理解 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
Run Code Online (Sandbox Code Playgroud)

来源: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
Run Code Online (Sandbox Code Playgroud)

这是我在使用 openssl 命令时遇到类似问题的另一种情况。在这一点上,我什至准备阅读一些 RFC(我希望它不会出现这种情况:))

预先感谢您的帮助

Pau*_*per 88

.key是私钥。密钥所有者只能访问此信息,其他人无法访问。

.csr是证书请求。这是要求证书颁发机构签署密钥的请求。(不包括钥匙本身。)

.crt是由证书颁发机构生成的证书,用于验证密钥的真实性。(不包括密钥本身。)该密钥被提供给其他方,例如 HTTPS 客户端。

.pem是使用 base-64 编码的基于文本的容器。它可以是上述任何文件。

-----BEGIN EXAMPLE-----
...
-----END EXAMPLE-----
Run Code Online (Sandbox Code Playgroud)

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


不只有一个扩展。例如,您可能会看到带有.crt或.pem扩展名的证书。


Pau*_*mer 16

这些文件名代表密钥生成和验证过程的不同部分。请注意,名称只是约定俗成,您可以轻松调用文件pepperoni.pizza并且内容将相同,因此请注意您如何使用文件名。

PKI 简介 - 密钥分为两半,一个公钥和一个私钥。公钥可以公开和广泛地分发,您可以使用它来验证但不能复制使用私钥生成的信息。私钥必须保密。

.key 文件一般是私钥,服务器用来加密和打包数据供客户端验证。

.pem 文件通常是公钥,客户端使用它来验证和解密服务器发送的数据。

.p12 文件都嵌入了密钥的两半,以便管理员可以轻松管理密钥的两半。

.cert或.crt文件是证书签名请求,由受信任的第三方用于验证密钥对的所有权,而无需直接访问私钥(这使得对您的网站没有直接了解的最终用户可以确信证书是有效的)。在自签名方案中,您将使用带有您自己的私钥的证书签名请求来验证您的私钥(因此是自签名)。根据您的特定应用程序,这可能不需要。(需要 web 服务器或 RPC 服务器,但不是很多)。

JKS 密钥库是 Java 的本机文件格式,用于存储和管理上述部分或全部组件,并保留每个密钥允许或拒绝的相关功能的数据库。

您列出的命令对我来说看起来不错,除了询问不同文件的用途之外,我没有看到其他问题。如果您需要更多信息,请丰富您的问题。

  • 是的,PEM 格式,但按照惯例,标有“PRIVATE KEY”的格式通常命名为“.key”。 (2认同)
  • 根据[这个答案](https://crypto.stackexchange.com/a/43700),“.crt”保留签名证书,而“.csr”是证书签名请求。此外,“.pem”仅表示内容(可以是密钥、证书……)是 Base64 编码的。 (2认同)

小智 5

只是添加更多信息:.der,另一种(二进制)编码(公钥或私钥,或 csr)