Eu configurei uma pequena CA autoassinada para o meu ambiente de desenvolvimento. Eu gostaria de criar muitos certificados de servidor diferentes com propriedades diferentes. Minha abordagem é criar uma seção de extensões específicas para cada servidor. Eu tenho um grande openssl.cnf que contém seções como esta:
[ 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
Então, quando eu crio meu csr usando openssl
eu uso os parâmetros -config myCustomOpenssl.cnf -reqexts server0_http
. Quando olho para o meu pedido, openssl req -text -noout -in myrequest.csr
tudo parece perfeito.
No entanto, depois de assinar a solicitação, as seções "Uso estendido da chave X509v3" e "Nome alternativo do assunto X509v3" desaparecem. Para solucionar esse problema, também coloquei -extfile myCustomOpenssl.cnf -reqexts server0_http
os parâmetros para a chamada de assinatura openssl
.
Esse é o comportamento esperado? Eu sempre pensei que o arquivo csr sozinho deveria ser suficiente para criar um certificado conforme solicitado, ou seja, com todas as suas seções. A maneira como meu sistema funciona agora é que eu recebo um certificado com as seções ausentes. Para obter o certificado como eu quero, tenho que fornecer o arquivo csr e a seção correspondente do arquivo de configuração openssl que usei para criar a solicitação. Isso não é problema para minha pequena configuração, mas isso se torna bastante complicado se eu me tornar uma autoridade de certificação maior. É suposto ser assim ou estou usando o openssl incorretamente?