
Я установил небольшой самоподписанный 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, если вы не будете осторожны.