簡體   English   中英

嘗試讀取加密的私鑰時“塊中沒有 DEK-Info 標頭”

[英]"No DEK-Info header in block" when attempting to read encrypted private key

我正在嘗試讀取加密的 PKCS8 私鑰文件。 我生成了這樣的密鑰:

openssl genrsa -out file.pem -passout pass:file -aes256 1024
openssl pkcs8 -topk8 -inform pem -in file.pem -outform pem -out filePKCS8.pem

我嘗試以這種方式在 Go 中閱讀它:

block, _ := pem.Decode(key)
return x509.DecryptPEMBlock(block, password)

但我收到一條錯誤消息:

x509: no DEK-Info header in block

但是,我無法弄清楚出了什么問題。 我生成的密鑰錯誤還是使用了錯誤的庫? 我看到專門用於讀取未加密 PKCS8 文件的庫,但沒有專門用於加密 PKCS8 文件的庫。

有誰有想法嗎?

Go 沒有在標准庫中解密 PKCS8 密鑰的功能。

你可以這個包: https : //github.com/youmark/pkcs8/blob/master/pkcs8.go#L103

為遇到相同問題的任何人提供更長的解釋。

什么會起作用

你的第一個命令

openssl genrsa -out file.pem -passout pass:file -aes256 1024

生成一個 PKCS#1 私鑰文件(file.pem):

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-256-CBC,1DA219DB746F88C6DDA0D852A0FD3232

AEf09rGkgGEJ79GgO4dEVsArwv4IbbODlxy95uHhfkdGYmuk6OlTpiCUE0GT68wn
KFJfBcHr8Z3VqiHGsXxM5QlKhgnfptxfbrdKErgBD5LQcrvnqmf43KeD4lGQcpiy
...
...
mAKMCwiU/GKZz8ZwQ4qGkBlVVCOFfgwmfbqguJF2l8yzM8lYI9MZ9NEwKkvEbc
-----END RSA PRIVATE KEY-----

這個私鑰文件可以被x509.DecryptPEMBlock()解析和解密。

什么行不通,為什么

你的第二個命令

openssl pkcs8 -topk8 -inform pem -in file.pem -outform pem -out filePKCS8.pem

將該文件轉換為 PKCS#8 格式 (filePKCS8.pem)。

子命令genpkey將直接產生類似的結果:

openssl genpkey -algorithm RSA -aes256 \
  -pkeyopt rsa_keygen_bits:1024 -out filePKCS8.pem

生成的 filePKCS8.pem(無論哪種方式)都類似於:

-----BEGIN ENCRYPTED PRIVATE KEY-----
MIISrTBXBgkqhkiG9w0BBQ0wSjKpBgkqhkiG9w0BBQwwHAQIKL+ordsVfqsCAggB
MAwGCCqGSIb3DQIJCQAwHQYJYIZIWAUDBAEqBBCipOAAxWkC0/zkNLNYTSMgBIIS
...
...
zfdxjZ0XmPiwED2azsLMnRrWnRj2UqMtnv9zO/ucik9za
-----END ENCRYPTED PRIVATE KEY-----

x509.DecryptPEMBlock()不支持這種格式。 正如#8860所指定的,Go 的核心庫在不久的將來沒有真正支持 pkcs#8 的計划。

正如Gregory所提到的,如果您想使用它,那么使用github.com/youmark/pkcs8文檔)等 3rd 方庫會更好。

暫無
暫無

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

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