Confiando em uma CA indigna de confiança - Posso restringir como o sistema confia nela?

31

(Postado para ServerFault ao invés de StackOverflow porque eu sinto que isso diz respeito à configuração do sistema operacional mais do que o código de programação).

Atualmente, sou responsável por manter um sistema que se conecta a um serviço da web de terceiros. Esse webservice requer certificados de autenticação de cliente, o que é justo, mas o próprio serviço da Web é protegido por um certificado autoassinado criado por um certificado de autoridade de certificação raiz autodenominado - a mesma raiz que cria os certificados de autenticação do cliente.

Seria suficiente simplesmente adicionar o certificado de serviço atual à lista de confiança conhecida e ignorar o certificado de autoridade criada pelo próprio, infelizmente o certificado de serviço é alterado regularmente para que o certificado de autoridade seja confiável para garantir que o aplicativo não seja quebra quando o certificado de serviço é renovado.

No entanto, não confio (pessoalmente) no certificado da CA com base na minha experiência com a empresa que está executando o serviço da Web - não seria surpresa se vazasse para a Web - e preocupantemente o certificado da CA não tem uso de chave restrições colocadas sobre ele (enquanto ataques MITM externos são uma possibilidade, embora remota, estou mais preocupado com um certificado vazado usado para assinatura de código, por exemplo).

É possível que eu diga ao meu computador (atualmente uma caixa de servidor, mas em futuras caixas de cliente de desktop comuns) para confiar em uma autoridade de certificação, mas apenas para um determinado conjunto de uso de chaves e um pequeno conjunto de nomes de assunto possíveis ( nomes de domínio)?

O servidor é atualmente o Windows Server 2012 R2, mas pode estar sendo executado em uma caixa Linux - embora as máquinas desktop sejam todas caixas Windows.

    
por Dai 05.05.2016 / 05:10

1 resposta

39

Sim, é possível. No caso do Windows, há um recurso chamado Cross-Certification ou Subordination Qualificado.

A ideia é que você assine o certificado de CA de emissão de terceiros em seu ambiente. Como resultado, o certificado SSL remoto é encadeado ao seu próprio certificado de CA raiz. Para proteger-se contra possíveis certificados não autorizados, implemente uma extensão de certificado Name Constraints , na qual você especifica uma lista de nomes aceitáveis. Se a CA de terceiros emitir um certificado para qualquer outro nome (não explicitamente especificado na extensão Name Constraints), ele será automaticamente rejeitado pelo seu provedor CryptoAPI.

Além de nomear restrições, você pode descrever a restrição Usos avançados de chave definindo a extensão de certificado Application Policies no certificado cruzado. Assim, o seu provedor de confiança validará com êxito apenas os usos especificados na extensão Application Policies .

Mais informações: Planejando e implementando a certificação cruzada e a subordinação qualificada usando o Windows Server 2003

p.s. Embora o artigo seja escrito em relação ao Windows Server 2003, o artigo ainda se aplica à versão mais recente do Windows Server.

    
por 05.05.2016 / 07:28