openssl «не может найти« отличительное имя »в конфигурации»


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
Небольшое примечание: здесь указано значение subjectAltName, *.*.example.comнедействительное. (У вас может быть только 1 *, и только в самом левом компоненте.) Это не относится к проблеме здесь, но не используйте c / p вслепую.
Танатос

Ответы:


30

Насколько я могу судить , -configпереопределяется какая-то внутренняя конфигурация; если вы видите раздел «ПРИМЕРЫ» для страницы руководства для 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, следовательно -sha256(что является недокументированным флагом ...), и subjectAltName становится обязательным², отсюда и необходимость в конфигурации. Единственное, что мне известно о том, что для создания лучшего CSR, описанного выше, я должен использовать размер ключа RSA не менее 2048 бит (если вы используете RSA, которым я являюсь); Вы должны указать размер openssl genrsaкоманды, так как текущее значение по умолчанию небезопасно.

«Пока я не сломлен, когда я пишу это, люди чувствуют, что это только вопрос времени. См. «Постепенный закат SHA1»
² Использование CN для доменного имени больше не рекомендуется; Я не уверен, когда / если браузеры планируют отказаться от этого. «Отойдите от включения и проверки строк, которые выглядят как доменные имена в общем имени субъекта.», 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т. Д., Но не назначать эти значения полей.
Деви

5

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

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

который выводит неблокирующую ошибку перед запросом проходного фаре:

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

Очевидно, что путь неверен из-за неправильной косой черты, поэтому файл конфигурации должен быть явно добавлен в командной строке:

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

Это сработало для меня, красиво и чисто. Большое спасибо!
Sossenbinder

Хотя это, без сомнения, решает вашу проблему, это не относится к первоначальному вопросу, кроме необходимости делать с OpenSSL. (Это может быть лучше, как отдельный вопрос / ответ.)
Танатос

Это исправило мою проблему с «openssl не удалось найти« отличительное_имя »в конфиге» спасибо!
chris31389

1

Эта похожая ошибка:

$ openssl req -x509 -newkey rsa: 4096 -keyout _key.pem -out cert.pem -days 365 -nodes Вам будет предложено ввести информацию, которая будет включена в ваш запрос сертификата. То, что вы собираетесь ввести, это то, что называется отличительным именем или DN. Есть довольно много полей, но вы можете оставить некоторые пустыми. Для некоторых полей будет использоваться значение по умолчанию. Если вы введете «.», Поле останется пустым. ----- Название страны (двухбуквенный код) [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.