谁能告诉我从文件中提取/转换证书.crt
和私钥.key
文件的正确方法/命令.pem
?我只是读到它们是可以互换的,但不能互换。
谁能告诉我从文件中提取/转换证书.crt
和私钥.key
文件的正确方法/命令.pem
?我只是读到它们是可以互换的,但不能互换。
Answers:
我能够使用以下方法将pem转换为crt:
openssl x509 -outform der -in your-cert.pem -out your-cert.crt
openssl pkey -in mumble.pem -out mumble-key.pem
如果OpenSSL版本低于1.0.0,则将密钥提取为RSA密钥:openssl rsa -in mumble.pem -out mumble-key.pem
unable to load certificate 140584440387400:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: TRUSTED CERTIFICATE
Expecting: ANY PRIVATE KEY
错误。
使用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
这将创建一个使用1024位的名为private.pem的密钥文件。该文件实际上同时具有私钥和公钥,因此您应该从该文件中提取公钥:
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.ssl的file.txt加密版本,如果您查看此文件,它只是二进制垃圾,对任何人都没有什么用。现在,您可以使用私钥对其解密:
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] [-通知PEM | NET | DER] [-form PEM | NET | DER] [-输入文件名] [-passin arg] [-输出文件名] [-passout arg] [-aes128] [- aes192] [-aes256] [-camellia128] [-camellia192] [-camellia256] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-check] [-pubin] [-pubout] [-RSAPublicKey_in] [-RSAPublicKey_out] [-引擎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文件中具有其他数据。要将其与该实用程序一起使用,请使用二进制编辑器查看文件并查找字符串“ 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
以RSAPublicKey格式输出私钥的公共部分:
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
openssl crl2pkcs7 -nocrl -certfile foo.pem | openssl pkcs7 -print_certs -out foo.cert
openssl x509 -in foo.pem -outform DER -out first-cert.der
.crt以pem格式存储证书。因此,.pem虽然还可以存储其他内容,例如csr(证书签名请求),私钥,公钥或其他证书,但它仅存储证书时,它与.crt是同一回事。
pem是基数为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