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.com
test ettiğiniz SNI değeri nerede ve test www.YOURSERVER.com
ettiğ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.com
bağlantı noktası 443
. Bu -tlsextdebug
seçenek, TLS uzantılı hata ayıklama çıkışını açar. -servername
Seçenek anlatır s_client
geçmek programı www.SERVERNAME.com
TLS el sıkışması sırasında ClientHello pakette SNI alanın değeri olarak.
Son olarak, 2>/dev/null
sadece stderr çıkışını gizler (bu gürültülü olabilir) ve | grep "server name"
boru hattı stdout'u, s_client
TLS 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, -servername
sunucunun SNI bilgisiyle yanıt vermesi gereken seçenekde bir etki alanı adı kullandığınızı kontrol edin .
-servername
ya 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?
-msg
ek olarak geçmeniz ve "Alert" için greplemeniz gerekir . Eğer -servername
yanlış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.
-msg
Anahtar, 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/null
iş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 -msg
diğ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.
openssl
Sertifika almak ve sorgulamak için kullanabilirsiniz .
openssl s_client -connect
openssl x509
grep
"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:443
Qualys SSL testi sırasında SNI kullanmanın bir göstergesi verilmiştir .