Веб-браузеры используют имя хоста из 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]
Смотрите также:
- Введение в IPv6 адреса: как пользоваться и как исследовать сеть (часть 1)
- Введение в IPv6 адреса: как пользоваться и как исследовать сеть (часть 2)
В каждом случае получен статус «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: принципы работы, создание сертификатов, аудит





