Sim, mas existem algumas ressalvas.
Isso é feito através da Indicação de nome do servidor, uma extensão do Transport Layer Security.
O que é indicação de nome de servidor?
A indicação de nome de servidor ( RFC 6066 ; obsoleta RFC 4366 , RFC 3546 ) é uma extensão do Transport Layer Security que permite ao cliente informar ao servidor o nome do host que está tentando acessar.
O SNI é compatível com o TLS 1.0 e superior, de acordo com as especificações, mas as implementações podem variar (veja abaixo). Ele não pode ser usado com SSL, portanto, uma conexão deve negociar o TLS (consulte o RFC 4346 apêndice E ) para que o SNI seja usado. Isso geralmente acontece automaticamente com o software suportado.
Por que o SNI é necessário?
Em uma conexão HTTP normal , o navegador informa ao servidor o nome do host do servidor que está tentando acessar usando o Host:
cabeçalho. Isso permite que um servidor da Web em um único endereço IP sirva conteúdo para vários nomes de host, geralmente conhecidos como hospedagem virtual baseada em nome .
A alternativa é atribuir endereços IP exclusivos para cada nome de host da web a ser exibido. Isso era comum nos primeiros dias da Web, antes de ser amplamente conhecido que os endereços IP acabavam e as medidas de conservação começavam, e ainda é feito dessa maneira para hosts virtuais SSL (não usando SNI).
Como esse método de transmissão do nome do host exige que a conexão já esteja estabelecida, ele não funciona com conexões SSL / TLS. No momento em que a conexão segura é configurada, o servidor da Web já deve saber qual nome de host será veiculado no cliente, porque o próprio servidor da Web está configurando a conexão segura.
A SNI resolve esse problema fazendo com que o cliente transmita o nome do host como parte da negociação TLS, para que o servidor já esteja ciente de qual host virtual deve ser usado para atender à conexão. O servidor pode então usar o certificado e a configuração para o host virtual correto.
Por que não usar endereços IP diferentes?
O Host:
cabeçalho HTTP foi definido para permitir a exibição de mais de um host da Web a partir de um único endereço IP devido à falta de endereços IPv4, reconhecidos como um problema desde meados da década de 90. Em ambientes de hospedagem compartilhada, centenas de sites exclusivos e não relacionados podem ser exibidos usando um único endereço IP dessa maneira, economizando espaço de endereço.
Os ambientes de hospedagem compartilhada descobriram que o maior consumidor de espaço de endereço IP era a necessidade de sites seguros terem endereços IP exclusivos, criando a necessidade de SNI como uma medida de interrupção no caminho para o IPv6. Hoje, às vezes, é difícil obter até 5 endereços IP (/ 29) sem justificativa significativa, geralmente resultando em atrasos na implantação.
Com o advento do IPv6, essas técnicas de conservação de endereço não são mais necessárias, pois um único host pode ter mais endereços IPv6 atribuídos a ele do que toda a Internet contém hoje, mas as técnicas provavelmente ainda serão usadas no futuro para atender ao IPv4 legado. conexões.
Ressalvas
Algumas combinações de sistema operacional / navegador não suportam SNI (veja abaixo), portanto, o uso de SNI não é apropriado para todas as situações. Os sites direcionados a essas combinações de sistema / navegador teriam que renunciar ao SNI e continuar usando endereços IP exclusivos para cada host virtual.
Vale ressaltar que nenhuma versão do Internet Explorer no Windows XP suporta SNI. Como essa combinação ainda representa uma parte significativa (mas em constante redução; cerca de 16% do tráfego da Internet em dezembro de 2012, de acordo com o NetMarketShare) do tráfego da Internet, o SNI seria inadequado para um site direcionado a essas populações de usuários.
Apoio, suporte
Muitos, mas não todos, pacotes de software comumente usados suportam SNI.
(A omissão nesta lista não significa necessariamente falta de suporte; significa que havia um limite para o quanto eu poderia digitar ou não consegui encontrar rapidamente as informações em uma pesquisa. Se o seu pacote de software não estiver listado, procure pelo nome plus sni
deve revelar se existe suporte e como configurá-lo.)
Suporte da Biblioteca
A maioria dos pacotes depende de uma biblioteca externa para fornecer suporte a SSL / TLS.
- GNU TLS
- JSSE (Oracle Java) 7 ou superior, apenas como um cliente
- libcurl 7.18.1 ou superior
- NSS 3.1.1 ou superior
- OpenSSL 0.9.8j ou superior
- OpenSSL 0.9.8f ou superior, com sinalizadores de configuração
- Qt 4.8 ou superior
Suporte ao servidor
As versões mais recentes do popular software de servidor suportam SNI. As instruções de configuração estão disponíveis para a maioria destes:
Suporte ao Cliente
Os navegadores da Web mais atuais e os agentes de usuário da linha de comando suportam SNI.
Área de Trabalho
- Chrome 5 ou superior
- Chrome 6 ou superior no Windows XP
- Firefox 2 ou superior
- Internet Explorer 7 ou superior, executando no Windows Vista / Server 2008 ou superior
- O Internet Explorer no Windows XP não suporta SNI, independentemente da versão do IE
- Konqueror 4.7 ou superior
- Opera 8 ou superior (pode exigir que o TLS 1.1 esteja ativado para funcionar)
- Safari 3.0 no Windows Vista / Server 2008 ou superior, ou Mac OS X 10.5.6 ou superior
Móvel
- Navegador Android em 3.0 Honeycomb ou superior
- iOS Safari no iOS 4 ou superior
- Windows Phone 7 ou superior
Linha de comando
- cURL 7.18.1 ou superior
- wget 1.14 ou superior (as distribuições podem ter suportado um patch para suporte SNI)
Sem suporte
- Navegador BlackBerry
- Internet Explorer (qualquer versão) no Windows XP
(Nota: algumas informações para esta resposta foram obtidas na Wikipedia .)