[英]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.