簡體   English   中英

Pem證書中的私鑰如何加密?

[英]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格式已加密。
    • 使用口令加密的可能性為99.999%。
    • 但是可能有人使用口令以外的其他方法教過OpenSSL有關PBES2 KDF的問題:)。
  • PRIVATE KEY格式未加密。
    • RSA PRIVATE KEY表單也未加密,但這是PKCS#1 RSAPrivateKey,而不是PKCS#8 PrivateKeyInfo。
  • 如果curl不提示您輸入密碼,則它不支持加密的私鑰。
  • 雖然在沒有密碼短語的情況下存在一個加密的私鑰並不是不可能的,但它絕對不常見,並且絕對不在PEM編碼的有效負載中。

如果您使用密碼,那么您的密鑰當然是加密的!

密碼短語是保護私鑰文件的單詞或短語。 它可以防止未經授權的用戶對其進行加密。 通常,它只是用於密碼的秘密加密/解密密鑰。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM