Verwendung des Passwort-Arguments in der Befehlszeile für die Entschlüsselung von openssl

54

Daher ist es nicht die sicherste Methode, ein Kennwort über ein Befehlszeilenargument zu übergeben. Trotzdem hat mich die Dokumentation zu openssl verwirrt, wie man ein Passwortargument an den openssl-Befehl übergibt.

Folgendes versuche ich zu tun

openssl aes-256-cbc -in some_file.enc -out some_file.unenc -d

Dies fordert dann zur Entschlüsselung des Pass-Schlüssels auf. Ich durchsuchte die openssl-Dokumente und die Interwebs, um die Antwort zu finden, wenn ich dem Befehl einfach das Kennwort geben wollte, ohne zu versuchen, das Kennwort für die Datei zu wiederholen. Ich habe versucht, -pass:somepasswordund -pass somepasswordbeide mit und ohne Anführungszeichen ohne Erfolg hinzuzufügen .

Ich fand endlich die Antwort heraus und sah in einigen anderen Foren, dass die Leute ähnliche Fragen hatten, also dachte ich, ich würde meine Frage und Antwort hier für die Community posten.

hinweis: ich benutze openssl version 0.9.8y

David Sulpy
quelle

Antworten:

108

Die Dokumentation war mir nicht sehr klar, aber sie hatte die Antwort, die Herausforderung bestand darin, kein Beispiel zu sehen.

So geht's:

openssl aes-256-cbc -in some_file.enc -out some_file.unenc -d -pass pass:somepassword

Beachten Sie, dass auf die Befehlszeilensyntax immer -passein Leerzeichen und dann die Art der von Ihnen angegebenen Passphrase folgt, dh pass:für eine einfache Passphrase und dann die tatsächliche Passphrase nach dem Doppelpunkt ohne Leerzeichen.

Darüber hinaus wird in der Dokumentation angegeben, dass Sie andere Passphrasenquellen bereitstellen können, indem Sie wie folgt vorgehen:

  • env:somevar um das Passwort von einer Umgebungsvariablen zu erhalten
  • file:somepathname um das Kennwort aus der ersten Zeile der Datei am Speicherort abzurufen pathname
  • fd:number um das Passwort aus der Dateideskriptornummer zu erhalten.
  • stdin von der Standardeingabe zu lesen

Nun, da ich diese Frage und Antwort geschrieben habe, scheint alles offensichtlich. Aber es hat sicherlich einige Zeit gedauert, bis ich herausgefunden hatte, dass es andere Zeit gekostet hat, also kann dies hoffentlich diese Zeit verkürzen und für andere schneller antworten! :)

In OpenSSL 1.0.1e ist -passinoder der zu verwendende Parameter -passout. Also dieses Beispiel wäre:

openssl aes-256-cbc -in some_file.enc -out some_file.unenc -d -passin pass:somepassword

David Sulpy
quelle
Was ist der Unterschied zwischen passin oder passout? - Ha! Hab es einfach nachgeschlagen, Standard vs. Standard natürlich!
DTMLAND
Beachten Sie, dass sich die Dokumentation für Kennwortoptionen, die für die meisten openssl Befehle (nicht nur enc) gelten, in der Manpage für openssl (1) befindet, ebenfalls im Internet unter 'OPTIONEN'. Aber ich glaube nicht, dass dein letztes bisschen von -passin / out ist; andere openssl Befehle wie rsa dsa ec pkey pkcs8 pkcs12 req cadiejenigen , verwenden aber in jeder Version Ich habe einschließlich 1.0.1e direkt von Upstream - Quelle gebaut gesehen encVerwendungen -passoder -k -kfileals dokumentiert (auf der encMan - Page).
Dave_thompson_085
Wie wäre es mit dem openssl dgstBefehl? Wie geben Sie die Passphrase dafür in der Befehlszeile ein?
frakman1
4
btw -passinwird verwendet, um ein Kennwort für das eingegebene Zertifikat bereitzustellen, und -passoutwird für das neu generierte Zertifikat verwendet
drmad
7

Ich habe -passinund verwendet -passout, um Passwörter für beide Dateien festzulegen:

openssl pkcs12 -in voip.p12 -out voip.pem -passin pass:123 -passout pass:321

wo 123und 321sind Passwort

Mikhailo Karpenko
quelle
5

In diesem Moment wird Ubuntu 14.04 LTS mit openssl 1.0.1f-1ubuntu2.16 ausgeliefert

In dieser Version ist der zu verwendende Parameter -k

Beispiel:

openssl enc -aes-256-cbc -e -in some_file.unenc -out some_file.enc -k somepassword
Javier
quelle
1
In Ihrem Beispiel ist -k eine Option, die für den Befehl openssl 'enc' verfügbar ist (try man enc). Dies ist keine allgemeine Option. Wenn Sie sich das ansehen, werden man opensslSie unter der Überschrift "Passphrasenoptionen" sehen, welche allgemeinen Optionen es gibt. pass:password, env:var, file:pathname, fd:numberOder stdin, wie in einer früheren Antwort erwähnt.
Sibaz