Как унаследовать commonName к альтернативному имени субъекта

Как унаследовать commonName к альтернативному имени субъекта

На моем ПК с установленной Windows 10 мне нужно использовать OpenSSL. Я скачал версию 1.0.2n и следую этому руководству:Создание SSL-сертификата с несколькими именами хостовЯ изменил файл конфигурации openssl.cfg (расположенный в C:\OpenSSL-Win64\bin).

После некоторого тестирования я могу без проблем генерировать как ключи, так и сертификаты.

Моя проблема заключается в следующем: мои показания для генерации сертификатов таковы, чтоАльтернативное имя субъектадолжно иметь только 1 значение и должно совпадать сРаспространенное имяполе. Так, если (заполняя сертификат) я заполняю поле commonNameпример.com, также должно быть указано альтернативное имя субъектапример.comЯ знаю, что могу каждый раз изменять файл cfg и вручную задавать значение для SAN в разделе v3-req, но я хочу избежать этого; я ищу способ скопировать значение, которое я запрашиваю для общего имени в поле SAN.

Итак, я попробовал это: в файле openss.cfg я зашел в раздел 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 = commonName:copy

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

req -text -noout -in <filename.csr>

для проверки моего сертификата в соответствующем разделе я получаю следующее:

X509v3 Subject Alternative Name:
    DNS:commonName.copy 

Как вы видите, вывод находится в правой части моего объявления под [alt_names]разделом.

Итак, вопросы: есть ли способ унаследовать commonName к альтернативному имени субъекта? И если да, то как?

решение1

Используется ${section::name}для чтения ранее определенных переменных.

Вот пример, который работает:

[ req ]

prompt             = no
string_mask        = default

# The size of the keys in bits:
default_bits       = 2048
distinguished_name = req_dn
req_extensions     = req_ext

[ req_dn ]

# Or traditional org style:
countryName = gb
organizationName = example
commonName = acme.example.test

[ req_ext ]

subjectAltName = @alt_names

[alt_names]
DNS.1 = ${req_dn::commonName}
DNS.2 = alt.example.test

С последующим:

openssl req -nodes -new -keyout test.key -out test.csr -config ./openssl.cnf

Это приводит к:

openssl req -noout -text -in test.csr 

давая:

 ...
    Attributes:
    Requested Extensions:
        X509v3 Subject Alternative Name:
            DNS:acme.example.test, DNS:alt.example.test
Signature Algorithm: sha256WithRSAEncryption
     92:1c:e0:0e:6d:7d:2e:b4:64:c5:ab:ff:6a:37:dd:35:98:58:
 ...

Связанный контент