[英]How is a private key encrypted in a pem certificate?
作为调试问题的一部分,我试图了解如何在pem
证书中对私钥进行加密,因为我想知道curl
是否无法对私钥进行解密。
我的pem
有一个-----BEGIN ENCRYPTED PRIVATE KEY-----
部分。
它用密码加密了吗? 还有其他某种加密方案吗?
更确切地说
一位同事建议,即使没有密码,也可以在pem
对私钥进行加密。 这是对的吗?
私钥可以有几种不同的记录形式,但是最常见的形式是PKCS#8(在RFC 5208中定义)。
RFC定义了两种形式的结构。
PrivateKeyInfo ::= SEQUENCE {
version Version,
privateKeyAlgorithm PrivateKeyAlgorithmIdentifier,
privateKey PrivateKey,
attributes [0] IMPLICIT Attributes OPTIONAL }
“此结构的版本号,以防其演变”,“如何识别用于读取privateKey的解析器”,“一些资料,希望您可以阅读”,“有关该资料的一些数据,也许”。
在PEM编码后,PrivateKeyInfo会获得标签“ PRIVATE KEY”,如“ BEGIN PRIVATE KEY”中一样。 您没有其中之一。
另一种形式是
EncryptedPrivateKeyInfo ::= SEQUENCE {
encryptionAlgorithm EncryptionAlgorithmIdentifier,
encryptedData EncryptedData }
“我如何加密资料”,“加密资料”。
EncryptedPrivateKeyInfo带有您所拥有的PEM标签“ ENCRYPTED PRIVATE KEY”。
调查其中之一:
$ openssl asn1parse -i -dump < rsa.enc.p8
0:d=0 hl=4 l= 710 cons: SEQUENCE
4:d=1 hl=2 l= 64 cons: SEQUENCE
6:d=2 hl=2 l= 9 prim: OBJECT :PBES2
17:d=2 hl=2 l= 51 cons: SEQUENCE
19:d=3 hl=2 l= 27 cons: SEQUENCE
21:d=4 hl=2 l= 9 prim: OBJECT :PBKDF2
32:d=4 hl=2 l= 14 cons: SEQUENCE
34:d=5 hl=2 l= 8 prim: OCTET STRING
0000 - e9 37 68 99 cb 9c 4f 10- .7h...O.
44:d=5 hl=2 l= 2 prim: INTEGER :0800
48:d=3 hl=2 l= 20 cons: SEQUENCE
50:d=4 hl=2 l= 8 prim: OBJECT :des-ede3-cbc
60:d=4 hl=2 l= 8 prim: OCTET STRING
0000 - 16 ad ce 41 47 e8 ba 85- ...AG...
70:d=1 hl=4 l= 640 prim: OCTET STRING
<data_omitted />
数据已基于基于密码的加密方案2( PBES2 )进行了加密。 输入的密码/密码通过基于密码的密钥派生功能2( PBKDF2 )转换为密钥材料(在加密时随机选择,但解密时必须相同) e9 37 68 99 cb 9c 4f 10
并使用迭代计数为2048(0x800)。 该密钥用于CBC模式下的TripleDES加密,其IV(在加密时随机选择,但解密时必须相同)为16 ad ce 41 47 e8 ba 85
。 加密的内容为640字节,然后将被解析为PrivateKeyInfo结构。
除了PKCS#8以外,用于传输私钥的唯一其他选择是PKCS#12 / PFX,但是该数据结构没有标准的PEM表示形式。 最新版本的PKCS#12允许以EnvelopedCMS / PKCS#7的样式将数据加密为证书。
因此,对于一些简洁的答案:
ENCRYPTED PRIVATE KEY
格式已加密。
PRIVATE KEY
格式未加密。
RSA PRIVATE KEY
表单也未加密,但这是PKCS#1 RSAPrivateKey,而不是PKCS#8 PrivateKeyInfo。 如果您使用密码,那么您的密钥当然是加密的!
密码短语是保护私钥文件的单词或短语。 它可以防止未经授权的用户对其进行加密。 通常,它只是用于密码的秘密加密/解密密钥。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.