将.pem转换为.crt和.key

任何人都可以告诉我正确的方式/命令来提取/转换.pem文件的证书.crt和私钥.key文件? 我刚刚读到他们是可以互换的,但不是如何。

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

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

使用OpenSSL转换

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

  • 将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参数来密码保护这个文件,这个参数可以有很多不同的forms,所以请参考OpenSSL文档。

     openssl genrsa -out private.pem 1024 
  • 这将创build一个名为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,您可以随意与第三方分享。 您可以使用公钥对自己进行encryption,然后使用私钥进行解密来testing,首先我们需要一些数据进行encryption:

  • 示例文件:

     echo 'too many secrets' > file.txt 
  • 您现在在file.txt中有一些数据,可以使用OpenSSL和公钥对其进行encryption:

     openssl rsautl -encrypt -inkey public.pem -pubin -in file.txt -out file.ssl 
  • 这创build了一个encryption版本的file.txt,将其命名为file.ssl,如果你看这个文件,它只是二进制垃圾,对任何人都没有什么用处。 现在你可以使用私钥解密它:

     openssl rsautl -decrypt -inkey private.pem -in file.ssl -out decrypted.txt 
  • 您现在将在decrypted.txt中拥有一个未encryption的文件:

     cat decrypted.txt |output -> too many secrets 

RSA工具OpenSSL中的选项

  • 名称

    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密钥。 它们可以在各种forms之间进行转换,并将其组件打印出来。 请注意,此命令使用传统SSLeay兼容格式进行私钥encryption:较新的应用程序应使用pkcs8实用程序使用更安全的PKCS#8格式。

  • 命令选项

     -help 

    打印出使用信息。

     -inform DER|NET|PEM 

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

     -outform DER|NET|PEM 

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

     -in filename 

    如果未指定此选项,则指定从中读取密钥的input文件名或标准input。 如果密钥被encryption,将会提示密码短语。

     -passin arg 

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

     -out filename 

    如果未指定此选项,则指定要写入密钥的输出文件名或标准输出。 如果设置了任何encryption选项,则会提示input密码。 输出文件名不能与input文件名相同。

     -passout password 

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

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

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

     -text 

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

     -noout 

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

     -modulus 

    这个选项打印出键的模数值。

     -check 

    此选项检查RSA私钥的一致性。

     -pubin 

    默认情况下,从input文件中读取私钥:使用此选项可以读取公钥。

     -pubout 

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

     -RSAPublicKey_in, -RSAPublicKey_out 

    像-pubin和-pubout,除了使用RSAPublicKey格式。

     -engine id 

    指定引擎(通过其唯一的idstring)将导致rsa尝试获取指定引擎的函数引用,从而在需要时初始化它。 引擎将被设置为所有可用algorithm的默认值。

  • 笔记

    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文件的格式,它使用未encryption的RC4进行encryption。 这不是很安全,所以只能在必要时使用。

    某些较新版本的IIS在导出的.key文件中具有其他数据。 要将这些与实用程序一起使用,请使用二进制编辑器查看该文件,并查找string“private-key”,然后追溯到字节序列0x30,0x82(这是一个ASN1 SEQUENCE)。 将所有数据从此处复制到另一个文件,并将其用作带有-inform NET选项的rsa实用程序的input。

    例子

    要删除RSA私钥上的密码短语,请执行以下操作:

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

    使用三重DESencryption私钥:

      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