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