34 Stimmen

Openssl Befehlszeile zur Überprüfung der Signatur

Hallo, ich habe ein Schlüsselpaar generiert und den privaten Schlüssel verwendet, um eine Signatur zu erzeugen.

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

Ich kann jedoch die Signatur nicht mit meinem öffentlichen Schlüssel überprüfen:

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

Ich weiß, dass -sigfile veraltet ist und einige der Online-Dokumentationen von openssl.org falsch sind.

Welchen Befehl sollte ich verwenden, um die Signatur mit meinem öffentlichen Schlüssel zu überprüfen?

2 Stimmen

Dein Ansatz ist korrekt, mir fehlte der Digest-Teil. Ich versuchte, das gesamte Dokument zu signieren! Vielen Dank für deine Hilfe! Ich habe auch einige nützliche Links gefunden, die ich zum Erstellen der X.509-CA verwendet habe: sandbox.rulemaker.net/ngps/m2/howto.ca.html octaldream.com/~scottm/talks/ssl/opensslca.html

77voto

M'vy Punkte 5558

Ich habe zwei Lösungen für dein Problem gefunden.

Du kannst rsautl auf diese Weise verwenden: (mit privatem Schlüssel: my.key und öffentlichem Schlüssel my-pub.pem)

$ openssl rsautl -sign -inkey my.key -out in.txt.rsa -in in.txt
Geben Sie den Passwort für my.key ein:
$ openssl rsautl -verify -inkey my-pub.pem -in in.txt.rsa -pubin
Bonjour

Bei dieser Methode wird das gesamte Dokument innerhalb der Signaturdatei eingeschlossen und vom abschließenden Befehl ausgegeben.

Aber in meinem Fall sagt mein Zertifikat: Signaturalgorithmus: sha1WithRSAEncryption. Daher empfehle ich dir, den Standardweg zum Signieren von Dokumenten in 4 Schritten zu verwenden: (Diese Methode wird für alle asymmetrischen elektronischen Signaturen verwendet, um die Signaturdatei und/oder die CPU-Auslastung nicht zu überlasten)

  1. Erstellen eines Digests des zu signierenden Dokuments (Sender)
  2. Signieren des Digests mit privatem Schlüssel (Sender)
  3. Erstellen eines Digests des zu überprüfenden Dokuments (Empfänger)
  4. Überprüfen der Signatur mit öffentlichem Schlüssel (Empfänger)

OpenSSL führt dies in zwei Schritten aus:

$ openssl dgst -sha256 -sign my.key -out in.txt.sha256 in.txt 
Geben Sie das Passwort für my.key ein:
$ openssl dgst -sha256 -verify my-pub.pem -signature in.txt.sha256 in.txt  
Verifizierung erfolgreich

Bei dieser Methode sendest du dem Empfänger zwei Dokumente: die Originaldatei Klartext und die Signaturdatei signierter Digest. Achtung: Die Signaturdatei enthält nicht das gesamte Dokument! Nur den Digest.

5voto

jessn Punkte 111

Überprüfen mit öffentlichem Schlüssel:

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

4voto

Sheng Yu Punkte 31

Ihre Methode ist grundsätzlich korrekt. Was Ihnen fehlt, ist rsautl mitzuteilen, dass die Eingabe-Key-Datei eine öffentliche Schlüsseldatei ist, indem Sie "-pubin" hinzufügen. Der Eintrag "-pubin" im OpenSSL rsautl-Dokument ist nicht korrekt " -pubin die Eingabedatei ist ein RSA öffentlicher Schlüssel. " sollte sein " -pubin die Eingabe-Key-Datei ist ein RSA öffentlicher Schlüssel. " Da die Eingabedatei eine Signaturdatei sein sollte.

1voto

vaugham Punkte 1793

Sie können die Dokumentation für rsautl überprüfen

In Ihrem Beispiel würde dies folgendes ergeben:

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

Ich habe meinen vollständigen Verlauf unten kopiert:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X