将.pem转换为.crt和.key

Lan*_*nbo 322 ssl certificate private-key

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

小智 447

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

openssl x509 -outform der -in your-cert.pem -out your-cert.crt
Run Code Online (Sandbox Code Playgroud)

  • 我尝试了你的命令,但我有:`无法加载证书140584440387400:错误:0906D06C:PEM例程:PEM_read_bio:无起始行:pem_lib.c:703:期待:TRUSTED CERTIFICATE` (115认同)
  • 好的,这有效.但是如何获取.key文件? (16认同)
  • 使用文本编辑器不是最好的方法.以PKCS8形式提取密钥:`openssl pkey -in mumble.pem -out mumble-key.pem`如果OpenSSL版本低于1.0.0,则将密钥提取为RSA密钥:`openssl rsa -in mumble .pem -out mumble-key.pem` (13认同)
  • 键命令(openssl pkey -in mumble.pem -out mumble-key.pem)给出:无法加载键129051320116880:错误:0906D06C:PEM例程:PEM_read_bio:无起始行:pem_lib.c:703:期待:ANY私钥 (13认同)
  • @Andron pkey和rsa都给我“期望:任何私钥”错误。 (3认同)
  • 有什么办法可以得到钥匙吗? (3认同)
  • openssl rsa -your-cert.pem -outform pem -out your-key.pem (2认同)

eve*_*een 341

使用OpenSSL进行转换

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

OpenSSL转换PEM

OpenSSL转换DER

OpenSSL转换P7B

OpenSSL转换PFX

通过OpenSSL生成rsa密钥

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

    openssl genrsa -out private.pem 1024
    
    Run Code Online (Sandbox Code Playgroud)
  • 这将创建一个名为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
    
    Run Code Online (Sandbox Code Playgroud)

    您现在将public.pem只包含您的公钥,您可以与第三方自由分享.您可以通过使用您的公钥自己加密某些内容然后使用您的私钥解密来测试所有内容,首先我们需要一些数据来加密:

  • 示例文件:

    echo 'too many secrets' > file.txt
    
    Run Code Online (Sandbox Code Playgroud)
  • 您现在在file.txt中有一些数据,让我们使用OpenSSL和公钥对其进行加密:

    openssl rsautl -encrypt -inkey public.pem -pubin -in file.txt -out file.ssl
    
    Run Code Online (Sandbox Code Playgroud)
  • 这会创建一个加密版本的file.txt,称之为file.ssl,如果你看这个文件它只是二进制垃圾,对任何人都没什么用.现在您可以使用私钥解密它:

    openssl rsautl -decrypt -inkey private.pem -in file.ssl -out decrypted.txt
    
    Run Code Online (Sandbox Code Playgroud)
  • 您现在将在decrypted.txt中有一个未加密的文件:

    cat decrypted.txt
    |output -> too many secrets
    
    Run Code Online (Sandbox Code Playgroud)

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

  • 命令选项

    -help
    
    Run Code Online (Sandbox Code Playgroud)

    打印出使用信息.

    -inform DER|NET|PEM
    
    Run Code Online (Sandbox Code Playgroud)

    这指定了输入格式.DER选项使用与PKCS#1 RSAPrivateKey或SubjectPublicKeyInfo格式兼容的ASN1 DER编码形式.PEM表单是默认格式:它由DER格式base64编码,带有额外的页眉和页脚行.在输入PKCS#8格式的私钥也被接受.NET表单是一种格式,在NOTES部分中描述.

    -outform DER|NET|PEM
    
    Run Code Online (Sandbox Code Playgroud)

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

    -in filename
    
    Run Code Online (Sandbox Code Playgroud)

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

    -passin arg
    
    Run Code Online (Sandbox Code Playgroud)

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

    -out filename
    
    Run Code Online (Sandbox Code Playgroud)

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

    -passout password
    
    Run Code Online (Sandbox Code Playgroud)

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

    -aes128|-aes192|-aes256|-camellia128|-camellia192|-camellia256|-des|-des3|-idea
    
    Run Code Online (Sandbox Code Playgroud)

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

    -text
    
    Run Code Online (Sandbox Code Playgroud)

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

    -noout
    
    Run Code Online (Sandbox Code Playgroud)

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

    -modulus
    
    Run Code Online (Sandbox Code Playgroud)

    此选项打印出键的模数值.

    -check
    
    Run Code Online (Sandbox Code Playgroud)

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

    -pubin
    
    Run Code Online (Sandbox Code Playgroud)

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

    -pubout
    
    Run Code Online (Sandbox Code Playgroud)

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

    -RSAPublicKey_in, -RSAPublicKey_out
    
    Run Code Online (Sandbox Code Playgroud)

    比如-pubin和-pubout,除了使用RSAPublicKey格式.

    -engine id
    
    Run Code Online (Sandbox Code Playgroud)

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

  • 笔记

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

    -----BEGIN RSA PRIVATE KEY-----
    
    -----END RSA PRIVATE KEY-----
    
    Run Code Online (Sandbox Code Playgroud)

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

    -----BEGIN PUBLIC KEY-----
    
    -----END PUBLIC KEY-----
    
    Run Code Online (Sandbox Code Playgroud)

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

    -----BEGIN RSA PUBLIC KEY-----
    
    -----END RSA PUBLIC KEY-----
    
    Run Code Online (Sandbox Code Playgroud)

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

    使用三重DES加密私钥:

     openssl rsa -in key.pem -des3 -out keyout.pem
    
    Run Code Online (Sandbox Code Playgroud)

    要将私钥从PEM转换为DER格式:

      openssl rsa -in key.pem -outform DER -out keyout.der
    
    Run Code Online (Sandbox Code Playgroud)

    要将私钥的组件打印到标准输出:

      openssl rsa -in key.pem -text -noout
    
    Run Code Online (Sandbox Code Playgroud)

    要输出私钥的公共部分:

      openssl rsa -in key.pem -pubout -out pubkey.pem
    
    Run Code Online (Sandbox Code Playgroud)

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

      openssl rsa -in key.pem -RSAPublicKey_out -out pubkey.pem
    
    Run Code Online (Sandbox Code Playgroud)

  • 仍然这不回答*如何从(导出的)二进制证书中获取私钥*的问题. (26认同)

