Ssl

如何檢測伺服器是否使用 SNI 進行 HTTPS?

  • June 1, 2016

我正在尋找一種簡單的方法來了解伺服器是否在網站上對其 HTTPS 證書使用伺服器名稱指示 SSL 擴展。使用瀏覽器或 Unix 命令行的方法很好。

謝謝!

SNI 是由客戶端發起的,所以你需要一個支持它的客戶端。除非您使用的是 Windows XP,否則您的瀏覽器可以。如果您的客戶端允許您正確調試 SSL 連接(遺憾的是,即使 gnutls/openssl CLI 命令也不能),您可以查看伺服器是否在擴展的 hello 中發回了 server_name 欄位。請注意,缺少此欄位僅意味著伺服器沒有使用客戶端 hello 中的 server_name 來幫助選擇證書,而不是它不支持它。

因此,在實踐中,最簡單的測試就是簡單地嘗試連接。為此,您需要知道解析為相同 IP 的兩個名稱,可以建立 ssl 連接。https 是最簡單的,因為您可以簡單地瀏覽到這兩個名稱並查看是否為您提供了正確的證書。

有三種結果:

  • 您將獲得涵蓋兩個名稱的萬用字元證書(或帶有 subjectAltName 的證書):您什麼也學不到
  • 您至少獲得了其中一個的錯誤證書:伺服器不支持 SNI 或配置錯誤
  • 您將獲得兩個不同的證書,均具有正確的名稱:支持並正確配置了 SNI。

將產生更多資訊的稍微複雜的測試是在瀏覽時打開wireshark並擷取。然後,您可以通過過濾 ssl.handshake 找到相關數據包。下面的螢幕截圖是支持 SNI 的客戶端 hello/伺服器 hello 對的範例:

客戶你好 伺服器你好

同樣,當然,伺服器 hello 中缺少 server_name 欄位並不表示不支持 SNI。只是在決定使用哪個證書時沒有使用客戶端提供的 server_name。

引用自:https://serverfault.com/questions/506177