我有一个 pkcs#8 加密密钥。我想使用此密钥对文件进行签名,而无需事先解密。我想要实现的是使用单个 openssl 命令完成所有过程。
像这样的东西:
openssl dgst -sha256 -sign pkcs8 -inform DER -in private.key -out
sign_this.txt.signed sign.txt
该命令将提示输入密码,然后生成签名。
是否可以使用 openssl 嵌套命令?请解释正确的操作方法。
谢谢。
答案1
openssl dgst -sign
with -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 ...) ...
我不知道你是否将其视为单个命令。