Saya mencari cara sederhana untuk mengetahui apakah server menggunakan ekstensi SSL Indikasi Nama Server untuk sertifikat HTTPS di situs web. Metode yang menggunakan peramban atau baris perintah Unix baik-baik saja.
Terima kasih!
SNI dimulai oleh klien, jadi Anda membutuhkan klien yang mendukungnya. Kecuali Anda menggunakan windows XP, browser Anda akan melakukannya. Jika klien Anda memungkinkan Anda men-debug koneksi SSL dengan benar (sayangnya, bahkan perintah gnutls / openssl CLI tidak), Anda dapat melihat apakah server mengirim kembali bidang nama server dalam halo yang diperluas. Perhatikan bahwa tidak adanya bidang ini hanya berarti bahwa server tidak menggunakan nama_dalam server halo untuk membantu memilih sertifikat, bukan karena tidak mendukungnya.
Jadi, dalam praktiknya tes termudah adalah dengan hanya mencoba menghubungkan. Untuk ini, Anda perlu tahu dua nama yang memutuskan untuk IP yang sama, di mana koneksi ssl dapat dibuat. https paling mudah karena Anda kemudian dapat menelusuri kedua nama dan melihat apakah Anda disajikan dengan sertifikat yang benar.
Ada tiga hasil:
Tes yang sedikit lebih rumit yang akan menghasilkan lebih banyak info adalah untuk membuka dan menangkap wireshark saat menjelajah. Anda kemudian dapat menemukan paket yang relevan dengan memfilter untuk ssl.handshake. Screenshot di bawah ini adalah contoh dari pasangan halo klien / server halo di mana SNI didukung:
Sekali lagi, tentu saja tidak adanya bidang nama server di server halo tidak menunjukkan bahwa SNI tidak didukung. Hanya bahwa server_name yang disediakan klien tidak digunakan dalam memutuskan sertifikat yang akan digunakan.
openssl
. Beberapa perincian tersedia:openssl s_client -servername alice.sni.velox.ch -tlsextdebug -msg -connect alice.sni.velox.ch:443
Beberapa indikasi penggunaan SNI diberikan selama uji Qualys SSL .Satu liner yang mungkin Anda cari untuk mendeteksi keberadaan header ekstensi Indikasi Nama Server SSL / TLS adalah:
di mana
www.SERVERNAME.com
nilai SNI yang Anda uji danwww.YOURSERVER.com
merupakan nama domain atau alamat IP dari server berkemampuan TLS yang Anda uji.Baris perintah menggunakan
openssl
'ss_client
(lihat s_client (1) ) untuk terhubung ke server diwww.YOURSERVER.com
port443
. The-tlsextdebug
bergantian pilihan pada ekstensi TLS debugging output. The-servername
pilihan menceritakans_client
program untuk luluswww.SERVERNAME.com
sebagai nilai field SNI dalam paket ClientHello selama jabat tangan TLS.Akhirnya,
2>/dev/null
cukup sembunyikan output stderr (yang bisa berisik), dan| grep "server name"
pipa filter stdout untuk menampilkan ekstensi TLS yang disebut "nama server" dis_client
output debugging ekstensi TLS.Jika Anda melihat garis output seperti
kemudian server mengembalikan informasi header SNI dalam respons ServerHello-nya. Jika tidak, maka kemungkinan server tidak mendukung SNI atau belum dikonfigurasi untuk mengembalikan informasi SNI mengingat nama yang Anda minta. Dalam hal ini, periksa kembali apakah Anda menggunakan nama domain pada
-servername
opsi yang seharusnya ditanggapi oleh server dengan informasi SNI.sumber
-servername
atau tidak.-servername sdfsdlkfjsdf23.somedomain.somewhere -connect realhost.somedomain.somewhere
=TLS server extension "server name" (id=0), len=0
(Dan output yang sama jika mereka cocok.) Bagaimana Anda memverifikasi itu tidak cocok dengan host di server dari output?-msg
tambahan pada parameter di atas dan menerima "Peringatan". Jika-servername
salah, Anda akan mendapatkan sesuatu sepertiTLS 1.2 Alert ... warning unrecognized_name
dari server. @ Meitar Saya pikir jika Anda menambahkannya ke jawaban akan bermanfaat bagi orang lain.-msg
Switch hanya menambahkan hexdump pesan protokol TLS. Tidak perlu mengamati kesalahan jabat tangan TLS, jadi tidak benar untuk menambahkan jawaban ini. Selain itu, kesalahan jabat tangan TLS seperti ini dicetak ke STDOUT, yang berarti bahwa2>/dev/null
perlu dihapus dari jawaban agar dapat diprosesgrep
terlebih dahulu. Apa yang sebenarnya diminta oleh @bshea adalah "Bagaimana cara mendeteksi kesalahan TLS?" yang merupakan pertanyaan yang sepenuhnya berbeda dengan pertanyaan "Apakah server ini menggunakan fitur SNI dari protokol TLS?" yang merupakan topik di sini.STDERR
ke file teks, saya tidak mendapatkan kesalahan itu di sana. Tanpa-msg
saya tidak dapat menemukan opsi lain yang menunjukkan pesan jabat tangan. (menggunakan openssl 1.0.2q). Selama relevansi dengan jawaban Anda mungkin benar.Anda dapat menggunakan
openssl
untuk mengambil dan menanyakan sertifikat.openssl s_client -connect
openssl x509
grep
untuk menemukan info "DNS:"openssl s_client -connect alice.sni.velox.ch:443 | openssl x509 -noout -text | grep DNS:
Baris terakhir menunjukkan semua entri SNI yang ada dalam sertifikat:
sumber
DNS:...
entri pada baris terakhir menunjukkan semua nama SNI berlaku dalam sertifikat.