it-swarm.com.ru

Альтернативное имя субъекта отсутствует в сертификате

Я сгенерировал CSR, который включает в себя тему поля alt names:

openssl req -out mycsr.pem -new -key mykey.pem -days 365

Когда я проверяю это, это выглядит как ожидалось с новым присутствующим полем:

X509v3 Subject Alternative Name:
    DNS: my.alt.dns

Однако, когда я использую это для подписи сертификата, это поле по какой-то причине опускается.

Я генерирую это с помощью следующей команды:

openssl ca -out mycert.pem -infiles mycsr.pem

Может ли быть так, что мой сертификат CA должен включать одно и то же имя Alt для его включения?

12
jimmy

Ты можешь использовать:

copy_extensions = copy 

в разделе CA_default в вашем openssl.cnf.

но только когда вы уверены, что можете доверять расширениям в CSR, как указано в этой теме: http://openssl.6102.n7.nabble.com/subjectAltName-removed-from-CSR-when-signing -td26928.html

Смотрите также: Как я могу создать самозаверяющий сертификат с SubjectAltName, используя OpenSSL?

13
Hans Z.

Для всех, кто не любит редактировать общесистемный openssl.conf, есть собственная опция CLI openssl для добавления SAN в .crt из .csr. Все, что вам нужно - это параметры CLI openssl -extfile и -extensions.

Вот пример:

openssl x509 -req -days 3650 -in alice.csr -signkey aliceprivate.key -out alice.crt -extfile alice-csr.conf -extensions v3_req

Для этого требуется файл alice-csr.conf, который выглядит следующим образом (введите соответствующие данные) и который использовался для генерации .csr с помощью команды openssl req -new -key aliceprivate.key -out alice.csr -config alice-csr.conf:

[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
Prompt = no

[req_distinguished_name]
C = DE
ST = Thuringia
L = Erfurt
O = Alice Corp
OU = Team Foo
CN = server-alice

[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = server-alice
DNS.2 = localhost

Имейте в виду, что параметр -extensions v3_req соответствует разделу [v3_req] в файле alice-csr.conf, где вы определяете свои альтернативные имена субъектов, то есть домены, для которых вы хотите выдать сертификат.

Поскольку я всегда ценю полностью понятные примеры, где можно воспроизвести каждый шаг, я создал пример проекта с использованием микросервисов Spring Boot: https://github.com/jonashackt/spring-boot-rest-clientcertificates-docker-compose

1
jonashackt