如何使用 dgst 结合 pkcs8 来签名

如何使用 dgst 结合 pkcs8 来签名

我有一个 pkcs#8 加密密钥。我想使用此密钥对文件进行签名,而无需事先解密。我想要实现的是使用单个 openssl 命令完成所有过程。

像这样的东西:

openssl dgst -sha256 -sign pkcs8 -inform DER -in private.key -out 
sign_this.txt.signed sign.txt

该命令将提示输入密码,然后生成签名。

是否可以使用 openssl 嵌套命令?请解释正确的操作方法。

谢谢。

答案1

openssl dgst -signwith -keyform der(not -inform) 只接受明确的私钥。但是,此命令可以接受所有 4 种 PEM 格式的私钥:传统明文或加密,以及 pkcs8 明文或加密。当然,对于加密密钥,您需要在使用时提供密码;我认为您的“事先不解密”并不意味着排除这一点。

命令行操作pkcs8 rsa pkey仅通过解密然后重新加密(都需要密码)将加密的私钥从 DER 转换为 PEM,但您可以直接通过以下方式执行此操作:

 printf '%s\n' "-----BEGIN ENCRYPTED PRIVATE KEY-----" >tempkey.pem
 openssl base64 <pk8derfile >>tempkey.pem
 printf '%s\n' "-----END ENCRYPTED PRIVATE KEY-----" >>tempkey.pem
 # variants with sed, awk, perl, etc are possible if better for you 
 # and of course change filename(s) if you like

 openssl dgst -sha256 -sign tempkey.pem <data -out signature 

在 Unix 上的某些 shell(特别是 bash)中,您可以通过以下方式一次性完成此操作

 openssl dgst -sha256 -sign <(printf ... base64 ... printf ...) ...

我不知道你是否将其视为单个命令。

相关内容