Solicitações de sinal OpenSSL com extensões


8

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 openssleu uso os parâmetros -config myCustomOpenssl.cnf -reqexts server0_http. Quando olho para o meu pedido, 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" desaparecem. Para solucionar esse problema, também coloquei -extfile myCustomOpenssl.cnf -reqexts server0_httpos 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?

Respostas:


7

Encontrei! O que eu descrevi é o comportamento normal esperado do openssl. Por padrão, extensões personalizadas não são copiadas para o certificado.

Para fazer o openssl copiar as extensões solicitadas para o certificado, é necessário especificar copy_extensions = copya assinatura. Nas instalações de baunilha, isso significa que essa linha deve ser adicionada à seção default_CAem openssl.cnf.

No openssl.cnfque é fornecido com (pelo menos) Centos, a linha já está incluída como comentário e carrega o aviso "use com cautela". Os solicitantes podem abusar disso para emitir um certificado de CA, se você não for cuidadoso.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.