2012-07-28 104 views

回答

4

您可以設置一個支持SNI的服務器,提供兩個主機名,在需要SNI的地方,以及一個備用解決方案,這兩個服務器都提供他們託管的名稱。

東西沿着線:

  • https://www.example.com/name返回一個表示說I'm www.example.com
  • https://www.example.net/name返回I'm www.example.net(和需要SNI)。

如果您向https://www.example.net/name發出XHR請求,並且返回www.example.com,那麼瀏覽器不支持SNI。

+0

您需要確保在沒有SNI的情況下,服務器將報告www.example.com。如果我沒有記錯,Apache在沒有SNI時提供它裝載的**第一個**證書。 – Andreas 2012-07-28 15:21:57

+0

是的,這就是我所說的回退解決方案的意思:默認值。如果需要,你可以連接到兩者並比較你得到的結果。 – Bruno 2012-07-28 15:23:10

+0

這聽起來像個好主意。我要測試它,這對我很有用。 – 2012-07-28 15:53:23

0

由於commercerack已升級到所有網站的SNI,所以我們遇到了同樣的問題。 (用戶開始簽出並獲得令人討厭的SSL問題)。

歡迎以此爲出發點。 隨着瀏覽器列表的增長,我會更新,但它現在在XP + Android 2.0-2.2上執行IE。

https://github.com/brianhorakh/html-sni-useragent-sniffer-warning

+0

第83行的錯誤? if(/Android\s2\.[012]+/){browserSNICompatibility = 0; } ...沒有看到一個字符串var使用正則表達式? – 2017-11-16 22:02:57

1

不知道這是什麼希望,但有這個

RewriteEngine on 

    # Test if SNI will work and if not redirect to too old browser page 
    RewriteCond %{HTTPS} on 
    RewriteCond %{SSL:SSL_TLS_SNI} ="" 
    RewriteRule^http://www.example.com/too-old-browser [L,R=307] 

如果舊的瀏覽器試圖使用需要SNI然後它會被重定向(在這種情況下,回網站http和一個說瀏覽器太舊的頁面)。但是你總會得到一個錯誤。這是無法避免的。瀏覽器說你好IP ......,並且apache在這裏回覆你好,這是我的證書。如果瀏覽器在hello中沒有提供SNI,apache只會發送默認(即錯誤的)證書。瀏覽器然後抱怨。

如果你想交換到HTTPS,那麼你可以把這樣的事情在htaccess的

#Set $_SERVER['SSL_TLS_SNI'] for php = %{SSL:SSL_TLS_SNI} or value 
    SetEnv SSL_TLS_SNI %{SSL:SSL_TLS_SNI} 

然後在你的頁面做一個HTTPS從默認域取(默認設置,以便瀏覽器之前,從http挑這件事並不是說有安全錯誤)。如果SNI正在運行,那麼在php $ _SERVER ['SSL_TLS_SNI']中將具有域名,否則它將具有%{SSL:SSL_TLS_SNI}。這一點代碼可以改進,但你明白了。

+0

如果SSL握手失敗,我不認爲瀏覽器會看到重定向,所以我不認爲基於SSL_TLS_SNI變量的重定向會起作用。 – 2016-09-06 04:58:03

1

您只能測試SNI支持之前需要它。也就是說,您不能強制用戶使用SNI HTTPS,如果他們不支持,則會退後,因爲他們會收到類似的錯誤(從Windows XP上的Chrome),無法繼續。

所以(不幸)的用戶實際開始通過不安全的HTTP連接,然後只有當他們支持SNI進行升級。

您可以檢測通過SNI支持:

  1. 遠程腳本
    從您的普通HTTP頁面,加載從您的目的地SNI HTTPS服務器<script>,如果腳本加載和運行正確,你就知道該瀏覽器支持SNI。

  2. 跨域Ajax(CORS)
    選項1類似,您可以嘗試執行從HTTP網頁到HTTPS跨域AJAX請求,但是要知道,CORS具有only limited browser support

  3. 嗅探用戶代理
    這可能是最可靠的方法,您將需要有瀏覽器(和操作系統)的黑名單之間決定已知不支持的話,或已知的白名單系統。

    我們知道所有版本的IE,Chrome &Windows XP及以下版本的Opera不支持SNI。見CanIUse.com for full list of supported browsers

相關問題