czy jest możliwe, aby openssl pomijała podpowiedzi kraju / nazwy zwyczajowej?

82

Czy istnieje sposób, aby openssl pomijała monity, takie jak

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

Podczas tworzenia certyfikatów w

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

biorąc pod uwagę fakt, że te parametry są podane w openssl.cnfpliku

na przykład

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
źródło
3
Możesz przekazać te rzeczy jako parametry w linii poleceń. Nie pamiętam składni.
indywid.11.11
1
dzięki, to działa! -subj '/C=US/ST=Oregon/L=Portland/CN=www.madboa.com'jest droga
Tzury Bar Yochay

Odpowiedzi:

129

dzięki @indiv

według tego przewodnika -subj jest droga np

-subj '/CN=www.mydom.com/O=My Company Name LTD./C=US'
Tzury Bar Yochay
źródło
w rzeczywistości żaden plik konfiguracyjny nie jest potrzebny w ten sposób
Pat
35

Innym rozwiązaniem jest użycie w pliku konfiguracyjnym promptdyrektywy.
Zobacz OpenSsl: format pliku konfiguracyjnego

prompt

jeśli ustawione na wartość, nowyłącza monitowanie o pola certyfikatów i po prostu pobiera wartości bezpośrednio z pliku konfiguracyjnego. Zmienia również oczekiwany format sekcji distinguished_namei attributes.

Istnieją dwa oddzielne formaty dla sekcji distinguished namei attribute.

Jeśli opcja podpowiedzi jest ustawiona na, nosekcje te składają się tylko z nazw pól i wartości : na przykład

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

Pozwala to programom zewnętrznym (np. Opartym na GUI) wygenerować plik szablonu ze wszystkimi nazwami pól i wartościami i po prostu przekazać go do req.

Alternatywnie, jeśli opcja zachęty jest nieobecna lub nie jest ustawiona na nie, plik zawiera informacje podpowiadające pola. Składa się z wierszy postaci:

 fieldName="prompt"
 fieldName_default="default field value"
 fieldName_min= 2
 fieldName_max= 4
VonC
źródło
2
To powinna być akceptowana odpowiedź. Jeśli istnieje już plik konfiguracyjny, nie ma sensu dostarczać opcji / CN / O / C jako polecenia ponownie.
Aditya Vikas Devarapalli
1
@AdityaVikasDevarapalli 8 lat po napisaniu tej odpowiedzi zgadzam się. Ale jestem stronniczy.
VonC,
15

Wygeneruj plik konfiguracyjny iw sekcji [req] możesz umieścić prompt = no.

Na przykład:

[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

Następnie po prostu wykonaj np

openssl req -new -sha256 -config THATFILE.conf -key example.com.key -out example.com.csr
FlorianB
źródło
4

Podejście mieszane nie jest obsługiwane

Może być intuicyjna myśl, że możliwe jest podejście mieszane, w którym możesz pomyśleć o umieszczeniu niektórych pól statycznych w pliku openssl.cnf i określeniu niektórych (CN) za pomocą -subjopcji. Jednak to nie działa.

Przetestowałem scenariusz, w którym ja

  • umieść C, ST, L, O i OU w sekcji openssl.cnf req_distinguished_namei
  • biegł openssl reqz -subj=/CN=www.mydom.com.

openssl skarżyła się, że brakuje obowiązkowego pola Nazwa kraju, a wygenerowany certyfikat miał tylko CN w temacie. Wygląda na to, że -subjopcja całkowicie zastępuje temat i nie pozwala na aktualizację pojedynczego pola.

To sprawia, że ​​wszystkie poniższe trzy podejścia do dostarczania pól tematycznych są wykluczające się wzajemnie:

  • Monity
  • plik konfiguracyjny
  • -subj opcja
Mohammad Azim
źródło
Dzięki za potwierdzenie tego. To naprawdę powinno zostać oznaczone jako błąd. Po uruchomieniu -subjjest ignorowany, nawet jeśli został określony po -config.
Otheus
1

-batchOpcjonalny parametr powoduje, że openssl reqpolecenie nie wiersza dla każdego z pól informacyjnych. Używam go w ten sposób bez pliku konfiguracyjnego do automatyzacji certyfikatów z podpisem własnym.

Jest wymieniony w pomocy:

openssl help req
...
...
-batch              Do not ask anything during request generation
Daniel Nalbach
źródło
Wydaje mi się, że tak naprawdę nie jest bez pliku konfiguracyjnego: jeśli nie jest określony, jest pobierany z domyślnej lokalizacji i kończy się niepowodzeniem, jeśli nie został tam zainstalowany.
maf-soft