Ist es möglich, einen RSA-Schlüssel ohne Passphrase zu generieren?

83

Ich arbeite mit Apache2 und Passenger für ein Rails-Projekt. Ich möchte zu Testzwecken ein selbstsigniertes SSL-Zertifikat erstellen .

sudo openssl rsa -des3 -in server.key -out server.key.new

Wenn ich den obigen Befehl eingebe, heißt es

writing RSA key
Enter PEM pass phrase:

Wenn ich die Passphrase nicht eingebe, erhalte ich den folgenden Fehler

unable to write key
3079317228:error:28069065:lib(40):UI_set_result:result too small:ui_lib.c:869:Yo
u must type in 4 to 1024 characters
3079317228:error:0906406D:PEM routines:PEM_def_callback:problems getting passwor
d:pem_lib.c:111:
3079317228:error:0906906F:PEM routines:PEM_ASN1_write_bio:read key:pem_lib.c:382

Ist es möglich, einen RSA-Schlüssel ohne Angabe zu generieren pass phrase, da ich nicht sicher bin, wie das /etc/init.d/httpdSkript den HTTP-Server ohne menschliches Eingreifen startet (dh, wenn ich eine 4-stellige Passphrase gebe, erwarte ich dies beim Starten des Apache-HTTP-Servers ).

diya
quelle
6
Ihre Befehlszeile fordert Sie opensslauf, einen vorhandenen Schlüssel zu verschlüsseln. Das klingt nach etwas anderem als dem, was Sie wollen.
David Schwartz
Apache httpd kann so konfiguriert werden, dass die Passphrasen für private Schlüssel nicht interaktiv abgerufen werden. Siehe das Dokument für mod_ssl oder in vielen Fällen Kommentare in den bereitgestellten / gepackten Konfigurationsdateien. Dies ist jedoch in der Regel nicht sicherer, als den privaten Schlüssel unverschlüsselt zu lassen, was einfacher ist.
Dave_thompson_085

Antworten:

88

Wenn Sie ein selbstsigniertes Zertifikat generieren, können Sie den Schlüssel und das Zertifikat in einem Befehl wie folgt ausführen:

openssl req  -nodes -new -x509  -keyout server.key -out server.cert

Oh, und was @MadHatter in seiner Antwort über das Weglassen der -des3Flagge gesagt hat .

Tom H
quelle
14
Die Nodes-Direktive ist, warum ich hier bin. (Keine DES-Verschlüsselung des privaten Schlüssels)
jorfus
38

Lassen Sie das -des3Flag weg , das eine Anweisung an openssl ist, server.key.new zu verschlüsseln (was übrigens überhaupt kein neuer Schlüssel ist - es ist genau dasselbe wie server.key, nur mit geänderter / entfernter Passphrase). .

MadHatter
quelle
21

Der openssl reqBefehl aus der Antwort von @Tom H ist korrekt, um ein selbstsigniertes Zertifikat zu erstellen server.cert. einen passwortlosen privaten RSA-Schlüssel für server.key:

openssl req -nodes -new -x509 -keyout server.key -out server.cert

So funktioniert es. Weglassen , -des3wie in der Antwort von @MadHatter ist in diesem Fall nicht genug , um einen privaten Schlüssel ohne Passwort zu erstellen. Es ist genug für diesen Zweck in dem openssl rsa( „einen privaten Schlüssel umwandeln“) Befehl von @MadHatter bezeichnet und dem openssl genrsa( „einen privaten Schlüssel erstellen“) Befehl. Nur nicht für den openssl reqBefehl hier. Wir benötigen zusätzlich -nodes("Keine DES-Verschlüsselung von server.keybitte!").

Tanius
quelle
17

Verwenden Sie den -nodesParameter. Wenn diese Option angegeben ist, wird der private Schlüssel nicht verschlüsselt. Beispiel:

openssl \
    req \
    -nodes \
    -newkey rsa:2048 \
    -keyout www.example.com.key \
    -out www.example.com.csr \
    -subj "/C=DE/ST=NRW/L=Berlin/O=My Inc/OU=DevOps/CN=www.example.com/[email protected]"
panticz.de
quelle
7

Führen Sie es einfach noch einmal durch openssl

Generieren Sie zuerst den Schlüssel mit der Passphrase

dann openssl rsa -in server.key -out server.key

darethas
quelle
Dies funktioniert nicht auf Ubuntu 16.04
Sweetfa
3
Ich habe abgelehnt, weil diese Antwort nicht gefragt wurde. Außerdem erfordert der Befehl eine Eingabe und generiert keinen Schlüssel.
Don
Der Benutzer hat bereits gezeigt, dass er weiß, wie man einen Schlüssel erzeugt. Diese Antwort baut auf diesem Wissen auf, und ich schlage vor, den neu generierten Schlüssel zu übernehmen und erneut openssl durchzugeben. Auf diese Weise wird das Ziel erreicht, nach dem gefragt wurde: Einen Schlüssel ohne Passphrase zu generieren.
Darethas
Funktioniert für mich opensslunter Windows 10 von GitBash. Danke für die Information.
Grün
0

Verwenden Sie den nächsten Befehl, um eine kennwortlose private Schlüsseldatei ohne Verschlüsselung zu generieren . Der letzte Parameter ist die Größe des privaten Schlüssels.

openssl genrsa -out my-passless-private.key 4096
nix
quelle
1
Dies ist NICHT ohne Passwort. Es ist vollständig und vollständig passwortgeschützt.
Dave_thompson_085
Ich habe mit der Position der Parameter experimentiert. Es ist jetzt OK. Ich habe die Stellen der letzten beiden Parameter geändert und den Befehl getestet.
nichts
Jetzt wird eine unverschlüsselte Datei erstellt. Optionen nach dem (einzigen) Positionsargument werden ignoriert. Sieh Dir die Akte an. Es ist nicht verschlüsselt. Ersetzen 4096 -des3durch 4096 -sillywombatund es funktioniert immer noch und erzeugt das gleiche Format, immer noch unverschlüsselt (aber natürlich einen anderen Schlüsselwert). Es gibt keine Möglichkeit, eine kennwortlos verschlüsselte private Schlüsseldatei zu haben, und vor sechs Jahren wurden die richtigen Lösungen für eine kennwortlos unverschlüsselte Datei angegeben.
Dave_thompson_085
Du hast recht. @ dave_thompson_085. Der letzte Parameter hat keine Auswirkungen auf den Befehl. Ich habe meine Antwort aktualisiert. Es werden keine verschlüsselten base64-verschlüsselten und nicht kennwortgeschützten privaten Schlüsseldateien generiert.
nichts