Я установил небольшой самоподписанный 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» и «Альтернативное имя субъекта X509v3» пропали. Чтобы исправить эту проблему, я также добавил -extfile myCustomOpenssl.cnf -reqexts server0_http
параметры для подписи вызова openssl
.
Это ожидаемое поведение? Я всегда думал, что одного csr-файла должно быть достаточно для создания сертификата по запросу, то есть со всеми его разделами. Моя система работает сейчас так, что я получаю сертификат с отсутствующими разделами. Чтобы получить сертификат, какой я хочу, я должен предоставить csr-файл и соответствующий раздел из файла конфигурации openssl, который я использовал для создания запроса. Это не проблема для моей маленькой установки, но это становится довольно грязным, если я стал большим CA. Это должно быть так или я использую openssl неправильно?