OpenSSL не создает альтернативное имя субъекта (SAN)

Вопрос или проблема

Я пытался создать самоподписанный сертификат с альтернативным именем субъекта; однако, хотя сертификат был успешно создан, 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 не добавляется в итоговый сертификат, даже несмотря на успешное выполнение команды.

Анализ проблемы

  1. Команда OpenSSL:
    Вы используете следующую команду для создания запроса на подпись сертификата (CSR):

    openssl req -newkey rsa:2048 -nodes -sha256 -keyout server.key -out server.csr -config openssl-san.cnf

    Однако для создания самоподписанного сертификата следует использовать флаг -x509, что позволит сразу сгенерировать сертификат, а не только CSR.

  2. Конфигурационный файл:
    В вашем конфигурационном файле openssl-san.cnf вы правильно указали разделы для req и расширений. Однако отсутствует явная привязка между расширениями и генерацией итогового самоподписанного сертификата.

  3. Отсутствие параметра x509_extensions:
    В текущем конфигурационном файле для создания самоподписанного сертификата не указан раздел x509_extensions, который необходим для добавления SAN при создании.

Рекомендации по исправлению

Чтобы создать самоподписанный сертификат с SAN, вам необходимо учесть следующие изменения:

  1. Обновление конфигурационного файла:
    Вам нужно добавить параметр 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
  2. Генерация самоподписанного сертификата:
    Теперь вы можете использовать следующую команду для генерации самоподписанного сертификата:

    openssl req -x509 -new -newkey rsa:2048 -nodes -days 720 -keyout server.key -out server.crt -config openssl-san.cnf

Заключение

Следуя вышеуказанным рекомендациям, вы сможете успешно создать самоподписанный сертификат с добавлением SAN. Убедитесь, что вы всегда проверяете содержимое конфигурационного файла и используете правильные флаги командной строки в OpenSSL. Это не только повысит ваши навыки, но и позволит избежать распространенных ошибок при работе с сертификатами.

Оцените материал
Добавить комментарий

Капча загружается...