Qual é a diferença entre os certificados SSL SAN e SNI?

21

Alguém poderia me explicar a diferença entre esses certificados de maneira simplificada? Eu li alguns artigos, mas parece que eles fazem o mesmo trabalho, ou seja, criptografar muitos domínios com um certificado.

    
por AFA Med 09.10.2016 / 11:46

4 respostas

33

SAN (Nome alternativo do assunto) faz parte do certificado X509 spec, onde o certificado possui um campo com uma lista de nomes alternativos que também são válidos para o assunto (além do nome comum único / CN). Esses nomes de campo e curinga são basicamente as duas maneiras de usar um certificado para vários nomes.

SNI (Indicação do nome do servidor) é uma extensão do protocolo TLS que é uma espécie de equivalente ao protocolo TLS do cabeçalho do host HTTP. Quando um cliente envia isso, ele permite que o servidor escolha o certificado apropriado para apresentar ao cliente sem ter a limitação de usar endereços IP separados no lado do servidor (muito parecido com o modo como o cabeçalho do host HTTP é muito usado para HTTP simples).

Observe que o SNI não é algo que é refletido no certificado e realmente alcança o oposto do que a pergunta pede; simplifica ter muitos certificados, não usando um certificado para muitas coisas.

Por outro lado, depende muito da situação em que o caminho é realmente preferível. Por exemplo, o que a pergunta pede quase certamente não é o que você realmente quer se precisar de certificados para diferentes entidades.

    
por 09.10.2016 / 13:53
13

SAN significa Subject Alternative Name , e é uma propriedade de certificado x509 e SNI é um recurso que o cliente SSL / TLS pode suporte, portanto, uma entidade totalmente diferente.

Usando um certificado com SAN , você pode hospedar vários sites habilitados para HTTPS em um endereço IP, mesmo que o cliente não suporte o SNI . Nesse caso, você tem um certificado para todos os seus sites, e esse certificado deve conter todos os nomes de sites ( ServerName s ou ServerAlias es nas coordenadas do apache ou server_name no nginx), pois é SANs . Este é um subconjunto de uma abordagem legada, a que estendeu o "um site habilitado para HTTPS em cada endereço IP separado". Atualmente apenas grandes CDNs ficam com SAN .

Usando SNI você também pode hospedar vários sites habilitados para HTTPS em um IP, você tem um certificado x509 separado para cada site e nenhum deles menciona outros nomes de sites em SAN propriedade, mas os clientes TLS (ou seja, navegadores e clientes do console, como wget ou curl ) devem suportar SNI . Essa é uma abordagem moderna, já que o último sistema operacional que não suporta SNI fora da caixa era o Windows XP com o IE 6.x, se bem me lembro. Atualmente, você pode ver a propriedade SAN se comprar o certificado wildcard - por exemplo, um certificado desse tipo *.foobar.com conterá um nome comum de *.foobar.com e uma SAN de foobar.com .

    
por 09.10.2016 / 12:55
4

Isso mistura duas partes do processo de certificado.

Uma SAN é um nome alternativo de assunto. É uma maneira de criar um certificado para vários domínios. Você simplesmente adiciona os outros domínios para os quais deseja obter um certificado no campo SAN no certificado. O navegador aceitará a validade nesses domínios também.

O SNI é a indicação do nome do servidor e faz parte do SSL. Ele permite que você hospede vários sites SSL em um único IP, porque o nome do servidor desejado é enviado com o handshake SSL e o servidor pode escolher o certificado correto para a resposta.

    
por 09.10.2016 / 12:15
0

Aqui, uma resposta (possivelmente) mais legível:

O SNI é conduzido no lado do cliente e informa ao TLS stack "Eu quero falar com um servidor cujo nome é [Servidor X]". O servidor vê esta string [Server X] e responde com um certificado apropriado. Um exemplo prático é quando um único servidor precisa atender ao tráfego de vários domínios. Também é útil se o cliente usou um IP (para evitar atrasos de pesquisa de DNS), mas o certificado CN não menciona o IP.

SAN é uma lista de "Também conhecido como" em certificados. Desta forma, o servidor pode usar um único certificado para muitos nomes. Pode-se adicionar muitos domínios ao mesmo certificado e até mesmo uma lista de IPs.

Como você pode ver, as coisas se sobrepõem. Escolher entre um ou ambos depende de onde se tem controle. Alguns clientes podem não reconhecer nomes na SAN e a única maneira de resolver isso é fornecendo certificado apropriado com base no SNI. Existem cenários em que o servidor fornece API para um único certificado ou o cliente não envia o SNI. Para esses casos, a SAN é a única saída.

Minha empresa faz uso de ambos. Eles fornecem flexibilidade e facilitam a compatibilidade com versões anteriores e futuras.

    
por 01.08.2017 / 17:21