openssl „nie można znaleźć„ nazwa_wyróżniająca ”w konfiguracji”

40

Otrzymuję następujący błąd openssl req:

unable to find 'distinguished_name' in config
problems making Certificate Request
41035:error:0E06D06C:configuration file routines:NCONF_get_string:no value:/SourceCache/OpenSSL098/OpenSSL098-52.30.1/src/crypto/conf/conf_lib.c:329:group=req name=distinguished_name

W moim rozumieniu jest to, że jest to „Temat”, że nie może znaleźć ... ale ja jestem określając, że:

openssl req -new \
    -key "$PRIVATE_KEY" \
    -sha256 \
    -config "$OPTIONS_FILE" \
    -subj "/C=US/ST=California/L=San Francisco/O=ACME, Inc./CN=*.*.$DOMAIN/" \
    -out "$CSR_FILENAME"

Jedyną sugestią tego podręcznika jest to, że plik konfiguracyjny nie istnieje; Mogę cat "$OPTIONS_FILE", więc na pewno tam jest, a błąd nie jest poprzedzony błędem, który zauważa instrukcja, którą by to poprzedziło, więc jestem pewien, że opensslwidzi plik konfiguracyjny.

Mój plik konfiguracyjny zawiera następujące elementy:

[req]
req_extensions = v3_req

