2012-11-23 71 views

回答

0

您不清楚「TLS握手」之前「」的含義。

服務器名稱擴展名位於客戶端Hello消息中,這是客戶端發送的用於啓動握手的第一個TLS消息。由於HTTPS也始終從首先建立TLS連接開始,因此根本就沒有任何事情發生。在握手之前瞭解客戶是否具備SNI能力是根本不可能的。

您可能可以在客戶端使用JavaScript to try to detect SNI support對某些內容進行排序。這就是說,這不太可能解決您的一般問題:如果您在SNI不受支持時有回退/通配符證書,則除了事實證書是not recommended之外,其他特定證書幾乎沒有意義。如果你期望SNI,你會阻止不支持它的客戶端。

+0

您所連結的JavaScript解決方案也看起來很有趣。您可能最初可能擁有一個「瀏覽器功能」檢測頁面,然後將其重定向到適合其瀏覽器的域。我不確定如果網站有很多切入點,那麼效果會有多好,但是有趣的概念是毫無用處的。 – dana

+0

@dana - 我們通過在asp.net中使用用戶代理標題並將其與兼容的瀏覽器列表進行比較來解決問題。 –

+0

@dana,JS技巧可以用於製作瀏覽器統計信息或在用戶訪問網站前向用戶發送一條好消息。不過,這不會讓網站支持SNI。如果您的網站可以通過SNI進行訪問,則不需要SNI支持。 timmah.faase,因爲用戶代理頭只能在握手成功後才能訪問,所以不清楚如何解決你自己的問題。 – Bruno

0

如果你看看維基百科,它列出以下爲SNI兼容。

  • Internet Explorer 7或更高版本,在Windows Vista或更高版本上。不在Windows XP上的任何Internet Explorer版本中,因爲SNI依賴於隨Windows Vista附帶的SChannel系統組件。
  • 的Mozilla Firefox 2.0或更高版本
  • 歌劇院8.0(2005)或更高版本的Android
  • 谷歌瀏覽器(Vista或更高,XP(在TLS 1.1協議必須啓用)
  • 的Opera Mobile版本至少爲10.1測試版在Chrome 6或更高版本。
  • OS上的Chrome 5.0.342.1 X 10.5.7或更高版本或更高版本)
  • 的Safari 3.0或更高版本(的Mac OS X 10.5.6或更高版本和Windows Vista或更高版本)
  • 的Konqueror/KDE 4.7或更高版本
  • MobileSafari在蘋果iOS 4.0或蜂窩(3.x版)或更高版本
  • 的Android默認瀏覽器更新
  • 黑莓10和黑莓平板電腦操作系統的默認瀏覽器
  • 的Windows Phone 7或Maemo操作
  • 爲MicroB
  • 奧德賽上MorphOS

所以如果你開始在HTTP的連接,那麼你可以檢查useragent並檢測客戶端支持SNI,如果他們確實將它們重定向到HTTPS,如果不將它們保留在HTTP

在我們的例子中,我們關心的是,唯一的Web瀏覽器不兼容SNI是IE瀏覽器在XP ...

相關問題