openssl "не вдається знайти" config_name "у config"


40

Я отримую таку помилку від 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

Я розумію, що це «суб'єкт» , що він не може знайти ... проте, я маю вказавши , що:

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"

Єдина пропозиція в посібнику полягає в тому, що файл конфігурації не існує; Я можу cat "$OPTIONS_FILE", так що, безумовно, є, і помилці не передує помилка, в якій відзначається посібник, перед яким було б передувати, якби це було так, тож я впевнений, що він opensslбачить конфігураційний файл.

Мій файл конфігурації містить:

[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 

... що в буквальному сенсі є прикладом у документах .

Що я тут роблю неправильно?


1
Незначна примітка: тема, вказана тут *.*.example.com, має недійсний характер. (Ви можете мати лише 1 *, і лише в крайньому лівому компоненті.) Це не стосується проблеми тут, але не вмикайте с / р сліпо.
Танатос

Відповіді:


30

Як я вже можу сказати , -configперемінає якусь внутрішню конфігурацію; якщо ви бачите розділ "ПРИКЛАДИ" для сторінки "man" для openssl req , він показує приклад конфігураційного файлу, який міститься distinguished_nameв ньому. Під час перегляду я додав у конфігурацію наступне:

[req]
…
distinguished_name = req_distinguished_name

[req_distinguished_name]
# empty.

Таким чином, вся моя конфігурація виглядала приблизно так

[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}

(Зауважте, що тут ${DOMAIN}не є буквальним; вам слід замінити його своїм доменним іменем DNS; я створюю цей файл у bashсценарії з cat >"$OPTIONS_FILE" <<EOF, а потім вище, далі EOF)

openssl req … -subj <my subject> -config <that file> …потім взяв мою тему з командного рядка. Для зацікавлених ціла команда виглядала так:

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"

Що стосується цієї публікації, я розумію, що SHA-1 застаріла¹ для X.509 certs, отже -sha256(що є недокументованим прапором…), а subjectAltName стає необхідним², отже, необхідність у налаштуваннях. Єдиний додатковий механізм, про який я знаю, щоб генерувати передовий КСВ для вищезазначених, - це те, що ви повинні використовувати розмір ключа RSA не менше 2048 біт (якщо ви використовуєте RSA, який я є); Ви повинні вказати розмір для openssl genrsaкоманди, оскільки поточний типовий за умовчанням небезпечний.

HileЯкщо не зламався в той час, коли я це пишу, люди відчувають, що це лише питання часу. Див. "Поступовий захід сонця SHA1" -
Використання CN для доменного імені вже не рекомендується; Я не впевнений, коли / якщо браузери планують це знецінити. Msgstr "" "Відійдіть від включення та перевірки рядків, схожих на доменні імена, у загальне ім'я теми.", RFC 6125
Примітка: Я менш впевнений у "правильному" значенні keyUsage.


2
Дивіться мою записку до питання; конфігурація у цій відповіді недійсна, оскільки *.*.example.comнедійсна (не можна мати декілька *s); c / p-ers будьте обережні.
Танатос

Порожній розділ req_distinguished_nameне сприймає openssl 1.1.0f, тому вам доведеться мати принаймні countryName_defaultтам (див. Openssl.conf Walkthru ).
AntonK

12

У мене була така ж проблема і тут я знайшов відповідь:

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

Конфігураційний файл виглядає приблизно так:

[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 

І потім:

openssl req -new -key private.key -sha256 -nodes -config openssl.conf -out certificate.csr

1
Це також спрацювало б; Я вказував тему в командному рядку (як це було простіше для мого випадку використання); це просто переміщує його у конфігураційний файл. Більше того, моє запитання, що стосується OpenSSL, скаржиться, що тему не вдалося знайти, коли, власне, вона була визначена.
Танатос

Я не впевнений, чи працює це рішення - у Windows постійно повідомляють, що "Не вдається знайти відзначити ім'я в конфігурації" спробував усе.
hagubear

1
req_distinguished_nameСекція може бути залишений порожнім. Для цього потрібно вказати шаблон міток необхідних імен полів, який можна перезаписати -subj= /C=xx/ST=xx/L=xx/O=xx/OU=xx/CN=xxтощо. Це, не призначати ці значення полям.
Devy

5

Для мене, здається, ця помилка викликана неправильним створенням контуру при запуску команди в Windows Server 2012, C:\OpenSSL-Win32\bin

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

які видають помилку, що не блокує, перш ніж запитувати фазу пропуску:

Не вдається відкрити C: \ Program Files (x86) \ Загальні файли \ SSL / openssl.cnf для читання, немає файлу чи каталогу s s

Зрозуміло, що шлях недійсний через неправильну косу рису, тому конфігураційний файл повинен бути явно доданий до командного рядка:

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

Це працювало для мене, приємно і чисто. Дуже дякую!
Sossenbinder

Хоча це, без сумніву, вирішує вашу проблему, але це не стосується оригінального питання, окрім необхідності робити OpenSL. (Це може бути краще як окреме запитання / відповідь.)
Танатос,

Це вирішило мою проблему з "openssl не вдається знайти"
шановане ім'я

1

Ця схожа помилка:

$ openssl req -x509 -newkey rsa: 4096 -keyout _key.pem -out cert.pem -days 365-вузли Вам буде запропоновано ввести інформацію, яка буде включена у ваш запит на сертифікат. Що ви збираєтесь ввести, це те, що називається виділеним іменем або DN. Полів досить багато, але ви можете залишити порожнє. Для деяких полів буде значення за замовчуванням, якщо ви введете '.', Поле буде залишене порожнім. ----- Назва країни (2 буквений код) [AU]: проблеми з запитом на отримання сертифікату

(Ubuntu 17.04) означало, що "вам потрібно додати

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

до командного рядка "FWIW.


0

Іншою можливою проблемою можуть бути спеціальні (невидимі) символи UTF-8. Перевірте свій файл за допомогою

cat -v $OPTIONS_FILE
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.