web-dev-qa-db-fra.com

Ouvre la ligne de commande pour vérifier la signature

Salut, j'ai généré une paire de clés et utilisé la clé privée pour générer une signature.

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

Cependant je ne peux pas vérifier la signature avec ma clé publique:

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

Je sais que -sigfile est obsolète. et une partie du document en ligne de openssl.org est erronée.

Quelle est la commande que je dois utiliser pour vérifier la signature avec ma clé publique?

22
c2h2

J'ai trouvé deux solutions à votre problème.

Vous pouvez utiliser rsautl de cette façon: (avec clé privée: my.key et clé publique 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

Avec cette méthode, tout le document est inclus dans le fichier de signature et est émis par la commande finale.

Mais dans mon cas, mon certificat dit: Algorithme de signature: sha1WithRSAEncryption. Je vous recommande donc d'utiliser la méthode standard de signature de document en 4 étapes: (Cette méthode est utilisée pour toutes les signatures électroniques asymétriques afin de ne pas surcharger le fichier de signature et/ou l'utilisation du CPU)

  1. Créer un résumé du document à signer (expéditeur)
  2. Signer le résumé avec la clé privée (expéditeur)
  3. Créer un résumé du document pour vérifier (destinataire)
  4. Vérifiez la signature avec la clé publique (destinataire)

OpenSSL le fait en deux étapes:

$ 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

Avec cette méthode, vous avez envoyé au destinataire deux documents: le fichier d'origine texte brut, le fichier de signature digest signé. Attention: le fichier de signature ne comprend pas tout le document! Seul le condensé.

55
M'vy

votre méthode est fondamentalement correcte. Ce qui vous manque, c'est de dire à rsautl que le fichier de fichier de clés inutiles est une clé publique en ajoutant "-pubin". L'élément "-pubin" Le document rsautl OpenSSL n'est pas précis "-pubin le fichier d'entrée est une clé publique RSA." Devrait être "-pubin le fichier de clé d'entrée est une clé publique RSA." Puisque le fichier d'entrée doit être une signature fichier.

3
Sheng Yu

Vérifier à l'aide de la clé publique

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
2
jessn

Vous pouvez consulter le document pour rsautl

Dans votre exemple, cela donnerait:

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

J'ai copié mon historique complet ci-dessous:

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