将.pem转换为.crt和.key

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

1259727 次浏览

我可以使用以下方法将pem转换为crt:

openssl x509 -outform der -in your-cert.pem -out your-cert.crt

使用OpenSSL转换

这些命令允许您将证书和密钥转换为不同的格式,以使它们与特定类型的服务器或软件兼容。

  • 转换DER文件(。crt .cer .der)到PEM

    openssl x509 -inform der -in certificate.cer -out certificate.pem
    
  • Convert a PEM file to DER

    openssl x509 -outform der -in certificate.pem -out certificate.der
    
  • Convert a PKCS#12 file (.pfx .p12) containing a private key and certificates to PEM

    openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes
    
    
    You can add -nocerts to only output the private key or add -nokeys to only output the certificates.
    
  • Convert a PEM certificate file and a private key to PKCS#12 (.pfx .p12)

    openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
    
  • Convert PEM to CRT (.CRT file)

    openssl x509 -outform der -in certificate.pem -out certificate.crt
    

OpenSSL Convert PEM

  • Convert PEM to DER

    openssl x509 -outform der -in certificate.pem -out certificate.der
    
  • Convert PEM to P7B

    openssl crl2pkcs7 -nocrl -certfile certificate.cer -out certificate.p7b -certfile CACert.cer
    
  • Convert PEM to PFX

    openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
    

OpenSSL Convert DER

  • Convert DER to PEM

    openssl x509 -inform der -in certificate.cer -out certificate.pem
    

OpenSSL Convert P7B

  • Convert P7B to PEM

    openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
    
  • Convert P7B to PFX

    openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
    
    
    openssl pkcs12 -export -in certificate.cer -inkey privateKey.key -out certificate.pfx -certfile CACert.cer
    

OpenSSL Convert PFX

  • Convert PFX to PEM

    openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes
    

Generate rsa keys by OpenSSL

  • Using OpenSSL on the command line you’d first need to generate a public and private key, you should password protect this file using the -passout argument, there are many different forms that this argument can take so consult the OpenSSL documentation about that.

    openssl genrsa -out private.pem 1024
    
  • This creates a key file called private.pem that uses 1024 bits. This file actually have both the private and public keys, so you should extract the public one from this file:

    openssl rsa -in private.pem -out public.pem -outform PEM -pubout
    
    
    or
    
    
    openssl rsa -in private.pem -pubout > public.pem
    
    
    or
    
    
    openssl rsa -in private.pem -pubout -out public.pem
    
    你现在有了public。Pem仅包含您的公钥,您可以自由地与第三方共享此文件。 你可以用你的公钥加密一些东西,然后用你的私钥解密,首先我们需要加密一些数据:

    李< /引用> < / >
  • echo 'too many secrets' > file.txt
    
  • You now have some data in file.txt, lets encrypt it using OpenSSL and the public key:

    openssl rsautl -encrypt -inkey public.pem -pubin -in file.txt -out file.ssl
    
  • This creates an encrypted version of file.txt calling it file.ssl, if you look at this file it’s just binary junk, nothing very useful to anyone. Now you can unencrypt it using the private key:

    openssl rsautl -decrypt -inkey private.pem -in file.ssl -out decrypted.txt
    
  • You will now have an unencrypted file in decrypted.txt:

    cat decrypted.txt
    |output -> too many secrets
    

