将.pem转换为.crt和.key

时间:2012-12-05 21:30:54

标签: ssl certificate private-key

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

7 个答案:

答案 0 :(得分:388)

我能够使用这个将pem转换为crt:

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

答案 1 :(得分:287)

使用OpenSSL转换

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

  • 将DER文件(.crt .cer .der)转换为PEM

    openssl x509 -inform der -in certificate.cer -out certificate.pem
    
  • 将PEM文件转换为DER

    openssl x509 -outform der -in certificate.pem -out certificate.der
    
  • 将包含私钥和证书的PKCS#12文件(.pfx .p12)转换为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.
    
  • 将PEM证书文件和私钥转换为PKCS#12(.pfx .p12)

    openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
    
  • 将PEM转换为CRT(.CRT文件)

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

OpenSSL转换PEM

  • 将PEM转换为DER

    openssl x509 -outform der -in certificate.pem -out certificate.der
    
  • 将PEM转换为P7B

    openssl crl2pkcs7 -nocrl -certfile certificate.cer -out certificate.p7b -certfile CACert.cer
    
  • 将PEM转换为PFX

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

OpenSSL转换DER

  • 将DER转换为PEM

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

OpenSSL转换P7B

  • 将P7B转换为PEM

    openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
    
  • 将P7B转换为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转换PFX

  • 将PFX转换为PEM

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

通过OpenSSL生成rsa密钥

  • 在命令行上使用OpenSSL首先需要生成公钥和私钥,您应该使用-passout参数对此文件进行密码保护,此参数可以采用许多不同的形式,因此请参阅有关它的OpenSSL文档。

    openssl genrsa -out private.pem 1024
    
  • 这会创建一个名为private.pem的密钥文件,使用1024位。该文件实际上同时具有私钥和公钥,因此您应该从此文件中提取公共密钥:

    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
    
  • 你现在在file.txt中有一些数据,让我们使用OpenSSL加密它 公钥:

    openssl rsautl -encrypt -inkey public.pem -pubin -in file.txt -out file.ssl
    
  • 这会创建一个加密版本的file.txt,称之为file.ssl,if 你看看这个文件,它只是二进制垃圾,没有什么用处 任何人。现在您可以使用私钥解密它:

    openssl rsautl -decrypt -inkey private.pem -in file.ssl -out decrypted.txt
    
  • 您现在将在decrypted.txt中找到未加密的文件:

    cat decrypted.txt
    |output -> too many secrets
    

OpenSSL中的RSA TOOLS选项

  • 命名

      

    rsa - RSA密钥处理工具

  • <强>概要

      

    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]

  • <强>描述

      

    rsa命令处理RSA密钥。它们可以在各种形式之间进行转换,并打印出它们的组件。请注意,此命令使用传统的SSLeay兼容格式进行私钥加密:较新的应用程序应使用pkcs8实用程序使用更安全的PKCS#8格式。

  • 命令选项

    -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类似,但使用的是RSAPublicKey格式。

    -engine id
    
      

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

  • 备注

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

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

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

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

    PEM RSAPublicKey格式使用页眉和页脚行:

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

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

         

    某些较新版本的IIS在导出的.key文件中包含其他数据。要在实用程序中使用它们,请使用二进制编辑器查看文件并查找字符串&#34; private-key&#34;,然后追溯到字节序列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
    

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

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

答案 2 :(得分:25)

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

提取密钥

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

另一种提取密钥的方法......

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

提取所有证书,包括CA Chain

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

答案 3 :(得分:17)

0。前提条件:应安装openssl。在Windows上,如果安装了Git Bash,请尝试!可以在此处找到备用binaries

1。从.key中提取.pem

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

2。从.crt中提取.pem

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

答案 4 :(得分:3)

这就是我在 Windows 上所做的。

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

答案 5 :(得分:1)

.crt以pem格式存储证书。因此,.pem虽然还可以存储其他内容,例如csr(证书签名请求),私钥,公钥或其他证书,但它仅存储证书时,它与.crt是同一回事。

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

要提取特定部分,如下所示的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

答案 6 :(得分:-2)

如果您是因为使用mkcert而问这个问题,那么窍门就是.pem文件是证书,-key.pem文件是密钥。

(您无需进行转换,只需运行mkcert yourdomain.dev otherdomain.dev