Como os certificados ssl são verificados?

218

Qual é a série de etapas necessárias para verificar com segurança um certificado SSL? Meu entendimento (muito limitado) é que, quando você visita um site https, o servidor envia um certificado para o cliente (o navegador) e o navegador obtém as informações do emissor do certificado desse certificado, usa-o para entrar em contato com o emissor e, de alguma forma, compara certificados de validade.

  • Como exatamente isso é feito?
  • E o processo o torna imune a ataques do tipo intermediário?
  • O que impede uma pessoa aleatória de configurar seu próprio serviço de verificação para uso em ataques intermediários, para que tudo "pareça" seguro?
rcreswick
fonte
achou este vídeo muito útil para entender o fluxo youtube.com/watch?v=T4Df5_cojAs
Krishna

Respostas:

308

Aqui está uma explicação muito simplificada:

  1. Seu navegador da web baixa o certificado do servidor da web, que contém a chave pública do servidor da web. Este certificado é assinado com a chave privada de uma autoridade de certificação confiável.

  2. O seu navegador vem instalado com as chaves públicas de todas as principais autoridades de certificação. Ele usa essa chave pública para verificar se o certificado do servidor da Web foi realmente assinado pela autoridade de certificação confiável.

  3. O certificado contém o nome de domínio e / ou endereço IP do servidor web. Seu navegador da web confirma com a autoridade de certificação que o endereço listado no certificado é aquele ao qual ele possui uma conexão aberta.

  4. Seu navegador da web gera uma chave simétrica compartilhada que será usada para criptografar o tráfego HTTP nesta conexão; isso é muito mais eficiente do que usar criptografia de chave pública / privada para tudo. Seu navegador criptografa a chave simétrica com a chave pública do servidor da Web e a envia de volta, garantindo que apenas o servidor da Web possa descriptografá-la, uma vez que somente o servidor da Web possui sua chave privada.

Observe que a autoridade de certificação (CA) é essencial para impedir ataques intermediários. No entanto, mesmo um certificado não assinado impedirá que alguém escute passivamente seu tráfego criptografado, pois não tem como obter acesso à sua chave simétrica compartilhada.

Eli Courtwright
fonte
4
Na etapa 1.5, o servidor também "assina" algo com a chave privada associada ao seu certificado. Isso combina com a verificação de nome / IP para garantir que apenas o site proprietário do certificado o apresente.
Darron
68
Para ver um exemplo trabalhado completa deste processo usando Firefox conectar a amazon.com , consulte moserware.com/2009/06/first-few-milliseconds-of-https.html
Jeff Moser
9
Eu não sabia que meu navegador vem instalado com as chaves públicas de todas as principais autoridades de certificação. Agora eu sei como meus certificados SSL estão sendo verificados sem o risco de MITM :). Obrigado!
ChillDude
5
O servidor precisa solicitar o certificado do CAuthority, para que ele envie uma solicitação. Como a CA pode ter certeza de que o servidor é válido?
voipp
4
@voipp: Ótima pergunta! Historicamente, existem algumas abordagens, como "enviar um email de webmaster@<domain-being-verified>ou" Coloque este arquivo em seu domínio para provar que você é o proprietário dele. "No entanto, de fato houve problemas com pessoas fazendo com que as CAs emitissem certificados para domínios que não o fazem. própria - famosa alguém conseguiu obter um CA com sombra para emitir-lhes um certificado para gmail.com!
Eli Courtwright
58

Vale ressaltar que, além de adquirir um certificado (como mencionado acima), você também pode criar o seu próprio gratuitamente; isso é chamado de "certificado autoassinado". A diferença entre um certificado autoassinado e um adquirido é simples: o adquirido foi assinado por uma Autoridade de Certificação que seu navegador já conhece. Em outras palavras, seu navegador pode validar facilmente a autenticidade de um certificado adquirido.

Infelizmente, isso levou a um equívoco comum de que os certificados autoassinados são inerentemente menos seguros do que os vendidos por CAs comerciais, como GoDaddy e Verisign, e que você deve viver com avisos / exceções do navegador, se os usar; isso está incorreto .

Se você distribuir com segurança um certificado autoassinado (ou certificado da CA, como sugerido por bobince) e instalá-lo nos navegadores que usarão seu site , ele é tão seguro quanto um que foi comprado e não é vulnerável ao man-in-the-middle ataques e falsificações de certificados. Obviamente, isso significa que só é possível se apenas algumas pessoas precisarem de acesso seguro ao seu site (por exemplo, aplicativos internos, blogs pessoais etc.).