Hig*_*ife 36

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

提取密钥

openssl pkey -in foo.pem -out foo.key
Run Code Online (Sandbox Code Playgroud)

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

openssl rsa -in foo.pem -out foo.key
Run Code Online (Sandbox Code Playgroud)

提取所有证书,包括CA Chain

openssl crl2pkcs7 -nocrl -certfile foo.pem | openssl pkcs7 -print_certs -out foo.cert
Run Code Online (Sandbox Code Playgroud)

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

openssl x509 -in foo.pem -outform DER -out first-cert.der
Run Code Online (Sandbox Code Playgroud)

  • openssl x509 -outform der -in C:\ Users\Greg\.ssh\e360_stork_listener.pem -out C:\ Users\Greg\.ssh\e360_stork_listener.crt无法加载证书4294956672:错误:0906D06C:PEM例程:PEM_read_bio:没有起始行:pem_lib.c:708:期待:TRUSTED CERTIFICATE (6认同)

Sai*_*pta 27

先决条件

openssl 应该安装。在 Windows 上,如果Git Bash已安装,请尝试!可以在此处找到替代二进制文件

第 1 步:.key.pem

openssl pkey -in cert.pem -out cert.key
Run Code Online (Sandbox Code Playgroud)

第 2 步:.crt.pem

openssl crl2pkcs7 -nocrl -certfile cert.pem | openssl pkcs7 -print_certs -out cert.crt
Run Code Online (Sandbox Code Playgroud)

  • 我得到空文件,但 .crt 文件命令在控制台中没有错误。任何想法? (7认同)

小智 10

这就是我在 Windows 上所做的。

  1. 从Google下载包含 open 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
Run Code Online (Sandbox Code Playgroud)

  • “转到 bin 文件夹中的地址栏并输入 cmd”这是我见过的最酷的 Windows 技巧:D (2认同)

X''*_*X'' 5

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

(不需要转换,直接运行即可mkcert yourdomain.dev otherdomain.dev