我正在研究使用OpenSSL签名然后验证消息签名的想法。我已经找到了签名部分,但我仍然无法验证相同的签名。
假设我在一个名为plaintext.txt的文件中有一些明文。我在signature.txt中有明文签名。此明文使用私有RSA密钥签名。我有证书,其中包含与该私钥一起使用的公钥。我相信有一个OpenSSL命令可以让我在不提取公钥的情况下验证该签名是一个单独的步骤。这是我正在尝试的:
openssl sha1 -verify -inkey cert.pem -certin -signature signature.txt plaintext
但我在命令行上收到此错误:
无需验证签名:使用-signature选项
答案 0 :(得分:3)
假设您已将PEM编码的X.509签名证书存储在文件" signer.cer"和你的PEM编码存储在文件" signer.key"中的PKCS#1私钥。
您可以使用OpenSSL命令行实用程序对文件" plaintext.txt"进行签名。并将存储在PEM编码的PKCS#7结构中的签名输出到文件" signature.p7s":
openssl smime -sign -binary -in plaintext.txt -signer signer.cer -inkey signer.key -outform PEM -out signature.p7s
您可以使用以下命令验证签名:
openssl smime -verify -binary -inform PEM -in signature.p7s -content plaintext.txt -certfile signer.cer -nointern -noverify > /dev/null
如果您使用的是Windows,则只需将/dev/null
替换为nul
。
有关各个选项的详细信息,请参阅OpenSSL SMIME module manual。