2011-02-28 89 views
18

您好我已经生成了一个密钥对并使用私钥生成签名。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的在线文档是错误的。

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

+0

任何运气的答案? –

+2

你的方法是正确的,我错过了消化一部分,试图签下全文档!感谢您的帮助!我还发现了一些有用的链接,我用它来做X.509 CA的事情:http://sandbox.rulemaker.net/ngps/m2/howto.ca.html http:// octaldream .com /〜scottm/talks/ssl/opensslca.html – c2h2

回答

47

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

您可以使用rsautl那样:(用私钥:my.key和公钥我-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. 验证签名W¯¯第i个公钥(收件人)

的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 

使用这种方法,您发送的收件人两个文件:原始文件明文,签名文件签署摘要。注意:签名文件不包含整个文档!只有摘要。

+0

好的,签署摘要是一个好方法! – c2h2

+0

使用此命令行验证给定数据的签名时,会得到以下错误输出:'验证失败\ n dgst中的错误是否意味着验证失败,原因是错误或文件不匹配正确吗? – Badda

+0

签名解码没有真正的原因失败,所以我会说失配。 –

0

您可以检查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 
+0

嗨,谢谢,我没看过手册,但是我需要用公钥来验证,而不是私钥。 – c2h2

+2

使用-pubin并将公钥作为参数为-inkey –

3

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

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 
相关问题