当前位置: 首页>>技术问答>>正文


openssl命令行来验证签名

, , ,

问题描述

嗨,我已生成密钥对,并使用私钥生成签名。

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的一些在线文档是错误的。

什么命令我应该使用我的公钥来验证信号?

最佳解决思路

我找到了两个问题的解决方案。

您可以这样使用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使用过度收费)

  1. 创建要签名的文档摘要(发件人)

  2. 使用私钥(发件人)签名摘要

  3. 创建文档摘要以验证(收件人)

  4. 使用公钥验证签名(收件人)

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

使用此方法,您向收件人发送了两个文件:原始文件纯文本,签名文件签名摘要。注意:签名文件不包含整个文档!只有摘要。

次佳解决思路

你的方法基本上是正确的。你想念的是通过添加”-pubin”告诉rsautl inut密钥文件文件是公钥。项目”-pubin” OpenSSL rsautl文件不准确“-pubin输入文件是RSA公钥。”应该是“-pubin输入密钥文件是一个RSA公钥。”由于输入文件应该是签名文件。

第三种解决思路

使用公钥验证

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/6701.html,未经允许,请勿转载。