Stack Overflow ist eine Site für Programmier- und Entwicklungsfragen. Diese Frage scheint nicht zum Thema zu gehören, da es nicht um Programmierung oder Entwicklung geht. Weitere Informationen zu Themen finden Sie hier in der Hilfe. Vielleicht ist Super User oder Unix & Linux Stack Exchange ein besserer Ort, um zu fragen.
JWW
20
@jww Ich bin anderer Meinung, openssl ist ein Low-Level-Toolkit und Entwickler müssen sich ständig damit auseinandersetzen. Die Zeile ist ziemlich verschwommen, und es wäre ein großer Verlust, hier keine offenen Fragen zuzulassen, nur weil es sich eher um eine CLI als um die C lib handelt.
GTD
@gtd - das ist eine häufige Beschwerde, wenn ich diese kennzeichne. Siehe auch Wo poste ich Fragen zu Dev Ops? . (Aber ich glaube, ich habe hier einen Fehler gemacht - die Frage stammt aus dem Jahr 2011, und ich glaube, sie war damals thematisch. Ich mag es nicht, für die Änderung der Richtlinien zu bestrafen.)
JWW
2
@gtd - re: "openssl ist ein Low-Level-Toolkit, mit dem sich Entwickler ständig befassen müssen." - Dafür sind Super User oder Unix & Linux Stack Exchange gedacht . "... es wäre ein großer Verlust, openssl-Fragen nicht zuzulassen ..." - openssl C-Programmierfragen sind hier immer willkommen. Der Verlust der nicht programmierenden Fragen wird nicht übersehen, da Stack Overflow eine Programmier- und Entwicklungssite ist. Es gibt andere Websites, auf die Sie zugreifen können, wenn Sie nicht wissen, wie ein Befehl verwendet wird.
JWW
Vielen Dank für den Link, ich werde meine Antwort dort veröffentlichen, da ich denke, dass dies ein sehr wichtiges Thema ist.
GTD
Antworten:
122
Die Option -nodesist nicht das englische Wort "node", sondern "no DES". Als Argument bedeutet dies, dass OpenSSL den privaten Schlüssel in einer PKCS # 12- Datei nicht verschlüsselt .
Um den privaten Schlüssel zu verschlüsseln, können Sie ihn weglassen -nodesund Ihr Schlüssel wird mit 3DES-CBC verschlüsselt. Um den Schlüssel zu verschlüsseln, fordert OpenSSL Sie zur Eingabe eines Kennworts auf und verwendet dieses Kennwort, um mithilfe der Schlüsselableitungsfunktion EVP_BytesToKey einen Verschlüsselungsschlüssel zu generieren .
Abhängig von Ihrer OpenSSL-Version und den kompilierten Optionen können Sie diese Optionen möglicherweise anstelle von -nodes:
-des encrypt private keys with DES
-des3 encrypt private keys with triple DES (default)
-idea encrypt private keys with idea
-seed encrypt private keys with seed
-aes128, -aes192, -aes256
encrypt PEM output with cbc aes
-camellia128, -camellia192, -camellia256
encrypt PEM output with cbc camellia
Letztendlich ruft OpenSSL auf Bibliotheksebene die Funktion PEM_write_bio_PrivateKey mit dem von Ihnen gewählten Verschlüsselungsalgorithmus (oder dessen Fehlen) auf.
@Flimm: Mit einem Passwort geschützt, ja. Das Kennwort generiert einen Verschlüsselungsschlüssel mithilfe eines Schlüsselableitungsalgorithmus, und die Verschlüsselung erfolgt mit dem Schlüssel und nicht mit dem Kennwort. Die einzige Möglichkeit, den verschlüsselten Schlüssel zu verwenden, besteht darin, ihn zuerst zu entschlüsseln. Dazu müssen Sie das Kennwort kennen, mit dem er verschlüsselt wurde, um denselben Schlüssel zu generieren.
indiv
Warum sollte ich meine private Schlüsseldatei verschlüsseln? diese werden niemandem veröffentlicht, daher der Name. Oder liege ich falsch?
Phil294
1
@Blauhirn: Sie würden Ihre private Schlüsseldatei aus demselben Grund verschlüsseln, aus dem Sie jede Datei verschlüsseln würden: Sie möchten nicht, dass jemand, der eine Kopie erhält, sie lesen oder verwenden kann. Ob Sie den privaten Schlüssel verschlüsseln sollten, hängt von der Bedeutung des Schlüssels und Ihrem Bedrohungsmodell ab.
Indiv
12
edit: nginx v1.7.3 hat eine zusätzliche ssl_password_file Richtlinie , die jedes Passwort auf den Kontext versucht Paßphrasen aus einer bestimmten Datei liest verschlüsselten private.key
indiv ist richtig, dass das -nodesArgument bedeutet, dass OpenSSL UNencrypted private.key erstellt ; Andernfalls wird eine Passphrase-Eingabeaufforderung zum Erstellen von encrypted-private.key angezeigt . siehe req , pkcs12 , CA.pl.
Ich bin jedoch der Meinung, dass der Zweck (für Programmierer) darin besteht, dass:
HTTP-Server (z. B. Apache , Nginx ) können encrypted-private.key ohne Passphrase →
nicht lesen
Option A - muss bei jedem Start des HTTP-Servers eine Passphrase für encrypted-private.key bereitstellen
Option B - Angabe ssl_password_file file.keys;in http { }oder server { }Kontext. [ ref ]
Option C - Verwenden Sie diese Option -nodes, um private.key ohne Verschlüsselung zu erstellen
nützlich: Sperre nach unten private.key
{HTTP-Server zur SSL-Cert- Gruppe hinzufügen }
sudo chown root:ssl-cert private.key- ch ange eigenen ihn von private.key zu root Benutzern, ssl-cert Gruppe
sudo chmod 640 private.key- Ändern Sie die Zugriffsberechtigungen von private.key in Eigentümer R / W, Gruppe R.
Jetzt sollte der HTTP-Server UNencrypted private.key starten und lesen können
Option A.
Eine stärkere Sicherheit muss jedoch beim Neustart des Servers die Passphrase für encrypted-private.key manuell eingeben
Option B.
mittlere Sicherheit und wahrscheinlich gute Balance zwischen Klimaanlage
Option C.
schwächere Sicherheit, jedoch NICHT zur Eingabe der unverschlüsselten Passphrase private.key aufgefordert
Nginx kann verschlüsselte private Schlüssel seit Version 1.7.3 lesen, siehe: nginx.org/en/docs/http/…
5lava
2
Was ist der Zweck, Nginx und seine Versionen in die Diskussion einzubeziehen? Außerdem bieten (B) und (C) eine gleichwertige Sicherheit (nämlich Dateisystem-ACLs). Das Problem, das Sie beschreiben, ist das Problem der unbeaufsichtigten Schlüsselspeicherung , und es ist ein Problem ohne Lösung. Siehe Gutmanns Engineering Security- Buch.
JWW
@jww die Frage fragt "was ist der Zweck ...". Ich habe den Kontext der Frage (QnA für Programmierer) betrachtet, den ich über "Ich glaube jedoch, dass der Zweck (für Programmierer) darin besteht, Folgendes anzugeben" angegeben habe. speziell in Bezug auf Sicherheit .. kann eine Diskussion für security.stackexchange.com sein
Antworten:
Die Option
-nodes
ist nicht das englische Wort "node", sondern "no DES". Als Argument bedeutet dies, dass OpenSSL den privaten Schlüssel in einer PKCS # 12- Datei nicht verschlüsselt .Um den privaten Schlüssel zu verschlüsseln, können Sie ihn weglassen
-nodes
und Ihr Schlüssel wird mit 3DES-CBC verschlüsselt. Um den Schlüssel zu verschlüsseln, fordert OpenSSL Sie zur Eingabe eines Kennworts auf und verwendet dieses Kennwort, um mithilfe der Schlüsselableitungsfunktion EVP_BytesToKey einen Verschlüsselungsschlüssel zu generieren .Abhängig von Ihrer OpenSSL-Version und den kompilierten Optionen können Sie diese Optionen möglicherweise anstelle von
-nodes
:Letztendlich ruft OpenSSL auf Bibliotheksebene die Funktion PEM_write_bio_PrivateKey mit dem von Ihnen gewählten Verschlüsselungsalgorithmus (oder dessen Fehlen) auf.
quelle
edit: nginx v1.7.3 hat eine zusätzliche ssl_password_file Richtlinie , die jedes Passwort auf den Kontext versucht Paßphrasen aus einer bestimmten Datei liest verschlüsselten private.key
indiv ist richtig, dass das
-nodes
Argument bedeutet, dass OpenSSL UNencrypted private.key erstellt ; Andernfalls wird eine Passphrase-Eingabeaufforderung zum Erstellen von encrypted-private.key angezeigt . siehe req , pkcs12 , CA.pl.Ich bin jedoch der Meinung, dass der Zweck (für Programmierer) darin besteht, dass:
ssl_password_file file.keys;
inhttp { }
oderserver { }
Kontext. [ ref ]-nodes
, um private.key ohne Verschlüsselung zu erstellennützlich: Sperre nach unten private.key
sudo chown root:ssl-cert private.key
- ch ange eigenen ihn von private.key zu root Benutzern, ssl-cert Gruppesudo chmod 640 private.key
- Ändern Sie die Zugriffsberechtigungen von private.key in Eigentümer R / W, Gruppe R.Option A.
Eine stärkere Sicherheit muss jedoch beim Neustart des Servers die Passphrase für encrypted-private.key manuell eingeben
Option B.
mittlere Sicherheit und wahrscheinlich gute Balance zwischen Klimaanlage
Option C.
schwächere Sicherheit, jedoch NICHT zur Eingabe der unverschlüsselten Passphrase private.key aufgefordert
quelle