SNI wird vom Client initiiert, daher benötigen Sie einen Client, der dies unterstützt. Sofern Sie nicht mit Windows XP arbeiten, funktioniert dies in Ihrem Browser. Wenn Ihr Client das Debuggen von SSL-Verbindungen ordnungsgemäß zulässt (leider nicht einmal die CLI-Befehle gnutls / openssl), können Sie im erweiterten Hallo sehen, ob der Server ein Feld server_name zurücksendet. Beachten Sie, dass das Fehlen dieses Felds nur bedeutet, dass der Server den Servernamen im Client nicht verwendet hat, um ein Zertifikat auszuwählen, und nicht, dass es dieses nicht unterstützt.
In der Praxis ist es also am einfachsten, eine Verbindung herzustellen. Dazu müssen Sie zwei Namen kennen, die sich zu derselben IP auflösen, zu der eine SSL-Verbindung hergestellt werden kann. https ist am einfachsten, da Sie dann einfach zu beiden Namen navigieren und feststellen können, ob Ihnen das richtige Zertifikat vorliegt.
Es gibt drei Ergebnisse:
- Sie erhalten ein Wildcard-Zertifikat (oder eines mit einem subjectAltName), das beide Namen abdeckt: Sie lernen nichts
- Für mindestens eines von ihnen erhalten Sie das falsche Zertifikat: Entweder unterstützt der Server kein SNI oder es wurde falsch konfiguriert
- Sie erhalten zwei verschiedene Zertifikate, beide für den richtigen Namen: SNI wird unterstützt und korrekt konfiguriert.
Ein etwas komplizierterer Test, der mehr Informationen liefert, besteht darin, dass wireshark geöffnet ist und beim Browsen erfasst wird. Sie können dann die relevanten Pakete finden, indem Sie nach ssl.handshake filtern. Die folgenden Screenshots zeigen ein Beispiel für ein Client-Hallo / Server-Hallo-Paar, bei dem SNI unterstützt wird:
Auch hier bedeutet das Fehlen eines server_name-Felds im server hello natürlich nicht, dass SNI nicht unterstützt wird. Lediglich, dass der vom Client bereitgestellte Servername bei der Entscheidung, welches Zertifikat verwendet werden soll, nicht verwendet wurde.
Dennis Kaarsemaker
quelle
openssl
. Einige Details sind verfügbar:openssl s_client -servername alice.sni.velox.ch -tlsextdebug -msg -connect alice.sni.velox.ch:443
Einige Hinweise zur Verwendung von SNI werden während des Qualys SSL-Tests gegeben .Der eine Liner, nach dem Sie wahrscheinlich suchen, um das Vorhandensein eines Erweiterungsheaders für die SSL / TLS-Servername-Anzeige zu erkennen, ist:
Dabei
www.SERVERNAME.com
handelt es sich um den SNI-Wert, den Sie testen, undwww.YOURSERVER.com
um den Domänennamen oder die IP-Adresse des TLS-fähigen Servers, den Sie testen.Die Befehlszeile verwendet
openssl
'ss_client
(siehe s_client (1) ), um eine Verbindung zum Server an einemwww.YOURSERVER.com
Port herzustellen443
. Die-tlsextdebug
Option aktiviert die TLS-Erweiterungs-Debugging-Ausgabe. Die-servername
Option weist dass_client
Programm an,www.SERVERNAME.com
während des TLS-Handshakes als Wert des SNI-Felds im ClientHello-Paket zu übergeben.Schließlich wird
2>/dev/null
die stderr-Ausgabe (die laut sein kann) einfach ausgeblendet, und die| grep "server name"
Pipeline filtert stdout, um die TLS-Erweiterung mit dem Namen "Servername" ins_client
der TLS-Erweiterungs-Debugging-Ausgabe anzuzeigen .Wenn Sie eine Ausgabezeile sehen, wie z
dann gibt der Server in seiner ServerHello-Antwort SNI-Header-Informationen zurück. Andernfalls unterstützt der Server möglicherweise weder SNI noch wurde er so konfiguriert, dass er SNI-Informationen mit dem von Ihnen gewünschten Namen zurückgibt. Stellen Sie in diesem Fall sicher, dass Sie einen Domänennamen in der
-servername
Option verwenden, über die der Server mit SNI-Informationen antworten soll.quelle
-servername
oder nicht.-servername sdfsdlkfjsdf23.somedomain.somewhere -connect realhost.somedomain.somewhere
=TLS server extension "server name" (id=0), len=0
(Und dieselbe Ausgabe, wenn sie übereinstimmt.) Wie vergewissern Sie sich, dass die Ausgabe nicht mit einem Host auf dem Server übereinstimmt?-msg
zusätzlich zu den oben genannten Parametern übergehen und nach "Alert" greifen. Wenn das nicht-servername
stimmt, bekommst du so etwasTLS 1.2 Alert ... warning unrecognized_name
vom Server. @Meitar Ich denke, wenn du das zur Antwort hinzufügst, wird es für andere Menschen nützlich sein.-msg
Switch fügt einfach einen Hexdump der TLS-Protokollnachrichten hinzu. Es ist nicht erforderlich, einen TLS-Handshake-Fehler zu beobachten, daher wäre es falsch, diese Antwort zu ergänzen. Darüber hinaus werden TLS-Handshake-Fehler wie diese an STDOUT ausgegeben, was bedeuten würde, dass der Name2>/dev/null
aus der Antwort entfernt werden müsste, damit er überhaupt verarbeitet werden kanngrep
. Nach was @bshea eigentlich fragt, ist "Wie erkenne ich TLS-Fehler?" Dies ist eine andere Frage als die Frage "Verwendet dieser Server die SNI-Funktion des TLS-Protokolls?". Welches ist das Thema hier.STDERR
Datei in eine Textdatei umleite, wird dieser Fehler dort nicht angezeigt. Ohne-msg
konnte ich keine andere Option finden, die die Handshake-Nachrichten anzeigt. (unter Verwendung von openssl 1.0.2q). Solange die Relevanz für die Antwort stimmt, haben Sie vielleicht Recht.Mit können Sie
openssl
das Zertifikat abrufen und abfragen.openssl s_client -connect
openssl x509
grep
um die "DNS:" Info zu findenopenssl s_client -connect alice.sni.velox.ch:443 | openssl x509 -noout -text | grep DNS:
Die letzte Zeile zeigt alle im Zertifikat vorhandenen SNI-Einträge:
quelle
DNS:...
Einträge in der letzten Zeile zeigen alle gültigen SNI-Namen im Zertifikat.