openssl command line to verify the signature

时间秒杀一切 提交于 2019-11-28 21:09:01

问题


Hi I have generated a key pair and used the private key to generate a signature.

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

However I am unable to verify the signature with my public key:

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

I know there -sigfile is deprecated. and some of the online doc from openssl.org is wrong.

Whats the command I should use to verify the sig with my public key?


回答1:


I found two solutions to your problem.

You can use rsautl that way: (with private key: my.key and public 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

With this method, all the document is included within the signature file and is outputted by the final command.

But in my case, my certificate says: Signature Algorithm: sha1WithRSAEncryption. So I would recommend you to use the standard way of signing document in 4 steps: (This method is used for all asymmetric electronic signatures in order not to overcharge the signature file and/or CPU usage)

  1. Create digest of document to sign (sender)
  2. Sign digest with private key (sender)
  3. Create digest of document to verify (recipient)
  4. Verify signature with public key (recipient)

OpenSSL does this in two steps:

$ 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

With this method, you sent the recipient two documents: the original file plain text, the signature file signed digest. Attention: the signature file does not include the whole document! Only the digest.




回答2:


your method is basically correct. What you miss is to tell rsautl that the inut key file file is a public key by add "-pubin". The item "-pubin" OpenSSL rsautl document isn't accurate " -pubin the input file is an RSA public key. " should be " -pubin the input key file is an RSA public key. " Since the input file should be a signature file.




回答3:


Verify using public key

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



回答4:


You can check the doc for rsautl

In your example, this would give :

openssl rsautl -verify -in sig -inkey aa.pem

I have copied my full history below :

echo "plop" > "helloworld.txt"
openssl rsautl -sign -in helloworld.txt -inkey aa.pem -out sig
openssl rsautl -verify -in sig -inkey aa.pem
> plop


来源:https://stackoverflow.com/questions/5140425/openssl-command-line-to-verify-the-signature

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!