SNI, ou Indicação de Nome do Servidor, é um acréscimo ao protocolo de criptografia TLS que permite a um dispositivo cliente especificar o nome de domínio que está tentando alcançar na primeira etapa do handshake TLS, evitando erros de incompatibilidade de nome comum.
Após ler este artigo, você será capaz de:
Conteúdo relacionado
O que é SSL?
Handshake SSL
Tipos de certificados SSL
Criptografia de chave pública
O que é uma chave de sessão?
Assine o theNET, uma recapitulação mensal feita pela Cloudflare dos insights mais populares da internet.
Copiar o link do artigo
A SNI é como enviar um pacote para um prédio de apartamentos em vez de para uma casa. Ao enviar algo para a casa de alguém, apenas o endereço da rua é suficiente para que o pacote chegue à pessoa certa. Mas quando um pacote vai para um prédio de apartamentos, ele precisa do número do apartamento além do endereço; caso contrário, o pacote pode não ir para a pessoa certa ou pode não ser entregue.
Muitos servidores web são mais como prédios de apartamentos do que casas: eles hospedam vários nomes de domínio e, portanto, o endereço de IP por si só não é suficiente para indicar qual domínio um usuário está tentando acessar. Isso pode fazer com que o servidor mostre o certificado SSL incorreto, o que impede ou encerra uma conexão HTTPS – assim como um pacote não pode ser entregue em um endereço se a pessoa correta não assinar por ele .
Quando vários sites são hospedados em um servidor e compartilham um único endereço de IP, e cada site tem seu próprio certificado SSL, o servidor pode não saber qual certificado SSL mostrar quando um dispositivo cliente tenta se conectar com segurança a um dos sites. Isso ocorre porque o handshake SSL/TLS ocorre antes que o dispositivo cliente indique por HTTP a qual site ele está se conectando.
A Indicação de Nome do Servidor (SNI) foi projetada para resolver esse problema. A SNI é uma extensão para o protocolo TLS (anteriormente conhecido como protocolo SSL), que é usado em HTTPS. Ele está incluído no processo de handshake TLS/SSL para garantir que os dispositivos clientes possam ver o certificado SSL correto para o site que estão tentando acessar. A extensão permite especificar o hostname, ou nome de domínio, do site durante o handshake TLS, em vez de quando a conexão HTTP abre após o handshake.
Simplificando, a SNI possibilita que um dispositivo de usuário abra uma conexão segura com https://www.example.com mesmo que esse site esteja hospedado no mesmo local (mesmo endereço de IP) que https://www.something.com, https://www.another-website.com e https://www.example.io.
A SNI evita o que é conhecido como "erro de incompatibilidade de nome comum": quando um dispositivo cliente (usuário) atinge o endereço de IP correto para um site, mas o nome no certificado SSL não corresponde ao nome do site. Muitas vezes, esse tipo de erro resulta em uma mensagem de erro "Sua conexão não é privada" no navegador do usuário.
A SNI foi adicionada como uma extensão ao TLS/SSL em 2003; originalmente não fazia parte do protocolo. Quase todos os navegadores, sistemas operacionais e servidores da web são compatíveis com ela, com exceção de alguns dos navegadores e sistemas operacionais mais antigos que ainda estão em uso.
Embora SNI signifique Indicação de Nome do Servidor, o que SNI realmente "indica" é o hostname de um site, ou nome de domínio, que pode ser separado do nome do servidor web que hospeda o domínio. Na verdade, é comum que vários domínios sejam hospedados em um servidor – nesse caso eles são chamados de hostnames virtuais.
Um nome de servidor é simplesmente o nome de um computador. Para servidores web, esse nome normalmente não é visível para os usuários finais, a menos que o servidor hospede apenas um domínio e o nome do servidor seja equivalente ao nome do domínio.
Muitas vezes, um servidor web é responsável por vários hostnames – ou nomes de domínio (que são os nomes dos sites legíveis por humanos). Cada hostnameterá seu próprio certificado SSL se os sites usarem HTTPS.
O problema é que todos esses hostnames em um servidor estão no mesmo endereço de IP. Isso não é um problema em HTTP, pois assim que uma conexão TCP for aberta, o cliente indicará qual site ele está tentando acessar em uma solicitação HTTP.
Mas em HTTPS, um handshake TLS ocorre primeiro, antes que a conversa HTTP possa começar (HTTPS ainda usa HTTP – apenas criptografa as mensagens HTTP). Sem a SNI, então, não há como o cliente indicar ao servidor com qual hostname está falando. Como resultado, o servidor pode produzir o certificado SSL para o hostname incorreto. Se o nome no certificado SSL não corresponder ao nome que o cliente está tentando acessar, o navegador do cliente retornará um erro e geralmente encerrará a conexão.
O SNI adiciona o nome de domínio ao processo de handshake TLS, para que o processo TLS alcance o nome de domínio correto e receba o certificado SSL correto, permitindo que o restante do handshake TLS prossiga normalmente.
Especificamente, a SNI inclui o hostname na mensagem de saudação do cliente ou na primeira etapa de um handshake TLS.
Um hostname é o nome de um dispositivo que se conecta a uma rede. No contexto da internet, um nome de domínio, ou o nome de um site, é um tipo de hostname. Ambos são separados do endereço de IP associado com o nome de domínio.
Um hostname virtual é um hostname que não possui seu próprio endereço de IP e está hospedado em um servidor junto com outros hostnames. É "virtual" no sentido de que não possui um servidor físico dedicado, assim como a realidade virtual existe apenas digitalmente, não no mundo físico.
A SNI criptografada (ESNI) adiciona à extensão SNI criptografando a parte SNI do "Client Hello".Isso evita que qualquer pessoa que esteja espionando entre o cliente e o servidor possa ver qual certificado o cliente está solicitando, defendendo e protegendo ainda mais o cliente.A Cloudflare e o Mozilla Firefox lançaram suporte para ESNI em 2018.
Nesse caso raro, o usuário provavelmente não conseguirá acessar determinados sites e o navegador do usuário retornará uma mensagem de erro como "Sua conexão não é privada".
A grande maioria dos navegadores e sistemas operacionais são compatíveis com a SNI. Apenas versões muito antigas do Internet Explorer, versões antigas do sistema operacional BlackBerry e outras versões de software desatualizadas não são compatíveis com a SNI.
Para saber mais sobre o protocolo TLS/SSL, certificados SSL e como o HTTPS funciona, consulte O que é um certificado SSL? ou obtenha um certificado SSL gratuito da Cloudflare.