O SNI é iniciado pelo cliente, então você precisa de um cliente que o suporte. A menos que você esteja no Windows XP, o seu navegador fará. Se o seu cliente permitir que você depure as conexões SSL corretamente (infelizmente, mesmo os comandos CLI gnutls / openssl não), você pode ver se o servidor envia de volta um campo server_name no hello estendido. Observe que a ausência desse campo significa apenas que o servidor não usou o server_name no cliente hello para ajudar a escolher um certificado, não que ele não o suporte.
Então, na prática, o teste mais fácil é simplesmente tentar se conectar. Para isso, você precisa saber dois nomes que resolvem o mesmo IP, para o qual uma conexão ssl pode ser feita. O https é o mais fácil possível, basta procurar os dois nomes e ver se recebeu o certificado correto.
Existem três resultados:
- Você obtém um certificado curinga (ou um com um subjectAltName) que abrange os dois nomes: você não aprende nada
- Você obtém o certificado errado para pelo menos um deles: o servidor não suporta SNI ou foi configurado incorretamente
- Você obtém dois certificados diferentes, ambos para o nome correto: o SNI é suportado e está configurado corretamente.
Um teste um pouco mais complicado, que dará mais informações, é ter o wireshark aberto e capturado durante a navegação. Você pode então encontrar os pacotes relevantes filtrando o arquivo ssl.handshake. As capturas de tela abaixo são um exemplo de um par hello / servidor hello do cliente em que o SNI é suportado:
Novamente, é claro que a ausência de um campo server_name no servidor hello não indica que o SNI não é suportado. Apenas que o server_name fornecido pelo cliente não foi usado para decidir qual certificado usar.