
Eu configurei uma pequena CA autoassinada para meu ambiente de desenvolvimento. Gostaria de criar muitos certificados de servidor diferentes com propriedades diferentes. Minha abordagem é criar uma seção de extensões específica 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
Aí quando eu crio meu csr usando openssl
eu uso os parâmetros -config myCustomOpenssl.cnf -reqexts server0_http
. Quando vejo meu pedido usando 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" desapareceram. Para solucionar esse problema também coloquei -extfile myCustomOpenssl.cnf -reqexts server0_http
os parâmetros para a chamada de assinatura em openssl
.
Esse é o comportamento esperado? Sempre pensei que apenas o arquivo csr deveria ser suficiente para criar um certificado conforme solicitado, ou seja, com todas as suas seções. A forma como meu sistema funciona agora é que recebo um certificado com seções ausentes. Para obter o certificado como desejo, tenho que fornecer o arquivo csr e a seção correspondente do arquivo de configuração do openssl que usei para criar a solicitação. Isso não é problema para minha pequena configuração, mas fica bastante confuso se eu me tornar uma CA maior. Era para ser assim ou estou usando o openssl incorretamente?
Responder1
Encontrei! O que descrevi é o comportamento normal esperado do openssl. Por padrão, as extensões personalizadas não são copiadas para o certificado.
Para fazer com que o openssl copie as extensões solicitadas para o certificado, é necessário especificar copy_extensions = copy
para a assinatura. Nas instalações vanilla, isso significa que esta linha deve ser adicionada à seção default_CA
em openssl.cnf
.
No openssl.cnf
que vem com (pelo menos) Centos a linha já vem incluída como comentário e traz o aviso “use com cautela”. Os solicitantes podem abusar disso para fazer você emitir um certificado CA, se você não tomar cuidado.