Nicht interaktive Erstellung von SSL-Zertifikatanforderungen

15

Gibt es eine Möglichkeit, SSL-Zertifikatsanforderungen zu erstellen, indem alle erforderlichen Parameter im anfänglichen Befehl angegeben werden? Ich schreibe ein CLI-basiertes Webserver-Control-Panel und möchte die Verwendung von expect bei der Ausführung opensslnach Möglichkeit vermeiden .

Dies ist eine typische Methode zum Erstellen einer Zertifizierungsanforderung:

$ openssl req -new -newkey rsa:2048 -nodes -sha256 -keyout foobar.com.key -out foobar.com.csr
Generating a 2048 bit RSA private key
.................................................+++
........................................+++
writing new private key to 'foobar.com.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:New Sweden
Locality Name (eg, city) []:Stockholm
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Scandanavian Ventures, Inc.
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:foobar.com
Email Address []:[email protected]

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:FooBar

Ich hoffe, so etwas zu sehen: (funktionsloses Beispiel)

$ openssl req -new -newkey rsa:2048 -nodes -sha256 -keyout foobar.com.key -out foobar.com.csr \
-Country US \
-State "New Sweden" \
-Locality Stockholm \
-Organization "Scandanavian Ventures, Inc." \
-CommonName  foobar.com \
-EmailAddress [email protected] \
-Company FooBar

Die feine Manpage hatte dazu nichts zu sagen, noch konnte ich über Google etwas finden. Muss die Generierung von SSL-Zertifikatsanforderungen ein interaktiver Prozess sein oder gibt es eine Möglichkeit, alle Parameter in einem einzigen Befehl anzugeben?

Dies läuft auf einer von Debian abgeleiteten Linux-Distribution openssl 1.0.1.

dotancohen
quelle
@ceejayoz: Sehr schön, danke. א) Wo sind diese opensslFlaggen dokumentiert? ב) Wonach haben Sie bei Google gesucht? Vielen Dank!
Dotancohen
1
Ich googelte "CSR-Skript generieren". Der -subjParameter ist (nicht sehr detailliert) unter openssl.org/docs/apps/req.html dokumentiert .
Ceejayoz
Es ist auch möglich, eine Konfigurationsdatei zu erstellen, die normalerweise aufgerufen wird openssl.cnf.
Sebix

Antworten:

16

Ihnen fehlen zwei Teile:

die Betreffzeile, die als bezeichnet werden kann

-subj "/C=US/ST=New Sweden/L=Stockholm /O=.../OU=.../CN=.../emailAddress=..."
  • Ersetzen von ... durch value X=als X509-Code ( O rganisation / O rganisation U nit / etc ...)

der Passwortwert, der als aufgerufen werden kann

-passout pass:client11
-passin  pass:client11
  • die ein Ausgabe / Eingabe-Passwort geben

Meine Forderung nach einem neuen Schlüssel sieht so aus

openssl genrsa -aes256 -out lib/client1.key -passout pass:client11 1024
openssl rsa -in lib/client1.key -passin pass:client11 -out lib/client1-nokey.key

openssl req -new -key lib/client1.key -subj req -new \
    -passin pass:client11 -out lib/client1.csr \
    -subj "/C=US/ST=New Sweden/L=Stockholm/O=.../OU=.../CN=.../emailAddress=..."

(Jetzt, wo ich es sehe, gibt es zwei -new...)

Archemar
quelle
2

Überprüfen Sie die -batchOption, wie in den offiziellen Dokumenten beschrieben .

auswerfen
quelle
2
Vielen Dank. Ich sehe, dass die Batch-Option existiert, aber es scheint keine Erklärung zu geben, wie man sie benutzt.
Dotancohen
Warum wurde diese Antwort abgelehnt? Ist Batch keine mögliche Lösung für das Problem? Vom Namen her klingt es so, als ob es einfach so wäre.
Dotancohen
Es ist definitiv nur möglich, dies mit der Option -batch zu tun, warum ich keine Ahnung habe. Die Aussage "Die feine Manpage hatte zu diesem Thema nichts zu sagen" ist wegen der Option "-batch" falsch.
Wirf den
Wurde für die Erwähnung von Batch empfohlen, obwohl ich es in der Lösung nicht verwendet habe, könnte es in Zukunft nützlich sein.
Dotancohen
-1

Ich hänge an meinen regulären openssl-Befehl an:

openssl req -x509 -nodes -days 7300 -newkey rsa: 2048 -keyout /etc/ssl/private/key.pem -out /etc/ssl/private/cert.pem

Diese Linie:

-subj "/C=PE/ST=Lima/L=Lima/O=Acme Inc. /OU=IT Department/CN=acme.com"

Beschreibung:

  • Ländername (2-Buchstaben-Code) [AU]: PE
  • Name des Bundesstaates oder der Provinz (vollständiger Name) [Some-State]: Lima
  • Ortsname (z. B. Stadt) []: Lima
  • Name der Organisation (z. B. Firma) [Internet Widgits Pty Ltd]: Acme Inc.
  • Name der Organisationseinheit (z. B. Abschnitt) []: IT-Abteilung
  • Allgemeiner Name (z. B. FQDN des Servers oder IHR Name) []: acme.com

Verwenden Sie "/" als Trennzeichen.

JorgeM
quelle
1
Es scheint, dass die akzeptierte Antwort diese Informationen bereits enthält. Ansonsten danke.
Dotancohen