Вопрос или проблема
Я пытался создать самоподписанный сертификат с альтернативным именем субъекта; однако, хотя сертификат был успешно создан, SAN не был добавлен в его детали.
Вот команда, которую я использовал для создания запроса на подпись.
openssl req -newkey rsa:2048 -nodes -sha256 -keyout server.key -out server.csr -config openssl-san.cnf
А вот содержание конфигурационного файла.
[ req ]
default_bits = 2048
distinguished_name = req_distinguished_name
req_extensions = req_ext
[ req_distinguished_name ]
countryName = Название страны (2 буквы)
stateOrProvinceName = Название штата или провинции (полное название)
localityName = Название местности (например, город)
organizationName = Название организации (например, компания)
commonName = Общее название (например, FQDN сервера или ВАШЕ имя)
# Опционально, укажите некоторые значения по умолчанию.
countryName_default = **
stateOrProvinceName_default = ****
localityName_default = ****
0.organizationName_default = ******
organizationalUnitName_default = **
emailAddress_default = *********
[ req_ext ]
subjectAltName = @alt_names
[alt_names]
DNS.0 = localhost
Что я делаю не так?
Пожалуйста, имейте в виду, что я разработчик программного обеспечения, поэтому создание сертификатов не является моей типичной задачей.
Минимальная конфигурация (minimal.cnf
), которая даст вам самоподписанный сертификат, выглядит следующим образом:
prompt = no
distinguished_name = req_dn
x509_extensions = x509_ext
[ req_dn ]
commonName = Пример веб-службы
[ x509_ext ]
subjectAltName = @alt_names
# Возможно, вам нужно добавить следующую строку, чтобы прекратить жалобы Firefox:
basicConstraints = critical; CA:TRUE
[alt_names]
DNS.1 = www.example.com
DNS.2 = example.com
Создайте самоподписанный сертификат с помощью:
openssl req -x509 -new -newkey rsa:2048 -nodes -days 720 -keyout selfsigned.key -out selfsigned.cer -config minimal.cnf
Ответ или решение
Создание самоподписанного SSL-сертификата с использованием OpenSSL и добавлением альтернативного имени субъекта (SAN, Subject Alternative Name) может вызвать проблемы, если не учесть определенные моменты в конфигурации. Ваша проблема заключается в том, что SAN не добавляется в итоговый сертификат, даже несмотря на успешное выполнение команды.
Анализ проблемы
-
Команда OpenSSL:
Вы используете следующую команду для создания запроса на подпись сертификата (CSR):openssl req -newkey rsa:2048 -nodes -sha256 -keyout server.key -out server.csr -config openssl-san.cnf
Однако для создания самоподписанного сертификата следует использовать флаг
-x509
, что позволит сразу сгенерировать сертификат, а не только CSR. -
Конфигурационный файл:
В вашем конфигурационном файлеopenssl-san.cnf
вы правильно указали разделы дляreq
и расширений. Однако отсутствует явная привязка между расширениями и генерацией итогового самоподписанного сертификата. -
Отсутствие параметра
x509_extensions
:
В текущем конфигурационном файле для создания самоподписанного сертификата не указан разделx509_extensions
, который необходим для добавления SAN при создании.
Рекомендации по исправлению
Чтобы создать самоподписанный сертификат с SAN, вам необходимо учесть следующие изменения:
-
Обновление конфигурационного файла:
Вам нужно добавить параметрx509_extensions
, чтобы OpenSSL знал, какие расширения применять. Обновленный файлopenssl-san.cnf
может выглядеть следующим образом:[ req ] default_bits = 2048 distinguished_name = req_distinguished_name req_extensions = req_ext x509_extensions = x509_ext [ req_distinguished_name ] countryName = Country Name (2 letter code) stateOrProvinceName = State or Province Name (full name) localityName = Locality Name (eg, city) organizationName = Organization Name (eg, company) commonName = Common Name (e.g. server FQDN or YOUR name) # Опционально указываем значения по умолчанию. countryName_default = ** stateOrProvinceName_default = **** localityName_default = **** 0.organizationName_default = ****** organizationalUnitName_default = ** emailAddress_default = ********* [ req_ext ] subjectAltName = @alt_names [ x509_ext ] subjectAltName = @alt_names [alt_names] DNS.0 = localhost DNS.1 = example.com
-
Генерация самоподписанного сертификата:
Теперь вы можете использовать следующую команду для генерации самоподписанного сертификата:openssl req -x509 -new -newkey rsa:2048 -nodes -days 720 -keyout server.key -out server.crt -config openssl-san.cnf
Заключение
Следуя вышеуказанным рекомендациям, вы сможете успешно создать самоподписанный сертификат с добавлением SAN. Убедитесь, что вы всегда проверяете содержимое конфигурационного файла и используете правильные флаги командной строки в OpenSSL. Это не только повысит ваши навыки, но и позволит избежать распространенных ошибок при работе с сертификатами.