Bir sunucunun, bir web sitesindeki HTTPS sertifikası için Sunucu Adı Göstergesi SSL uzantısını kullanıp kullanmadığını bilmek için basit bir yol arıyorum. Bir tarayıcı veya Unix komut satırı kullanan bir yöntem iyidir.
Teşekkürler!
Bir sunucunun, bir web sitesindeki HTTPS sertifikası için Sunucu Adı Göstergesi SSL uzantısını kullanıp kullanmadığını bilmek için basit bir yol arıyorum. Bir tarayıcı veya Unix komut satırı kullanan bir yöntem iyidir.
Teşekkürler!
Yanıtlar:
SNI müşteri tarafından başlatılır, bu nedenle onu destekleyen bir müşteriye ihtiyacınız vardır. Windows XP’de değilseniz, tarayıcınız Müşteriniz SSL bağlantılarını doğru şekilde hata ayıklamanıza izin veriyorsa (ne yazık ki, gnutls / openssl CLI komutları bile yapmaz), sunucunun genişletilmiş merhabada bir server_name alanı gönderip göndermeyeceğini görebilirsiniz. Unutmayın, bu alanın olmaması, sunucunun bir sertifika almaya yardımcı olmak için istemcideki sunucu_adı'nı kullanmadığı, onu desteklemediği anlamına gelir.
Bu yüzden pratikte en kolay test bağlantı kurmayı denemektir. Bunun için, bir ssl bağlantısının yapılabileceği aynı IP'ye çözümlenen iki isim bilmeniz gerekir. https, her iki isme de göz atabileceğiniz ve doğru sertifikayla sunulmuş olup olmadığınızı görebildiğiniz için en kolay yoldur.
Üç sonuç vardır:
Daha fazla bilgi verecek olan biraz daha karmaşık bir test, tarama sırasında tellerin açık olması ve yakalanmasıdır. Daha sonra ilgili paketleri ssl.handshake için filtreleyerek bulabilirsiniz. Aşağıdaki ekran görüntüleri SNI'nin desteklendiği bir müşteri merhaba / sunucu merhaba çifti örneğidir:

Yine, tabii ki sunucuda bir server_name alanının olmaması Merhaba, SNI'nin desteklenmediğini göstermez. Yalnızca istemci tarafından sağlanan sunucu_adı, hangi sertifikanın kullanılacağına karar vermede kullanılmadı.
Bir SSL / TLS Sunucu Adı Belirtme uzantısı başlığının varlığını tespit etmek için muhtemelen aradığınız liner:
openssl s_client -servername www.SERVERNAME.com -tlsextdebug -connect www.YOURSERVER.com:443 2>/dev/null | grep "server name"
www.SERVERNAME.comtest ettiğiniz SNI değeri nerede ve test www.YOURSERVER.comettiğiniz TLS özellikli sunucunun alan adı veya IP adresi.
Komut satırı kullanımları openssl'in s_client(bakınız s_client (1) ) sunucuya bağlanmak için www.YOURSERVER.combağlantı noktası 443. Bu -tlsextdebugseçenek, TLS uzantılı hata ayıklama çıkışını açar. -servernameSeçenek anlatır s_clientgeçmek programı www.SERVERNAME.comTLS el sıkışması sırasında ClientHello pakette SNI alanın değeri olarak.
Son olarak, 2>/dev/nullsadece stderr çıkışını gizler (bu gürültülü olabilir) ve | grep "server name"boru hattı stdout'u, s_clientTLS uzantısı hata ayıklama çıktısında "sunucu adı" olarak adlandırılan TLS uzantısını görüntülemek için filtreler .
Gibi bir çıkış hattı görürseniz
TLS server extension "server name" (id=0), len=0
daha sonra sunucu SNI başlık bilgisini ServerHello yanıtında döndürüyor. Bunu yapmazsanız, sunucu ya SNI'yi desteklemiyor olabilir ya da istediğiniz isim verilen SNI bilgisini döndürecek şekilde yapılandırılmamış olabilir. Bu durumda, -servernamesunucunun SNI bilgisiyle yanıt vermesi gereken seçenekde bir etki alanı adı kullandığınızı kontrol edin .
-servernameya da kullanmasam da çıktı aynı . -servername sdfsdlkfjsdf23.somedomain.somewhere -connect realhost.somedomain.somewhere= TLS server extension "server name" (id=0), len=0(Eşleşirlerse aynı çıktı.) Sunucudaki bir ana makinenin çıktıdan eşleşmediğini nasıl doğrularsınız?
-msgek olarak geçmeniz ve "Alert" için greplemeniz gerekir . Eğer -servernameyanlışsa TLS 1.2 Alert ... warning unrecognized_name, sunucudan bir şey alacaksınız . @Meitar Cevabı eklerseniz diğer insanlar için faydalı olacağını düşünüyorum.
-msgAnahtar, sadece TLS protokolü mesajlarının hexdump'ını ekler. Bir TLS el sıkışma hatasını gözlemlemek gerekmez, bu nedenle bu cevaba eklemek yanlış olur. Dahası, bunun gibi TLS anlaşması hataları STDOUT'a basılmıştır; bu , ilk etapta 2>/dev/nullişlenmesi için cevabın cevaptan kaldırılması gerektiği anlamına gelir grep. Aslında sormak istediğim bshea, "TLS hatalarını nasıl tespit edebilirim?" "Bu sunucu TLS protokolünün SNI özelliğini kullanıyor mu?" sorusuna tamamen farklı bir sorudur. Burada konu nedir.
STDERR, bir metin dosyasına yönlendirmek bile olsa , o hatayı alamıyorum. Olmadan -msgdiğer seçenek olduğunu gösterir tokalaşma mesajları bulamadık. (openssl 1.0.2q kullanılarak). Cevabın uygunluğu sürece haklı olabilirsin.
opensslSertifika almak ve sorgulamak için kullanabilirsiniz .
openssl s_client -connectopenssl x509grep "DNS:" bilgisini bulmak içinopenssl s_client -connect alice.sni.velox.ch:443 | openssl x509 -noout -text | grep DNS:
% openssl s_client -connect alice.sni.velox.ch:443 | openssl x509 -noout -text | grep DNS:
depth=2 C = BM, O = QuoVadis Limited, CN = QuoVadis Root CA 2
verify return:1
depth=1 C = BM, O = QuoVadis Limited, CN = QuoVadis Global SSL ICA G2
verify return:1
depth=0 C = CH, ST = Zuerich, L = Zuerich, O = Kaspar Brand, CN = alice.sni.velox.ch
verify return:1
DNS:alice.sni.velox.ch, DNS:carol.sni.velox.ch
Son satır, sertifikada bulunan tüm SNI girişlerini gösterir:
DNS:alice.sni.velox.ch, DNS:carol.sni.velox.ch
DNS:... Son satırında girişler tüm sertifikada geçerli SNI adlarını gösterir.
openssl. Bazı detaylar mevcuttur:openssl s_client -servername alice.sni.velox.ch -tlsextdebug -msg -connect alice.sni.velox.ch:443Qualys SSL testi sırasında SNI kullanmanın bir göstergesi verilmiştir .