Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssl 如何生成由对称密钥加密的PKCS8私钥?_Ssl_Cryptography_Openssl_Des_Pkcs#8 - Fatal编程技术网

Ssl 如何生成由对称密钥加密的PKCS8私钥?

Ssl 如何生成由对称密钥加密的PKCS8私钥?,ssl,cryptography,openssl,des,pkcs#8,Ssl,Cryptography,Openssl,Des,Pkcs#8,如果我尝试使用OpenSSL命令行生成3TDES加密的PKCS 8密钥: openssl genrsa 512 | openssl pkcs8 -topk8 -v2 des-ede3-cbc 我得到: Enter Encryption Password: 如果我想用一个实际的密钥,而不是从密码短语派生的密钥来加密它呢? PKCS8 RFC没有说明必须使用哪种算法来创建密钥块。它确实给出了PKCS5算法作为示例。有没有办法使用OpenSSL创建由DES密钥加密的PKCS8密钥?如果不是,那只是

如果我尝试使用OpenSSL命令行生成3TDES加密的PKCS 8密钥:

openssl genrsa 512 | openssl pkcs8 -topk8 -v2 des-ede3-cbc
我得到:

Enter Encryption Password:
如果我想用一个实际的密钥,而不是从密码短语派生的密钥来加密它呢? PKCS8 RFC没有说明必须使用哪种算法来创建密钥块。它确实给出了PKCS5算法作为示例。有没有办法使用OpenSSL创建由DES密钥加密的PKCS8密钥?如果不是,那只是OpenSSL不支持它,还是说这是一件非常不标准的事情

下面是通过OpenSSL命令行(密码“测试”)使用基于密码的加密创建的示例:

被加密并放入加密的PKCS8结构中:

 0:d=0  hl=4 l= 378 cons: SEQUENCE          
 4:d=1  hl=2 l=  20 cons:  SEQUENCE          
 6:d=2  hl=2 l=   8 prim:   OBJECT            :des-ede3-cbc
16:d=2  hl=2 l=   8 prim:   OCTET STRING      
   0000 - 5f 21 8f 11 7c 86 ce e1-                          _!..|...
26:d=1  hl=4 l= 352 prim:  OCTET STRING      
   0000 - c1 dc 29 07 0d 4b 48 73-8a 6f 98 04 12 69 e0 ca   ..)..KHs.o...i..
   0010 - a6 d2 f3 94 01 ba aa c8-72 da d4 cb 99 92 96 cd   ........r.......
   0020 - f0 7f 92 b0 c9 4b 81 02-c6 28 a9 3a 26 68 44 e3   .....K...(.:&hD.
   0030 - 6a 52 4b a6 02 0d ef 72-07 d2 23 a4 0e c3 ab 2c   jRK....r..#....,
   0040 - 9c d7 8c 92 3c df 01 41-a5 b9 90 fc 91 f6 c3 6a   ....<..A.......j
   0050 - 83 02 2a e9 71 59 a4 70-36 16 45 be a6 2a c8 e7   ..*.qY.p6.E..*..
   0060 - 84 cc ce a9 fa 1f a0 60-e9 26 a2 d7 41 bb 3c 1a   .......`.&..A.<.
   0070 - 1b a4 47 21 dc 51 4d f7-ed dd 2a 8c 5f e6 68 9e   ..G!.QM...*._.h.
   0080 - f2 60 c1 79 bc d4 e7 0d-4b 90 4b 80 30 5b 30 f8   .`.y....K.K.0[0.
   0090 - 49 8f 7f 82 05 f7 d3 4d-51 f7 5d ff e8 7c c4 ff   I......MQ.]..|..
   00a0 - d9 ad a3 f9 33 08 22 29-9e da d5 ee 67 6a 68 a4   ....3.")....gjh.
   00b0 - 80 29 8f 6a d9 2b ef d5-50 87 69 9a 66 da 3e 78   .).j.+..P.i.f.>x
   00c0 - 0a 5d 9d 40 58 ea a3 88-92 62 d5 7c 72 05 f4 4d   .].@X....b.|r..M
   00d0 - 01 ca 8d fb 0b af 71 25-d8 1b a6 03 4d 74 f8 ac   ......q%....Mt..
   00e0 - 7d 77 44 08 e5 84 0d fb-15 c3 f7 d4 4c e7 50 b3   }wD.........L.P.
   00f0 - 08 96 9a 33 3c 74 05 ec-3d 8b 19 01 ba 04 d0 ab   ...3<t..=.......
   0100 - 47 32 6a d8 09 9b 0e 0e-58 f5 34 5f 8f 63 18 12   G2j.....X.4_.c..
   0110 - 22 a5 f7 e0 af 09 ed 16-22 2c 35 4a 8f 55 f3 22   ".......",5J.U."
   0120 - aa b1 e0 f4 27 df 45 ef-3b 04 08 19 89 67 dd 17   ....'.E.;....g..
   0130 - 47 13 55 3f 9d 0a a3 80-4d 6a 49 90 e9 83 90 ad   G.U?....MjI.....
   0140 - 1b 49 2f c1 1f c5 8b db-03 38 a4 13 03 ad fe 99   .I/......8......
   0150 - 1d 75 e7 b1 2f 83 ad e4-42 74 44 06 38 cb bd c4   .u../...BtD.8...
EncryptedPrivateKeyInfo ::= SEQUENCE {
    encryptionAlgorithm AlgorithmIdentifier {{KeyEncryptionAlgorithms}},
    encryptedData EncryptedData }
我不确定这些空的算法标识符定义是为了什么

PrivateKeyAlgorithms ALGORITHM-IDENTIFIER ::= {
     ... -- For local profiles
}

KeyEncryptionAlgorithms ALGORITHM-IDENTIFIER ::= {
     ... -- For local profiles
}
X509 RFC

这定义了算法标识符字段

AlgorithmIdentifier  ::=  SEQUENCE  {
    algorithm               OBJECT IDENTIFIER,
    parameters              ANY DEFINED BY algorithm OPTIONAL  }
TDES CBC算法标识符的加密消息语法:


以下是对OpenSSL邮件列表上相同ish问题的回复:

对于encryptionAlgorithm字段,使用任何密码的算法标识符创建PKCS8密钥块似乎都是有效的

“[T]该标准没有限制可能的值,它可能非常有用 可能有人在某处有一个PKCS#8实现 它接受一个不引用基于密码的 加密方案。”

PrivateKeyAlgorithms ALGORITHM-IDENTIFIER ::= {
     ... -- For local profiles
}

KeyEncryptionAlgorithms ALGORITHM-IDENTIFIER ::= {
     ... -- For local profiles
}
AlgorithmIdentifier  ::=  SEQUENCE  {
    algorithm               OBJECT IDENTIFIER,
    parameters              ANY DEFINED BY algorithm OPTIONAL  }
The AlgorithmIdentifier parameters field MUST be present, and the
parameters field must contain a CBCParameter:

CBCParameter ::= IV

IV ::= OCTET STRING  -- exactly 8 octets