RSA TOOLS Options in OpenSSL

  • NAME

    rsa - RSA key processing tool

  • SYNOPSIS

    openssl rsa [-help] [-inform PEM|NET|DER] [-outform PEM|NET|DER] [-in filename] [-passin arg] [-out filename] [-passout arg] [-aes128] [-aes192] [-aes256] [-camellia128] [-camellia192] [-camellia256] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-check] [-pubin] [-pubout] [-RSAPublicKey_in] [-RSAPublicKey_out] [-engine id]

  • DESCRIPTION

    The rsa command processes RSA keys. They can be converted between various forms and their components printed out. Note this command uses the traditional SSLeay compatible format for private key encryption: newer applications should use the more secure PKCS#8 format using the pkcs8 utility.

  • COMMAND OPTIONS

    -help
    

    打印一条使用信息。

    -inform DER|NET|PEM
    

    这指定了输入格式。DER选项使用与PKCS#1 RSAPrivateKey或SubjectPublicKeyInfo格式兼容的ASN1 DER编码表单。PEM格式是默认格式:它由DER格式base64组成,并用附加的页眉和页脚行进行编码。在输入pkcs# 8格式时,也接受私钥。NET表单是NOTES部分描述的一种格式。

    -outform DER|NET|PEM
    

    这指定了输出格式,选项与-inform选项具有相同的含义。

    -in filename
    

    如果未指定此选项,则指定从输入文件名或标准输入读取键。如果密钥是加密的,将提示一个密码短语。

    -passin arg
    

    输入文件密码源。有关arg格式的更多信息,请参阅openssl中的PASS PHRASE ARGUMENTS部分。

    -out filename
    

    如果未指定此选项,则指定要写入键的输出文件名或标准输出。如果设置了任何加密选项,则会提示一个密码短语。输出文件名不应该与输入文件名相同。

    -passout password
    

    输出文件密码源。有关arg格式的更多信息,请参阅openssl中的PASS PHRASE ARGUMENTS部分。

    -aes128|-aes192|-aes256|-camellia128|-camellia192|-camellia256|-des|-des3|-idea
    

    这些选项在输出私钥之前使用指定的密码加密私钥。提示口令。如果没有指定这些选项,则键将以纯文本形式写入。这意味着使用rsa实用程序读入没有加密选项的加密密钥可以用来从密钥中删除密码短语,或者通过设置加密选项可以用来添加或更改密码短语。这些选项只能用于PEM格式的输出文件。

    -text
    

    除编码版本外,还以纯文本形式打印各种公钥或私钥组件。

    -noout
    

    此选项可防止输出密钥的编码版本。

    -modulus
    

    该选项输出键的模量值。

    -check
    

    该选项用于检查RSA私钥的一致性。

    -pubin
    

    默认情况下,从输入文件中读取私钥:使用此选项将读取公钥。

    -pubout
    

    默认情况下输出一个私钥:使用此选项将输出一个公钥。如果输入是公钥,则自动设置此选项。

    -RSAPublicKey_in, -RSAPublicKey_out
    

    比如-pubin和-pubout,除非使用rspublickey格式。

    -engine id
    

    指定引擎(通过其唯一的id字符串)将导致rsa尝试获取指定引擎的函数引用,从而在需要时初始化它。然后,该引擎将被设置为所有可用算法的默认引擎。

    李< /引用> < / >
  • < p > # EYZ0

    PEM私钥格式使用页眉和页脚行:

    -----BEGIN RSA PRIVATE KEY-----
    
    
    -----END RSA PRIVATE KEY-----
    

    PEM公钥格式使用页眉和页脚行:

    -----BEGIN PUBLIC KEY-----
    
    
    -----END PUBLIC KEY-----
    

    PEM rspublickey格式使用页眉和页脚:

    -----BEGIN RSA PUBLIC KEY-----
    
    
    -----END RSA PUBLIC KEY-----
    

    NET表单是一种与旧Netscape服务器和Microsoft IIS .key文件兼容的格式,它使用无盐RC4进行加密。它不是很安全,所以应该只在必要时使用。

    一些较新版本的IIS在导出的.key文件中有额外的数据。要在实用程序中使用这些文件,请使用二进制编辑器查看文件并查找字符串“private-key”,然后追溯到字节序列0x30, 0x82(这是一个ASN1 sequence)。从这里开始将所有数据复制到另一个文件,并使用-inform NET选项将其作为rsa实用程序的输入。

    例子

    使用实例删除RSA私钥的密码。

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

    使用三重DES加密私钥。

     openssl rsa -in key.pem -des3 -out keyout.pem
    

    使用实例将私钥从PEM格式转换为DER格式。

      openssl rsa -in key.pem -outform DER -out keyout.der
    

    将私钥的组成部分打印到标准输出:

      openssl rsa -in key.pem -text -noout
    

    只输出私钥的公开部分:

      openssl rsa -in key.pem -pubout -out pubkey.pem
    

    以rspublickey格式输出私钥的公共部分:

      openssl rsa -in key.pem -RSAPublicKey_out -out pubkey.pem
    

从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

.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文件是证书,-key.pem文件是密钥。

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

先决条件

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

这是我在窗户上做的。

  1. 谷歌下载一个包含开放ssl exe的zip文件
  2. 解压zip文件并进入bin文件夹。
  3. 进入bin文件夹的地址栏,输入cmd。这将在此文件夹中打开命令提示符。
  4. move/将pem文件放到bin文件夹中。
  5. 执行两条命令。一个创建证书,另一个创建密钥文件
openssl x509 -outform der -in yourPemFilename.pem -out certfileOutName.crt
openssl rsa -in yourPemFilename.pem -out keyfileOutName.key