OpenSSL assina solicitações com extensões

6

Eu configurei uma pequena autoridade de certificação autônoma 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í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

Então, quando eu criar meu CSR usando openssl eu uso os parâmetros -config myCustomOpenssl.cnf -reqexts server0_http . Quando olho para minha solicitação usando openssl req -text -noout -in myrequest.csr , tudo parece perfeito.

No entanto, depois de assinar a solicitação, as seções "Uso de chave estendida X509v3" e "Nome alternativo de X509v3" desapareceram. Para remediar esse problema, eu também coloquei -extfile myCustomOpenssl.cnf -reqexts server0_http com os parâmetros para a chamada de assinatura para openssl .

Esse é o comportamento esperado? Eu sempre achei que o arquivo CSR sozinho deve ser suficiente para criar um certificado conforme solicitado, ou seja, com todas as suas seções. A maneira como meu sistema funciona agora é que recebo um certificado com seções ausentes. Para obter o certificado como eu quero, eu 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 a minha pequena configuração, mas isso se torna bastante confuso se eu me tornasse uma CA maior. É suposto ser assim ou estou usando o openssl incorretamente?

    
por Bananguin 29.09.2016 / 17:03

1 resposta

3

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

Para que o openssl copie as extensões solicitadas para o certificado, é necessário especificar copy_extensions = copy para a assinatura. Em instalações baunilha, isso significa que essa linha deve ser adicionada à seção default_CA in openssl.cnf .

No openssl.cnf que vem 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 fazer você emitir um certificado de CA, se não for cuidadoso.

    
por 30.09.2016 / 09:40

Tags