openssl命令行验证签名
Posted
技术标签:
【中文标题】openssl命令行验证签名【英文标题】:openssl command line to verify the signature 【发布时间】:2011-07-05 15:42:55 【问题描述】:您好,我已生成密钥对并使用私钥生成签名。
openssl rsautl -sign -in helloworld.txt -inkey aa.pem -out sig
但是我无法使用我的公钥验证签名:
openssl rsautl -verify -in helloworld.txt -inkey aa.pub -sigfile sig
我知道 -sigfile 已被弃用。来自 openssl.org 的一些在线文档是错误的。
我应该使用什么命令来使用我的公钥验证签名?
【问题讨论】:
你的方法是正确的,我缺少摘要部分,试图签署整个文件!谢谢你的帮助!我还发现了一些有用的链接,我用它来做 X.509 CA 的事情:sandbox.rulemaker.net/ngps/m2/howto.ca.htmloctaldream.com/~scottm/talks/ssl/opensslca.html 【参考方案1】:我为您的问题找到了两种解决方案。
您可以这样使用 rsautl:(使用私钥:my.key 和公钥 my-pub.pem)
$ openssl rsautl -sign -inkey my.key -out in.txt.rsa -in in.txt
Enter pass phrase for my.key:
$ openssl rsautl -verify -inkey my-pub.pem -in in.txt.rsa -pubin
Bonjour
使用此方法,所有文档都包含在签名文件中,并由最终命令输出。
但就我而言,我的证书显示:签名算法:sha1WithRSAEncryption。 因此,我建议您分 4 步使用标准的文档签名方式:(此方法用于所有非对称电子签名,以免对签名文件和/或 CPU 使用率过高)
-
创建要签名的文档摘要(发件人)
用私钥签署摘要(发件人)
创建文档摘要以验证(收件人)
使用公钥验证签名(收件人)
OpenSSL 分两步完成:
$ openssl dgst -sha256 -sign my.key -out in.txt.sha256 in.txt
Enter pass phrase for my.key:
$ openssl dgst -sha256 -verify my-pub.pem -signature in.txt.sha256 in.txt
Verified OK
使用此方法,您向收件人发送了两个文档:原始文件纯文本,签名文件签名摘要。注意:签名文件不包括整个文件!只有摘要。
【讨论】:
当使用这个命令行来验证给定数据的签名时,我得到以下错误输出:Verification failure\n Error in dgst
这意味着验证失败是因为错误还是因为文件没有匹配正确吗?
签名解码失败并没有真正的原因,所以我会说不匹配。
你知道签名的格式是否重要吗?我认为.sign
的格式没有处理
你真的应该看看文档。签名文件是文本文件,扩展名无关紧要。是的,文件内容有一个格式,但不看它,我不能说它是否可以。首先使用我放在这里的命令和一个随机文本文件对其进行测试,它应该可以工作,然后测试您自己的文件。【参考方案2】:
使用公钥验证
echo "plop" > "helloworld.txt"
openssl rsautl -sign -in hello.txt -inkey private.pem -out sig
openssl rsautl -verify -in sig -inkey public.pem -pubin
> plop
【讨论】:
【参考方案3】:你的方法基本正确。您错过的是通过添加“-pubin”告诉 rsautl inut 密钥文件文件是公钥。 项目“-pubin”OpenSSL rsautl 文档不准确 " -pubin 输入文件是一个 RSA 公钥。 " 应该 " -pubin 输入密钥文件是 RSA 公钥。 " 由于输入文件应该是签名文件。
【讨论】:
【参考方案4】:您可以查看rsautl 的文档
在您的示例中,这将给出:
openssl rsautl -verify -in sig -inkey aa.pem
我在下面复制了我的完整历史记录:
echo "plop" > "helloworld.txt"
openssl rsautl -sign -in helloworld.txt -inkey aa.pem -out sig
openssl rsautl -verify -in sig -inkey aa.pem
> plop
【讨论】:
您好,谢谢,我确实阅读了手册,但我需要使用公钥来验证。不是私钥。 使用 -pubin 并将公钥作为参数传递给 -inkey以上是关于openssl命令行验证签名的主要内容,如果未能解决你的问题,请参考以下文章
Openssl 命令行无法验证之前创建的分离的 smime 签名
sh 笔记:OpenSSL生成「自签名」证书,配置Nodejs本地HTTPS服务 - 3.生成.csr文件命令行中的提示内容