На моем компьютере с установленной Windows 10 мне нужно использовать OpenSSL. Я загрузил версию 1.0.2n и следую этому руководству: Создание сертификата SSL с несколькими именами хостов Я изменил файл конфигурации openssl.cfg (находится в C: \ OpenSSL-Win64 \ bin).
После некоторого тестирования я могу без проблем сгенерировать и ключи, и сертификаты.
Моя проблема в следующем: мои показания для генерации сертификатов таковы, что Альтернативное имя субъекта должен иметь только 1 значение и совпадать с Распространенное имя поле. Итак, если (заполняя сертификат) я заполняю поле commonName с example.com, также должно быть указано альтернативное имя субъекта. example.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 альтернативному имени субъекта? И если да, то как?
Использовать ${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:
...