[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = *.*.example.com 

… Co jest dosłownie przykładem w dokumentacji .

Co ja tu robię źle?

Tanatos
źródło
1
Drobna uwaga: podany tutaj podmiotAltName *.*.example.comjest nieprawidłowy. (Możesz mieć tylko 1 *, i tylko w lewym skrajnym elemencie). Nie dotyczy to problemu, ale nie ślepo.
Thanatos

Odpowiedzi:

30

Niemal, jak mogę stwierdzić , -configprzesłania jakąś konfigurację wewnętrzną; jeśli zobaczysz sekcję „PRZYKŁADY” dla strony podręcznika dla openssl req , pokazuje przykład pliku konfiguracyjnego z distinguished_namenim zawartego . Przy przeczuciu dodałem następujące ustawienia do mojej konfiguracji:

[req]
…
distinguished_name = req_distinguished_name

[req_distinguished_name]
# empty.

Tak więc moja cała konfiguracja wyglądała mniej więcej tak

[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name

[req_distinguished_name]

[v3_req]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = *.*.${DOMAIN}

(Zauważ, że tutaj ${DOMAIN}nie jest dosłowne; powinieneś zastąpić go swoją nazwą domeny DNS; Tworzę ten plik w bashskrypcie cat >"$OPTIONS_FILE" <<EOF, po którym następuje powyższe, a następnie EOF)

openssl req … -subj <my subject> -config <that file> …następnie wziąłem mój temat z wiersza poleceń. Dla zainteresowanych całe polecenie wyglądało następująco:

openssl req -new \
    -key "$PRIVATE_KEY" \
    -sha256 \
    -config "$OPTIONS_FILE" \
    -subj "/C=US/ST=California/L=San Francisco/O=My Company, Inc./CN=*.*.$DOMAIN/" \
    -out "$CSR_FILENAME"

W tym temacie rozumiem, że SHA-1 jest przestarzałe¹ dla certyfikatów X.509, stąd -sha256(która jest nieudokumentowaną flagą…) i podmiotAltName staje się wymagany², stąd potrzeba konfiguracji. Jedyną dodatkową gotge, którą znam, aby wygenerować CSR najlepszych praktyk w powyższym przypadku, to to, że powinieneś używać klucza RSA o wielkości co najmniej 2048 bitów (jeśli używasz RSA, którym jestem); Państwo musi określić rozmiar do openssl genrsapolecenia jako bieżąca domyślna jest niepewna.

¹ Choć nie piszę tego w chwili pisania tego, ludzie czują, że to tylko kwestia czasu. Zobacz „Stopniowe
zachodzenie SHA1” ²Użycie CN dla nazwy domeny nie jest już zalecane; Nie jestem pewien, kiedy / czy przeglądarki planują to wycofać. „Zrezygnuj z włączania i sprawdzania ciągów, które wyglądają jak nazwy domenowe w nazwie pospolitej podmiotu.”, RFC 6125
Uwaga: Nie jestem pewien co do „poprawnej” wartości keyUsage.

Tanatos
źródło
2
Zobacz moją notatkę na pytanie; konfiguracja w tej odpowiedzi jest nieprawidłowa, ponieważ *.*.example.comjest niepoprawna (nie możesz mieć wielu *s); c / p-ers strzeżcie się.
Thanatos
Pusta sekcja req_distinguished_namenie jest akceptowana przez openssl 1.1.0f, więc musisz countryName_defaulttam przynajmniej być (patrz Opensl.conf Walkthru ).
AntonK
12

Miałem ten sam problem i znalazłem odpowiedź tutaj:

https://www.citrix.com/blogs/2015/04/10/how-to-create-a-csr-for-a-san-certificate-on-netscaler/

Plik konfiguracyjny wygląda następująco:

[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no
[req_distinguished_name]
C = US
ST = VA
L = SomeCity
O = MyCompany
OU = MyDivision
CN = www.company.com
[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = www.company.com
DNS.2 = company.com
DNS.3 = www.company.net 
DNS.4 = company.net 

I wtedy:

openssl req -new -key private.key -sha256 -nodes -config openssl.conf -out certificate.csr
Miquel
źródło
1
To też by działało; Podałem temat w wierszu poleceń (ponieważ było to prostsze w moim przypadku użycia); to po prostu przenosi go do pliku konfiguracyjnego. Co więcej, moje pytanie dotyczyło narzekania przez OpenSSL, że tego tematu nie można było znaleźć, gdy w rzeczywistości został on określony.
Thanatos
Nie jestem pewien, czy to rozwiązanie działa - w systemie Windows stale zgłasza „Nie można znaleźć nazwy wyróżniającej w konfiguracji” próbowałem wszystkiego.
hagubear
1
req_distinguished_nameSekcja może być puste. To, co robi, to określić szablon etykiet wymaganych nazw pól, które mogą zostać zastąpione przez -subj= /C=xx/ST=xx/L=xx/O=xx/OU=xx/CN=xxitp., Ale nie przypisywać tych wartości pól.
Devy,
5

Dla mnie ten błąd wydaje się być spowodowany niepoprawnym utworzeniem ścieżki podczas uruchamiania polecenia w systemie Windows Server 2012, C:\OpenSSL-Win32\bin

openssl req -new -sha256 -key private.pem -out example.csr

które generują błąd nieblokujący przed zapytaniem o podanie phare:

Nie można otworzyć C: \ Program Files (x86) \ Common Files \ SSL / openssl.cnf do odczytu, brak pliku lub katalogu

Oczywiście ścieżka jest nieprawidłowa z powodu niewłaściwego ukośnika, więc plik konfiguracyjny musi zostać jawnie dołączony w wierszu poleceń:

openssl req -new -sha256 -key private.pem -config openssl.cfg -out example.csr
Aleksiej
źródło
To działało dla mnie, ładnie i czysto. Wielkie dzięki!
Sossenbinder
Chociaż to niewątpliwie rozwiązuje twój problem, nie dotyczy to pierwotnego pytania, oprócz konieczności zrobienia w / OpenSSL. (Może to być lepsze jako osobne pytanie / odpowiedź.)
Thanatos
To rozwiązało mój problem z „openssl nie może znaleźć„
nazwa_wyróżniająca
1

Ten podobny błąd:

$ openssl req -x509 -newkey rsa: 4096 -keyout _key.pem -out cert.pem-dni 365 -nodes Zostaniesz poproszony o podanie informacji, które zostaną uwzględnione w żądaniu certyfikatu. To, co masz zamiar wprowadzić, to tak zwana nazwa wyróżniająca lub nazwa wyróżniająca. Jest sporo pól, ale możesz zostawić puste. W przypadku niektórych pól pojawi się wartość domyślna: Jeśli wpiszesz „.”, Pole pozostanie puste. ----- Nazwa kraju (dwuliterowy kod) [AU]: problemy z żądaniem certyfikatu

(Ubuntu 17.04) oznaczało „musisz dodać

-subj "/C=US/ST=California/L=San Francis co/O=ACME, Inc./CN=*.*.$DOMAIN/"

do wiersza poleceń „FWIW.

rogerdpack
źródło
0

Innym możliwym problemem mogą być specjalne (niewidoczne) znaki UTF-8. Sprawdź swój plik za pomocą

cat -v $OPTIONS_FILE
feri
źródło