openssl命令行来验证签名

时间:2011-02-28 09:53:56

标签: command-line ubuntu openssl digital-signature

您好我已生成密钥对并使用私钥生成签名。

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

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

4 个答案:

答案 0 :(得分:53)

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

你可以这样使用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. 创建文档摘要以验证(收件人)
  5. 使用公钥(收件人)
  6. 验证签名

    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
    

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

答案 1 :(得分:3)

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

答案 2 :(得分: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 :(得分:1)

您可以查看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