openssl命令行来validation签名

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

openssl rsautl -sign -in helloworld.txt -inkey aa.pem -out sig 

但是我无法用我的公钥validation签名:

 openssl rsautl -verify -in helloworld.txt -inkey aa.pub -sigfile sig 

我知道那里-sigfile已被弃用。 还有一些来自openssl.org的在线文档是错误的。

我应该用什么命令来validation我的公钥的签名?

我发现你的问题的两个解决方案。

你可以这样使用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 

你可以检查文件的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