Solicitações de assinatura OpenSSL com extensões

Solicitações de assinatura OpenSSL com extensões

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 openssleu uso os parâmetros -config myCustomOpenssl.cnf -reqexts server0_http. Quando vejo meu pedido usando openssl req -text -noout -in myrequest.csrtudo 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_httpos 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 = copypara a assinatura. Nas instalações vanilla, isso significa que esta linha deve ser adicionada à seção default_CAem openssl.cnf.

No openssl.cnfque 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.

informação relacionada