谁能告诉我从。pem文件中提取/转换证书.crt和私钥.key文件的正确方法/命令?我刚读到它们是可以互换的,但不知道怎么互换。


当前回答

.crt存储证书..pem格式。因此,.pem虽然也可以有其他东西,如csr(证书签名请求)、私钥、公钥或其他cert,但当它只存储一个cert时,它与.crt是一样的。

pem是一个base64编码的文件,每个部分之间有一个页眉和一个页脚。

要提取特定的部分,像下面这样的perl脚本是完全有效的,但是可以随意使用一些openssl命令。

 perl -ne "\$n++ if /BEGIN/; print if \$n == 1 && /BEGIN/.../END/;" mydomain.pem

其中==1可以更改为您需要的任何部分。显然,如果你确切地知道你需要的页眉和页脚,并且文件中只有其中一个(通常情况下,如果你只保留证书和密钥),你可以简化它:

 perl -ne "print if /^-----BEGIN CERTIFICATE-----\$/.../END/;" mydomain.pem

其他回答

如果您之所以问这个问题是因为您正在使用mkcert,那么诀窍在于.pem文件是cert和-key。Pem文件是密钥。

(你不需要转换,只需要运行mkcert yourdomain.dev otherdomain.dev)

.crt存储证书..pem格式。因此,.pem虽然也可以有其他东西,如csr(证书签名请求)、私钥、公钥或其他cert,但当它只存储一个cert时,它与.crt是一样的。

pem是一个base64编码的文件,每个部分之间有一个页眉和一个页脚。

要提取特定的部分,像下面这样的perl脚本是完全有效的,但是可以随意使用一些openssl命令。

 perl -ne "\$n++ if /BEGIN/; print if \$n == 1 && /BEGIN/.../END/;" mydomain.pem

其中==1可以更改为您需要的任何部分。显然,如果你确切地知道你需要的页眉和页脚,并且文件中只有其中一个(通常情况下,如果你只保留证书和密钥),你可以简化它:

 perl -ne "print if /^-----BEGIN CERTIFICATE-----\$/.../END/;" mydomain.pem

先决条件

应该安装Openssl。 在Windows上,如果安装了Git Bash,试试!可以在这里找到替代二进制文件。

步骤1:从。pem中提取。key

openssl pkey -in cert.pem -out cert.key

步骤2:从。pem中提取。crt

openssl crl2pkcs7 -nocrl -certfile cert.pem | openssl pkcs7 -print_certs -out cert.crt

这是我在窗户上做的。

从谷歌下载一个包含open ssl exe的zip文件 解压zip文件并进入bin文件夹。 进入bin文件夹的地址栏,输入cmd。这将在此文件夹中打开命令提示符。 move/将pem文件放到bin文件夹中。 执行两条命令。一个创建证书,另一个创建密钥文件

openssl x509 -outform der -in yourPemFilename.pem -out certfileOutName.crt
openssl rsa -in yourPemFilename.pem -out keyfileOutName.key

从pem文件中提取密钥和证书。

提取关键

openssl pkey -in foo.pem -out foo.key

另一种提取密钥的方法…

openssl rsa -in foo.pem -out foo.key

提取所有的证书,包括CA链

openssl crl2pkcs7 -nocrl -certfile foo.pem | openssl pkcs7 -print_certs -out foo.cert

将文本上的第一个证书提取为DER

openssl x509 -in foo.pem -outform DER -out first-cert.der