Ist es möglich, dass openssl die Eingabeaufforderungen für das Land / den allgemeinen Namen überspringt?

82

Gibt es eine Möglichkeit, openssl dazu zu bringen, die Eingabeaufforderungen wie z

Country Name (2 letter code) [US]:
Organization Name (eg, company) [My Company Name LTD.]:
Common Name (eg, YOUR name) [something]:

Beim Erstellen von Zertifikaten mit

openssl req -config openssl.cnf -new -x509 ...

Angesichts der Tatsache, dass diese Parameter in der openssl.cnfDatei angegeben sind

z.B

countryName         = Country Name (2 letter code)
countryName_default     = US
countryName_min     = 2
countryName_max     = 2
0.organizationName      = Organization Name (eg, company)
0.organizationName_default  = My Company Name LTD.
commonName          = Common Name (eg, YOUR name)
commonName_max      = 64
commonName_default      = ${ENV::CN}
Tzury Bar Yochay
quelle
3
Sie können diese Dinge als Parameter in der Befehlszeile übergeben. Ich erinnere mich nicht an die Syntax.
indiv
1
danke, das funktioniert! -subj '/C=US/ST=Oregon/L=Portland/CN=www.madboa.com'ist der Weg zu gehen
Tzury Bar Yochay

Antworten:

128

danke an @indiv

Nach dieser Anleitung -subj ist der Weg zu gehen, z

-subj '/CN=www.mydom.com/O=My Company Name LTD./C=US'
Tzury Bar Yochay
quelle
In der Tat wird auf diese Weise keine Konfigurationsdatei benötigt
Pat
35

Eine andere Lösung besteht darin, in Ihrer Konfigurationsdatei die promptDirektive zu verwenden.
Siehe OpenSsl: Konfigurationsdateiformat

prompt

Wenn nodieser Wert festgelegt ist, wird die Eingabeaufforderung von Zertifikatfeldern deaktiviert und es werden nur Werte direkt aus der Konfigurationsdatei übernommen. Es ändert auch das erwartete Format der Abschnitte distinguished_nameund attributes.

Es gibt zwei separate Formate für die Abschnitte distinguished nameund attribute.

Wenn die Eingabeaufforderungsoption auf gesetzt ist, nobestehen diese Abschnitte nur aus Feldnamen und Werten : z.

 CN=My Name
 OU=My Organization
 [email protected]

Auf diese Weise können externe Programme (z. B. GUI-basiert) eine Vorlagendatei mit allen Feldnamen und Werten generieren und diese einfach an übergeben req.

Wenn die Eingabeaufforderungsoption fehlt oder nicht auf Nein gesetzt ist, enthält die Datei alternativ Informationen zur Feldaufforderung. Es besteht aus Zeilen der Form:

 fieldName="prompt"
 fieldName_default="default field value"
 fieldName_min= 2
 fieldName_max= 4
VonC
quelle
2
Dies sollte die akzeptierte Antwort sein. Wenn bereits eine Konfigurationsdatei vorhanden ist, ist es sinnlos, die / CN / O / C-Optionen erneut als Befehl bereitzustellen.
Aditya Vikas Devarapalli
1
@AdityaVikasDevarapalli 8 Jahre nachdem ich diese Antwort geschrieben habe, stimme ich zu. Aber ich bin voreingenommen.
VonC
15

Generieren Sie eine Konfigurationsdatei und geben Sie im Abschnitt [req] prompt = no ein.

Zum Beispiel:

[req]
prompt = no
distinguished_name = req_distinguished_name
req_extensions = v3_req

[req_distinguished_name]
C = US
ST = California
L = Los Angeles
O = Our Company Llc
#OU = Org Unit Name
CN = Our Company Llc
#emailAddress = [email protected]

[v3_req]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = example.com
DNS.2 = www.example.com

Dann einfach zB ausführen

openssl req -new -sha256 -config THATFILE.conf -key example.com.key -out example.com.csr
FlorianB
quelle
4

Ein gemischter Ansatz wird nicht unterstützt

Es kann intuitiv zu denken sein, dass ein gemischter Ansatz möglich ist, bei dem Sie möglicherweise einige statische Felder in openssl.cnf einfügen und einige (CN) über die -subjOption angeben . Das funktioniert jedoch nicht.

Ich habe ein Szenario getestet, in dem ich

  • Geben Sie C, ST, L, O und OU in den Abschnitt openssl.cnf ein req_distinguished_nameund
  • lief openssl reqmit -subj=/CN=www.mydom.com.

openssl hat sich beschwert, dass das obligatorische Feld Ländername fehlt und das generierte Zertifikat gerade CN in der Betreffzeile hatte. Die -subjOption überschreibt anscheinend die Betreffzeile vollständig und erlaubt nicht die Aktualisierung eines einzelnen Feldes.

Dies macht alle drei Ansätze zur Bereitstellung von Themenfeldern exklusiv für einander:

  • Eingabeaufforderungen
  • Konfigurationsdatei
  • -subj Möglichkeit
Mohammad Azim
quelle
Vielen Dank für die Bestätigung. Dies sollte wirklich als Fehler gekennzeichnet werden. Wenn ich es ausführe, -subjwird es ignoriert, auch wenn es danach angegeben wird -config.
Otheus
1

Der -batchoptionale Parameter bewirkt, dass der openssl reqBefehl keines der Informationsfelder auffordert. Ich benutze es auf diese Weise ohne Konfigurationsdatei zur Automatisierung von selbstsignierten Zertifikaten.

Es ist in der Hilfe aufgeführt:

openssl help req
...
...
-batch              Do not ask anything during request generation
Daniel Nalbach
quelle