El cliente inicia SNI, por lo que necesita un cliente que lo admita. A menos que esté en Windows XP, su navegador funcionará. Si su cliente le permite depurar las conexiones SSL correctamente (lamentablemente, incluso los comandos gnutls / openssl CLI no lo hacen), puede ver si el servidor devuelve un campo nombre_servidor en el saludo extendido. Tenga en cuenta que la ausencia de este campo solo significa que el servidor no usó el nombre_servidor en el saludo del cliente para ayudar a elegir un certificado, no que no lo admita.
Entonces, en la práctica, la prueba más fácil es simplemente intentar conectarse. Para esto, necesita conocer dos nombres que se resuelven en la misma IP, a los que se puede hacer una conexión SSL. https es lo más fácil, ya que puede simplemente buscar ambos nombres y ver si se le presenta el certificado correcto.
Hay tres resultados:
- Obtiene un certificado comodín (o uno con un subjectAltName) que cubre ambos nombres: no aprende nada
- Obtiene el certificado incorrecto para al menos uno de ellos: o el servidor no admite SNI o se ha configurado incorrectamente
- Obtiene dos certificados diferentes, ambos para el nombre correcto: SNI es compatible y está configurado correctamente.
Una prueba un poco más complicada que generará más información es tener cables abiertos y capturar mientras navega. Luego puede encontrar los paquetes relevantes filtrando por ssl.handshake. Las capturas de pantalla a continuación son un ejemplo de un par de saludo de cliente / saludo de servidor donde se admite SNI:
Nuevamente, por supuesto, la ausencia de un campo nombre_servidor en el servidor hola no indica que SNI no sea compatible. Simplemente que el nombre de servidor proporcionado por el cliente no se usó para decidir qué certificado usar.
Dennis Kaarsemaker
fuente
openssl
. Algunos detalles están disponibles: se proporcionaopenssl s_client -servername alice.sni.velox.ch -tlsextdebug -msg -connect alice.sni.velox.ch:443
alguna indicación de uso de SNI durante la prueba Qualys SSL .El único revestimiento que probablemente esté buscando para detectar la presencia de un encabezado de extensión de indicación de nombre de servidor SSL / TLS es:
donde
www.SERVERNAME.com
está el valor SNI que está probando ywww.YOURSERVER.com
es el nombre de dominio o la dirección IP del servidor compatible con TLS que está probando.La línea de comando usa
openssl
'ss_client
(vea s_client (1) ) para conectarse al servidor enwww.YOURSERVER.com
el puerto443
. La-tlsextdebug
opción activa la salida de depuración de la extensión TLS. La-servername
opción le dice als_client
programa que pasewww.SERVERNAME.com
como el valor del campo SNI en el paquete ClientHello durante el protocolo de enlace TLS.Finalmente,
2>/dev/null
simplemente oculta la salida stderr (que puede ser ruidosa), y la| grep "server name"
tubería filtra stdout para mostrar la extensión TLS llamada "nombre del servidor" ens_client
la salida de depuración de la extensión TLS.Si ve una línea de salida como
entonces el servidor está devolviendo la información del encabezado SNI en su respuesta ServerHello. Si no lo hace, es posible que el servidor no sea compatible con SNI o que no haya sido configurado para devolver información SNI dado el nombre que está solicitando. En este caso, verifique que esté usando un nombre de dominio en la
-servername
opción que el servidor debe responder con información SNI.fuente
-servername
o no.-servername sdfsdlkfjsdf23.somedomain.somewhere -connect realhost.somedomain.somewhere
=TLS server extension "server name" (id=0), len=0
(Y la misma salida si coinciden). ¿Cómo verifica que no coincide con un host en el servidor de la salida?-msg
además de los parámetros anteriores y grep para "Alert". Si-servername
está mal, obtendrá algo comoTLS 1.2 Alert ... warning unrecognized_name
del servidor. @Meitar Creo que si agrega eso a la respuesta será útil para otras personas.-msg
interruptor simplemente agrega un hexdump de mensajes de protocolo TLS. No es necesario observar un error de protocolo de enlace TLS, por lo que sería incorrecto agregar a esta respuesta. Además, los errores de apretón de manos de TLS como este se imprimen en STDOUT, lo que significa que2>/dev/null
debería eliminarse de la respuesta para poder procesarlagrep
en primer lugar. Lo que @bshea realmente está preguntando es "¿Cómo detecto los errores de TLS?" que es una pregunta completamente diferente a la pregunta de "¿Este servidor utiliza la función SNI del protocolo TLS?" cuál es el tema aquí.STDERR
a un archivo de texto, no obtengo ese error allí. Sin-msg
no pude encontrar otra opción que muestra los mensajes de apretón de manos. (usando openssl 1.0.2q). Siempre y cuando la relevancia para la respuesta tenga razón.Puede usar
openssl
para buscar y consultar el certificado.openssl s_client -connect
openssl x509
grep
para encontrar la información "DNS:"openssl s_client -connect alice.sni.velox.ch:443 | openssl x509 -noout -text | grep DNS:
La última línea muestra todas las entradas de SNI presentes en el certificado:
fuente
DNS:...
entradas en la última línea muestran todos los nombres SNI válidos en el certificado.