Erstens - was passiert, wenn ich keine Passphrase gebe? Wird eine Art Pseudozufalls-Phrase verwendet? Ich bin nur auf der Suche nach etwas "Gut genug", um gelegentliche Hacker in Schach zu halten.
Zweitens: Wie generiere ich ein Schlüsselpaar aus der Befehlszeile und gebe die Passphrase in der Befehlszeile ein?
Ich habe es endlich mit diesen Befehlen zum Laufen gebracht, mit exec (), dessen Verwendung im Allgemeinen als nicht sicher angesehen wird, da es besser ist, die PassPhrase in einer Datei anzugeben. Ich kann dieses Risiko akzeptieren, da ich sicher bin, dass PHP immer nur auf meinem PC ausgeführt wird (auf dem Windows ausgeführt wird und kein PS-Befehl vorhanden ist).
openssl genrsa -aes128 -passout pass:foobar -out privkey.pem 2048
openssl rsa -in privkey.pem -passin pass:foobar -pubout -out privkey.pub
Vielen vielen Dank an @caf, ohne den dies nicht möglich gewesen wäre.
Nur ein Bedauern - egal wie viel ich google, niemand kann scheinen, openssl_pkey_new()
mit Xampp unter Windows zu arbeiten (was der richtige Weg ist, um ein Schlüsselpaar zu generieren)
openssl_pkey_new()
... der "richtige" Weg, um ein Schlüsselpaar zu generieren?ps
aber seit Vista hat eswmic process get commandline
Antworten:
Wenn Sie keine Passphrase verwenden, wird der private Schlüssel nicht mit einer symmetrischen Verschlüsselung verschlüsselt - er wird völlig ungeschützt ausgegeben.
Sie können ein Schlüsselpaar generieren, indem Sie das Kennwort in der Befehlszeile mithilfe eines Aufrufs wie (in diesem Fall lautet das Kennwort
foobar
) eingeben :Beachten Sie jedoch, dass diese Passphrase von jedem anderen Prozess erfasst werden kann, der zu diesem Zeitpunkt auf dem Computer ausgeführt wird, da Befehlszeilenargumente im Allgemeinen für alle Prozesse sichtbar sind.
Eine bessere Alternative besteht darin, die Passphrase in eine temporäre Datei zu schreiben, die mit Dateiberechtigungen geschützt ist, und Folgendes anzugeben:
Oder geben Sie die Passphrase bei der Standardeingabe ein:
Sie können auch eine Named Pipe mit der
file:
Option oder einen Dateideskriptor verwenden.Um dann den passenden öffentlichen Schlüssel zu erhalten, müssen Sie
openssl rsa
dieselbe Passphrase mit dem-passin
Parameter angeben, der zum Verschlüsseln des privaten Schlüssels verwendet wurde:(Dies erwartet den verschlüsselten privaten Schlüssel bei der Standardeingabe - Sie können ihn stattdessen mit aus einer Datei lesen
-in <file>
.)Beispiel für die Erstellung eines 3072-Bit-Paares aus privatem und öffentlichem Schlüssel in Dateien, wobei das private Schlüsselpaar mit einem Kennwort verschlüsselt ist
foobar
:quelle
openssl
Befehl gibt den öffentlichen Schlüssel aus, der dem angegebenen privaten Schlüssel entspricht. Öffentliche Schlüssel sind nicht verschlüsselt (sie sind nicht geheim), daher-passout
macht die Verwendung keinen Sinn. Sie möchten-passin
dort wahrscheinlich die Passphrase angeben, mit der der private Schlüssel im ersten Schritt verschlüsselt wurde. Ich habe der Antwort auch etwas hinzugefügt.openssl genrsa 2048 -aes128 -passout pass:foobar -out privkey.pem
mache das aus irgendeinem Grund nicht. Können Sie mir bitte zwei Befehle geben - einen zum Generieren des privaten Schlüssels in eine Datei und einen zweiten zum Generieren des öffentlichen Schlüssels (auch in einer Datei)? Es tut-out
Parameter nach dem kommt2048
- wirklich, das sollte das Letzte in der Befehlszeile sein (ich habe meine Antwort als solche aktualisiert). Siehe das letzte Beispiel, ich denke, das ist was du willst. AES-128 wird von jemandem, dem ich vertraue , gegenüber AES-256 empfohlen.genrsa
wurde durchgenpkey
& ersetzt, wenn es manuell in einem Terminal ausgeführt wird, werden Sie zur Eingabe eines Kennworts aufgefordert:Wenn der Befehl jedoch über ein Skript ausgeführt wird, werden Sie nicht nach einem Kennwort gefragt. Um zu vermeiden, dass das Kennwort als Prozess angezeigt werden kann, verwenden Sie eine Funktion in einem
shell
Skript:quelle