HackWare.ru

Как добавить Subject Alternative Name (subjectAltName) в самоподписанный сертификат

Веб-браузеры используют имя хоста из Subject Alternative Name (subjectAltName)

В настоящее время популярные веб-браузеры (в том числе Google Chrome, Chromium и Firefox) при подключении по зашифрованному протоколу HTTPS имя хоста, для которого действителен сертификат, получают не из поля Common Name (CN), а из поля Subject Alternative Name (subjectAltName).

Альтернативное имя субъекта (Subject Alternative Name, subjectAltName) — это расширение с множеством значений, которое поддерживает несколько типов идентификаторов имени. На практике это означает что при подписании сертификата необходимо указать конфигурационный файл с настройками subjectAltName.

Но зато это небольшое неудобство открывает множество горизонтов: в сертификате с Subject Alternative Name можно кроме одного имени хоста указать несколько имён, в том числе с подстановочными знаками. Но и это ещё не всё. Теперь можно создать самоподписанные сертификаты даже для IP адресов! Причём как для IP, так и для IPv6.

Как бы там ни было, без Subject Alternative Name у вас не получится создать самоподписанный сертификат, поскольку независимо от Common Name веб-браузеры Google Chrome, Chromium и Firefox будут считать этот сертификат неподходящим для данного домена.

Как создать самоподписанный сертификат с Subject Alternative Name (subjectAltName)

Первые стадии создания сертификата с Subject Alternative Name (subjectAltName) идентичны созданию обычного сертификата.

Если вы этого ещё не сделали, создайте пару ключей для Центра Сертификации (CA):

openssl genpkey -algorithm RSA -out rootCA.key
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.crt

Теперь создаём приватный ключ сертификата сайта — вновь стандартные команды:

openssl genpkey -algorithm RSA -out DOMAIN.NAME.key

Создаём файл запроса на подпись — опять стандартная команда без каких-либо изменений:

openssl req -new -key DOMAIN.NAME.key -out DOMAIN.NAME.csr

Не забудьте правильно указать Common Name.

Перед созданием самоподписанного сертификата, нужно создать файл с настройками Subject Alternative Name (subjectAltName). Я в качестве имени файла выбрал extraoptions.ext, но вы можете выбрать любое другое.

Пример синтаксиса файла (для домена hackware.local):

subjectAltName = DNS:hackware.local

После DNS нужно указать имя хоста. Вы также можете указать имя хоста с подстановочными знаками. Если значений несколько, то они разделяются запятыми:

subjectAltName = DNS:*.hackware.local, DNS:hackware.local

Затем, на этапе подписания сертификата вам нужно указать опцию -extfile и затем имя файла, куда вы сохранили настройки:

openssl x509 -req -in DOMAIN.NAME.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out DOMAIN.NAME.crt -days 500 -sha256 -extfile extraoptions.ext

Вот и всё! На самом деле, это было довольно просто. Просто помните, что имя хоста нужно указывать в поле «DNS».

Синтаксис Subject Alternative Name (subjectAltName). Как создать валидные сертификаты для IP и IPv6

Если вы хотите, чтобы данный сертификат являлся действительным и для IP адресов, то укажите их тоже:

subjectAltName = DNS:*.hackware.local, DNS:hackware.local, IP:127.0.0.1

Как уже было сказано выше, вы можете указать даже IPv6 адреса:

subjectAltName = DNS:*.hackware.local, DNS:hackware.local, IP:127.0.0.1, IP:2001:fb1:13b:50dc:ab9e:6638:dab5:7c90

Также можно добавить e-mail:

subjectAltName = DNS:*.hackware.local, DNS:hackware.local, IP:127.0.0.1, IP:2001:fb1:13b:50dc:ab9e:6638:dab5:7c90, email:alexey@miloserdov.org

Вам необязательно использовать весь этот (не полный) список значений — достаточно указать имя хоста (поле DNS) чтобы ваш сертификат стал признаваться валидным в веб-браузерах.

Как посмотреть Subject Alternative Name (subjectAltName) в сертификате

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

openssl x509 -in DOMAIN.NAME.crt -text -noout

Обратите внимание на раздел «X509v3 extensions» и вложенный в него подраздел «X509v3 Subject Alternative Name».

Проверка Subject Alternative Name (subjectAltName)

Примечание: сертификат локального Центра Сертификации (CA) уже добавлен в доверенные, поэтому браузеры доверяют всем сертификатам, которые были подписанным локальным CA. Подробности смотрите в разделе Как добавить корневой сертификат в доверенные в Linux в веб браузеры.

Подключение по протоколу HTTPS используя доменное имя: https://hackware.local/

Подключение по протоколу HTTPS используя поддомен: https://forum.hackware.local/

Подключение по протоколу HTTPS используя IP адрес: https://127.0.0.1/

Подключение по протоколу HTTPS используя IPv6 адрес: https://[2001:fb1:13b:50dc:ab9e:6638:dab5:7c90]

Смотрите также:

В каждом случае получен статус «Connection is secure»!

Официальная документация по Subject Alternative Name (subjectAltName)

Далее дан перевод документации по Subject Alternative Name:

man x509v3_config

Раздел «Subject Alternative Name».

Subject Alternative Name — это расширение с несколькими значениями, которое поддерживает несколько типов идентификаторов имён, включая email (адрес электронной почты), URI (унифицированный индикатор ресурса), DNS (доменное имя DNS), RID (зарегистрированный идентификатор: OBJECT IDENTIFIER), IP (IP-адрес), dirName (отличительное имя) и otherName. Синтаксис каждого из них описан ниже.

Параметр email имеет два специальных значения. «copy» автоматически включит все адреса электронной почты, содержащиеся в имени субъекта сертификата в расширение. «move» автоматически переместит все адреса электронной почты из имени субъекта сертификата в расширение.

IP-адрес, используемый в параметре IP, может быть в формате IPv4 или IPv6.

Значение dirName указывает раздел конфигурации, содержащий отличительное имя для использования, как набор пар имя-значение. Многозначные AVA могут быть сформированы путём добавления к имени символа +.

Значение otherName может включать произвольные данные, связанные с OID; значение должно быть OID, за которым следует точка с запятой, а содержимое должно быть указано с использованием синтаксиса в ASN1_generate_nconf(3).

Примеры:

subjectAltName = email:copy, email:my@example.com, URI:http://my.example.com/
subjectAltName = IP:192.168.7.1
subjectAltName = IP:13::17
subjectAltName = email:my@example.com, RID:1.2.3.4
subjectAltName = otherName:1.2.3.4;UTF8:some other identifier
[extensions]
subjectAltName = dirName:dir_sect

[dir_sect]
C = UK
O = My Organization
OU = My Unit
CN = My Name

Адрес электронной почты не в кодировке ASCII, соответствующий синтаксису, определённому в разделе 3.3 RFC 6531, предоставляется как otherName.SmtpUTF8Mailbox. Согласно RFC 8398, адрес электронной почты должен быть предоставлен как UTF8String. Для обеспечения допустимого представления в сертификате SmtpUTF8Mailbox должен быть предоставлен следующим образом

subjectAltName=@alts
[alts]
otherName = 1.3.6.1.5.5.7.8.9;FORMAT:UTF8,UTF8String:nonasciiname.example.com

Смотрите также: OpenSSL: принципы работы, создание сертификатов, аудит

История обновлений

No update history yet.

Рекомендуется:
↑