O problema de hospedar vários sites SSL em um único endereço IP é que a troca de certificados SSL acontece primeiro, antes da instrução GET, que permite ao servidor da Web saber qual site você está segmentando.
Embora você digite o nome do link no seu navegador, o nome é resolvido para o endereço IP e uma sessão SSL é iniciada para o endereço IP. O URL específico que estamos segmentando não pode fazer parte de um handshake SSL padrão, caso contrário, isso seria visível para os bisbilhoteiros. Portanto, o servidor da Web não pode saber qual certificado usar e, portanto, geralmente usa o primeiro.
O SNI é uma extensão do TLS / SSL que permite que o nome do host seja incluído na negociação da sessão. Isso é amplamente suportado em clientes e servidores nos dias de hoje. Embora isso torne o nome do host visível para bisbilhoteiros, ele é considerado aceitável porque inclui apenas o nome do host em vez do URL completo (que pode conter informações confidenciais) e muito provavelmente você fez uma pesquisa de DNS não criptografada para o nome do host imediatamente antes de iniciar o Sessão SSL.
No Apache, existem três etapas:
- Não use um site padrão em 443
- Use as diretivas ServerName na sua: 443 definição de host virtual
- Certifique-se de que o Apache seja criado com um OpenSSL recente
Você receberá uma mensagem nos logs de erro do Apache se não for criada com suporte a SNI:
You should not use name-based virtual hosts in conjunction with SSL!!
Se tudo estiver bem, você obterá o seguinte nos registros:
[warn] Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)