Clint Harris
fonte
1
De fato, distribuir com segurança seu próprio certificado é uma maneira de esfolar o gato, mas uma maneira muito mais fácil é ir a qualquer uma das diversas CAs "abertas". CACert.org é o meu favorito. Desde que você confie nas etapas que eles tomam para proteger a emissão de certificados, a importação do certificado raiz é segura.
Nsayer
6
Adoro esse comentário - infelizmente, destaca uma fraqueza muito importante com as autoridades de certificação. Digamos que você importe um certificado de CA de Bob Smith - bem, Bob Smith pode assinar um certificado para qualquer domínio (incluindo google.com e chase.com). É por isso que a GoDaddy / Verisign paga muito dinheiro para ser incluída no sistema operacional - eles são examinados por uma equipe de segurança para garantir que eles tenham verificações no local para garantir que não assinem um certificado para uma pessoa mal-intencionada. Eu acho que você deve poder dizer "essa autoridade de certificação só pode assinar certificados para mysite.com".
Natalie Adams #
O certificado autoassinado não é mais seguro, pois as autoridades de certificação lá fora podem ser pagas para assinar algo que não deveriam ter. Se você pode distribuir com segurança os certificados da CA para os pontos finais, sempre use certificados autoassinados.
javaPhobic
Existe alguma autoridade de certificação gratuita e verificada na maioria dos principais navegadores? Estou procurando um certificado básico apenas para verificar se possuo um email e nome de domínio. Os que eu encontrei não estão nos principais navegadores.
Alex Kwitny
@NathanAdams Em teoria os grandes CAs são supostos pedidos veterinário para evitar a emissão de certificados falsos como você descreve ... mas ler esta história: stripe.ian.sh
nsayer
38

Você disse aquilo

o navegador obtém as informações do emissor do certificado e o usa para entrar em contato com o emissor e, de alguma forma, compara os certificados quanto à validade.

O cliente não precisa verificar com o emissor porque duas coisas:

  1. todos os navegadores têm uma lista pré-instalada de todas as principais chaves públicas de autoridades de certificação
  2. o certificado é assinado e essa assinatura é prova suficiente de que o certificado é válido porque o cliente pode garantir, por conta própria e sem entrar em contato com o servidor do emissor, que esse certificado é autêntico. Essa é a beleza da criptografia assimétrica.

Observe que 2. não pode ser feito sem 1.

Isso é melhor explicado neste grande diagrama que fiz há algum tempo

(pule para "o que é uma assinatura?", na parte inferior)

blob

ychaouche
fonte
9
Essa deveria ter sido a resposta aceita. A resposta de @Eli Courtwright é uma maneira de entender rapidamente como os certificados funcionam.
Felix Crazzolara
Ler isso uma vez pode não ser suficiente, mas se você já conhece os bits e partes do SSL, isso realmente reúne tudo. Bom trabalho!
Cameron Gagnon
Imagem fantástica. Finalmente, algo que explica minhas perguntas. Em todos os lugares em que vou aprofundar, apenas disse "o navegador verifica se o certificado está correto". MAS COMO FAZ ISSO? Isso dá uma resposta.
ori6151 13/04
8

O cliente possui um armazenamento pré-semeado de chaves públicas das autoridades de certificação SSL. Deve haver uma cadeia de confiança do certificado para o servidor até as autoridades intermediárias até um dos chamados certificados "raiz" para que o servidor seja confiável.

Você pode examinar e / ou alterar a lista de autoridades confiáveis. Geralmente, você faz isso para adicionar um certificado a uma autoridade local em que você confia - como a empresa em que trabalha ou a escola em que estuda ou o que não.

A lista pré-propagada pode variar dependendo do cliente que você usa. Os grandes fornecedores de certificados SSL garantem que seus certificados de raiz estejam em todos os principais navegadores ($$$).

Os ataques do tipo "macaco no meio" são "impossíveis", a menos que o invasor tenha a chave privada de um certificado raiz confiável. Como os certificados correspondentes são amplamente implantados, a exposição de uma chave privada teria sérias implicações para a segurança do comércio eletrônico em geral. Por esse motivo, essas chaves privadas são muito, muito bem guardadas.

nsayer
fonte