SSL-Zertifikat nicht interaktiv erstellen [geschlossen]

28

Ich möchte stillschweigend, nicht interaktiv, ein SSL-Zertifikat erstellen. Dh, ohne zur Eingabe von Daten aufgefordert zu werden.

Die normale Art und Weise, wie ich das Zertifikat erstelle, wäre:

openssl req -x509 -nodes -days 7300 -newkey rsa:2048 \
    -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem 

Ich habe folgendes versucht:

openssl genrsa -out server.key 2048
touch openssl.cnf

cat >> openssl.cnf <<EOF
[ req ]
prompt = no
distinguished_name = req_distinguished_name

[ req_distinguished_name ]
C = GB
ST = Test State
L = Test Locality
O = Org Name
OU = Org Unit Name
CN = Common Name
emailAddress = test@email.com
EOF

openssl req -x509 -config openssl.cnf -nodes -days 7300 \
    -signkey server.key -out /etc/ssl/private/pure-ftpd.pem 

Aber ich bekomme immer noch eine Eingabeaufforderung für Daten.

TheNiceGuy
quelle
1
Können Sie anstelle des gewünschten Ergebnisses eine Erklärung oder eine Ausgabe des Geschehens abgeben?
Patrick
Ich bekomme die Hilfe als Ausgabe- Irgendetwas stimmt mit den Parametern hier nicht:openssl req -x509 -config openssl.cnf -nodes -days 7300 -signkey server.key -out /etc/ssl/private/pure-ftpd.pem
TheNiceGuy
Es ist am besten, die Ausgabe von Fehlern bereitzustellen, wenn Sie Probleme haben. Ich vermute, dein Problem liegt an -signkey. Dies ist openssl reqauf meinem System keine gültige Option. Die Fehlermeldung wird dies als die allererste Zeile haben:unknown option -signkey
Patrick
Nun, dieser Signkey sollte SSL anweisen, den bereitgestellten Schlüssel zu verwenden, wie ich weiß?
TheNiceGuy
Ihre "normale Methode zum Erstellen des Zertifikats" fordert Sie nicht zur Eingabe von Daten auf. Wollen Sie nicht, dass es etwas ausgibt? Dann benutze 2> /dev/null.
Wingedsubmariner

Antworten:

51

Was Sie vermissen, ist, den Betreff des Zertifikats in das -subjFlag aufzunehmen. Ich bevorzuge es, eine Konfigurationsdatei zu erstellen, da diese einfacher in einen Workflow zu integrieren ist und keine anschließende Bereinigung erforderlich ist.

One-Step-Key und CSR-Generierung:

openssl req -new -newkey rsa:4096 -nodes \
    -keyout www.example.com.key -out www.example.com.csr \
    -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com"

Selbstsignierte, kennwortlose Zertifikatserstellung in einem Schritt:

openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 \
    -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" \
    -keyout www.example.com.key  -out www.example.com.cert

Keiner dieser Befehle fordert zur Eingabe von Daten auf.

Siehe meine Antwort auf diese fast identische Frage zu Super User.

Bahamat
quelle
Oh, das ist eine schöne Lösung. Verkleinert die Codes erheblich. Danke: D
TheNiceGuy
1
Ich habe seine ursprüngliche Konfigurationsdatei nicht geändert, da ich dachte, es könnte ein Ersatz für ein komplizierteres Zertifikat sein. Einige Konfigurationen, die nicht mit einem -subjParameter dargestellt werden können, insbesondere, wenn Sie sich mit Erweiterungen der Version 3 und den Parametern von subjectAltName befassen.
robbat2
1
Sie können auch verwenden -batch(nicht interaktiver Modus)
Eran H.
Beachten Sie, dass der erste Befehl anscheinend die Existenz des Schlüssels erfordert, bevor er ausgeführt werden kann, wobei der zweite Befehl den Schlüssel und das Zertifikat automatisch erstellt, da dies -subjeine grundlegende gültige Inline-CSR ist.
dragon788
@ dragon788 Danke für den Hinweis. Ich habe es repariert.
Bahamat
1

Der gesuchte Befehl lautet:

openssl req -new -x509 -config openssl.cnf -nodes -days 7300 -key server.key -out /etc/ssl/private/pure-ftpd.pem

Änderungen gegenüber Ihrer Version:

  • -new ist erforderlich, um etwas zu generieren
  • -key verwendet anstelle von -signkey
robbat2
quelle