繁体   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