Jér*_*nge 1 encryption ssl curl pem
作为调试问题的一部分,我试图了解pem证书中私钥的加密方式,因为我想知道是否curl无法对私钥进行解密。
我的-----BEGIN ENCRYPTED PRIVATE KEY-----部分中有一个pem。
它用密码加密了吗?还有其他某种加密方案吗?
更确切地说
一位同事建议,pem即使没有密码,也可以对私钥进行加密。这是对的吗?
私钥可以有几种不同的记录形式,但是最常见的形式是PKCS#8(在RFC 5208中定义)。
RFC定义了两种形式的结构。
PrivateKeyInfo ::= SEQUENCE {
version Version,
privateKeyAlgorithm PrivateKeyAlgorithmIdentifier,
privateKey PrivateKey,
attributes [0] IMPLICIT Attributes OPTIONAL }
Run Code Online (Sandbox Code Playgroud)
“此结构的版本号,以防其演变”,“如何识别用于读取privateKey的解析器”,“一些资料,希望您可以阅读”,“有关该资料的一些数据,也许”。
在PEM编码后,PrivateKeyInfo会获得标签“ PRIVATE KEY”,如“ BEGIN PRIVATE KEY”中一样。您没有其中之一。
另一种形式是
EncryptedPrivateKeyInfo ::= SEQUENCE {
encryptionAlgorithm EncryptionAlgorithmIdentifier,
encryptedData EncryptedData }
Run Code Online (Sandbox Code Playgroud)
“我如何加密资料”,“加密资料”。
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 />
Run Code Online (Sandbox Code Playgroud)
数据已基于基于密码的加密方案2(PBES2)进行了加密。输入的密码/密码由基于密码的密钥派生功能2(PBKDF2)转换为密钥材料,并带有盐(在加密时随机选择,但解密时必须相同),e9 37 68 99 cb 9c 4f 10并使用2048(0x800)的迭代次数。该密钥在CBC模式下用于IV的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。| 归档时间: |
|
| 查看次数: |
6393 次 |
| 最近记录: |