É possível restringir o uso de um certificado raiz a um domínio

23

Meu cliente usa um certificado autoassinado para um aplicativo funcionar. Para poder trabalhar, tenho que instalar o certificado raiz que eles usaram para assinar o certificado.

É possível configurar um certificado raiz para validar apenas um domínio?

    
por MichaelD 23.02.2015 / 15:33

2 respostas

21

Como regra geral:

Não , implícito em confiar no certificado de CA do cliente é a confiança em cada certificado assinado por essa CA.

Não conheço nenhum aplicativo / biblioteca que tenha uma opção fácil que permita que você, como usuário final, selecione que você confiará em seus clientes ou em qualquer outro certificado CA apenas para certos (sub) domínios, ou seja, apenas para * .example.com e * .example.org e nada mais.

A Mozilla tem uma preocupação semelhante sobre as CAs atualmente patrocinadas pelo governo como um ponto de atenção aberta e, por exemplo, Chrome tem verificações extras embutidas para acessar os sites do Google, que era como o * .google fraudulento. com certificado e o compromisso do Diginotar CA tornou-se público.

Mas, mesmo que você não confie na autoridade de certificação, ainda será possível importar / confiar em um certificado de servidor específico assinado por essa autoridade de certificação, o que impedirá avisos de SSL para os nomes de host nesse certificado. Isso deve fazer seu aplicativo funcionar sem erros ou reclamações.

Exceções:

Uma opção muito subutilizada do padrão PKI X.509v3 é a extensão Restrições de nome , que permite que um certificado de autoridade de certificação contenha listas brancas e negras de padrões de nome de domínio para os quais está autorizado a emitir certificados.

Você pode ter sorte e seu cliente se conteve quando configurou sua infraestrutura de PKI e incluiu essa restrição de nome em seu certificado de autoridade de certificação. Em seguida, você pode importar seu certificado de CA diretamente e saber que ele só pode validar um intervalo limitado de nomes de domínio.

    
por 23.02.2015 / 15:57
13

@CryptoGuy teve uma resposta muito boa aqui, mas eu queria expandir isso.

Parafraseando:

You can restrict 3rd party CA to trust certificates (from that CA) issued to a name list you wish. Even if 3rd party CA do not have Name Constraints extension, it is possible to apply them by using your own internal CA server via cross-certification. The trick is that you sign 3rd party CA by using your internal CA.

leaf SSL cert -> cross-certificate -> your CA certificate -> your internal root certificate.

E aqui está como você faz esse trabalho (usando a CA da linha de comando do OpenSSL)

Crie uma CA simples

openssl req -new -x509 -days 3650 -newkey rsa:2048 -sha256 -out root-ca.crt -keyout root-ca.key -subj "/CN=My Root CA"

Você pode ignorar a criação de uma CA intermediária

Crie uma solicitação de CA intermediária, com restrições de nome.

openssl req -new -days 3650 -newkey rsa:2048 -out domain-ca.req -sha256 -keyout domain-ca.key -config ossl_domain_com.cfg

Com isso no arquivo ossl_domain_com.cfg :

[ req ]
prompt=no
distinguished_name=req_distinguished_name
req_extensions=domain_ca

[ req_distinguished_name ]
CN=somedomain.com trust CA

[ domain_ca ]
basicConstraints=critical,CA:true,pathlen:1
nameConstraints=critical,permitted;DNS:.somedomain.com

Em seguida, assine essa AC de domínio intermediário com sua autoridade de certificação.

openssl x509 -req -in domain-ca.req -CA root-ca.crt -CAkey root-ca.key -sha256 -set_serial 1 -out domain-ca.crt -extensions domain_ca -extfile ossl_domain_com.cfg

Se você pulou a criação do intermediário, use sua CA raiz para assinar

Agora, assine novamente a autoridade de certificação do domínio original sob sua autoridade, usando o certificado dela. Você pode adicionar as extensões CA aqui.

openssl x509 -in third_party_ca.crt -CA domain-ca.crt -CAkey domain-ca.key -set_serial 47 -sha256 -extensions domain_ca -extfile ossl_domain_com.cfg -out domain-cross-ca.crt

Pode ser necessário usar o argumento -x509-to-req para criar uma solicitação, que você assinaria exatamente da mesma maneira que o intermediário acima.

Agora, adicione sua CA raiz, CA intermediária e o domínio-cross-ca ao banco de dados de confiança do seu navegador.

    
por 18.03.2016 / 22:40