Запросы на подпись OpenSSL с расширениями

Запросы на подпись OpenSSL с расширениями

Я установил небольшой самоподписанный CA для своей среды разработки. Я хотел бы создать много разных сертификатов сервера с разными свойствами. Мой подход заключается в создании специального раздела расширений для каждого сервера. У меня есть один большой openssl.cnf, который содержит такие разделы:

[ server0_http ]

nsCertType                      = server
nsComment                       = "HTTP server0"
basicConstraints=CA:FALSE
extendedKeyUsage=serverAuth
subjectAltName=@server0_http_altnames

[ server0_http_altnames ]
URI.1 = https://server.domain.tld
URI.2 = http://server.domain.tld
IP.1  = 1.2.3.4
DNS.1 = server.doamin.tld

Затем, когда я создаю свой csr, используя opensslя использую параметры -config myCustomOpenssl.cnf -reqexts server0_http. Когда я смотрю на свой запрос, используя, openssl req -text -noout -in myrequest.csrвсе выглядит идеально.

Однако после того, как я подписал запрос, разделы "X509v3 Extended Key Usage" и "X509v3 Subject Alternative Name" исчезли. Чтобы исправить эту проблему, я также добавил -extfile myCustomOpenssl.cnf -reqexts server0_httpпараметры для вызова подписи в openssl.

Это ожидаемое поведение? Я всегда думал, что одного csr-файла должно быть достаточно для создания запрошенного сертификата, т. е. со всеми его разделами. Моя система работает сейчас так, что я получаю сертификат с отсутствующими разделами. Чтобы получить сертификат, который я хочу, я должен предоставить csr-файл и соответствующий раздел из файла конфигурации openssl, который я использовал для создания запроса. Это не проблема для моей небольшой установки, но это становится довольно беспорядочным, если я становлюсь большим CA. Так и должно быть или я неправильно использую openssl?

решение1

Нашел! То, что я описал, — это нормальное ожидаемое поведение openssl. По умолчанию пользовательские расширения не копируются в сертификат.

Чтобы openssl скопировал запрошенные расширения в сертификат, необходимо указать copy_extensions = copyдля подписи. В ванильных установках это означает, что эта строка должна быть добавлена ​​в раздел default_CAв openssl.cnf.

В openssl.cnfтом, что поставляется с (по крайней мере) Centos, строка уже включена в качестве комментария и содержит предупреждение "использовать с осторожностью". Запрашивающие могут злоупотребить этим, чтобы заставить вас выдать сертификат CA, если вы не будете осторожны.

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