2013-04-29 57 views
6

我的IIS上有多個站點運行,現在我們需要支持其中一個網站(SiteB),以支持ssl請求。我已經啓用它編輯該網站的綁定,但問題是當我選擇協議SSL編輯綁定HostName字段被禁用,無法設置主機名來響應https請求,這會導致我的IIS的所有站點如果被請求與https ://載入siteB的網站。IIS 7將SSL添加到一個站點,所有其他站點響應https請求

比如我bidings是下

Site A 

IP Port HostName 
*  80 www.sitea.com 

Site B 
IP Port Hostname 
* 443 www.siteb.com 
* 80 www.siteb.com 

如果我在我的瀏覽器,它工作正常鍵入https://www.siteb.com,但如果我在瀏覽器中鍵入https://www.sitea.com,網站B的網頁加載站點A的主機名。

如何才能讓https://www.siteb.com響應我的IIS上的https請求?

我已經嘗試過使用命令appcmd,但它沒有工作。

appcmd set site /site.name:{sitB} /bindings.[protocol='https',bindingInformation='*:443:*'].bindingInformation:*:443:siteB.com 

感謝您的幫助。

+0

我有同樣的問題。我將開始賞金。 – Germstorm 2013-06-17 09:22:09

+0

您是否建立了證書?什麼是CN? – 2013-06-17 09:29:08

+0

所有其他網站是否作爲「虛擬目錄」或「應用程序」或「網站」託管?似乎您已將設置應用於網站,並且多個虛擬目錄/應用程序位於網站中。 – 2013-06-20 13:24:56

回答

9

問題的根源
這意外的行爲是不是因爲IIS的這麼多,因爲它是因爲網絡加密協議。

兩種主要的Web加密協議是SSL和TLS。在將任何請求信息傳遞給服務器之前,這兩種協議都會協商安全連接。這意味着,在安全請求之前,服務器直到建立安全連接之後纔會真正瞭解主機名。

已經創建了對TLS和SSL的擴展以解決此限制。它被稱爲SNI(服務器名稱標識)。問題是這個擴展需要在服務器和客戶端機器上受到支持。目前客戶端瀏覽器的支持有點多餘。有關瀏覽器列表,請參閱SNI文章。

IIS的處理問題
這是因爲上面提到的主機名限制,即IIS不會讓你的主機名綁定到HTTPS綁定組成。 IIS無法將HTTPS請求路由到特定的主機名,因爲它在首次開始協商連接時不知道請求的主機名。

一旦IIS與客戶端協商了安全連接,並獲知他們所請求的主機名是針對非HTTPS綁定的站點(例如請求https://sitea.com),IIS可以返回失敗代碼或嘗試失敗優雅。 IIS選擇後者,並嘗試通過使用HTTPS綁定提供站點來優雅地失敗,即使用戶正在請求不同的站點。

解決方案/解決方法

  • 創建重寫規則重定向不安全的網站,所有的HTTP HTTPS請求。
  • 升級到IIS 8以使用SNI擴展。然後讓訪問者升級到支持SNI的瀏覽器。
  • 當您的安全站點收到不同域的請求時,它會返回一條錯誤消息。
  • 綁定的,因爲IP地址而不是主機名IIS可以路由HTTPS請求通過IP地址

參考
我的大部分信息來自Wikipedia article on SNI

+0

試用IIS 8,看起來你可以在沒有SNI的情況下處理這種情況。 SNI只需要選擇與請求的域對應的證書。 IIS 8似乎能夠在之後選擇網站。通過在https綁定中指定域名sitea進行測試,通過xp IE8(在這種情況下,無SNI)訪問服務器上沒有其他https綁定:https:sitea => success,https服務器上其他域的https => cert不匹配,IIS 404沒有匹配的綁定。儘管IIS7不可行,但不允許限制https綁定到域。 – 2015-09-16 16:42:27

2

我們經營有多個站點需要SSL的Web服務器來沒有問題。

如果我正確理解你的問題 - 你需要設置綁定而不是主機名 - 這是行不通的。因此,對於我們託管的每個啓用SSL的站點,我們都需要一個獨特的外部IP地址。然後,在IIS中設置站點時,輸入該IP地址作爲綁定。

相關問題