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 []:gustav@foobar.com

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 gustav@foobar.com \
-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.



@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...)


2

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


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.


1
Es scheint, dass die akzeptierte Antwort diese Informationen bereits enthält. Ansonsten danke.
— Dotancohen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.