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