假設(shè)有這樣一個場景,我們有多個站點(例如site1.example.com,site2.example.com和site3.example.com)綁定到同一個IP:PORT,并區(qū)分不同的主機頭。我們?yōu)槊恳粋€SSL站點申請并安裝了證書。在瀏覽網(wǎng)站時,用戶仍看到證書不匹配的錯誤。 IIS當(dāng)一個https的請求到達(dá)IIS服務(wù)器時,https請求為加密狀態(tài),需要拿到相應(yīng)的服務(wù)器證書解密請求。由于每個站點對應(yīng)的證書不同,服務(wù)器需要通過請求中不同的主機頭來判斷需要用哪個證書解密,然而主機頭作為請求的一部分也被加密。最終IIS只好使用第一個綁定到該IP:PORT的站點證書解密請求,從而有可能造成對于其他站點的請求失敗而報錯。 解決方案 - 第一種解決方案將每個https站點綁定到不同的端口。但是這樣的話客戶端瀏覽網(wǎng)頁時必須手動指定端口,例如 https://site.domain.com:444
- 第二種解決方案是為每個站點分配一個獨立的ip,這樣沖突就解決了,甚至主機頭也不用添加了。
- 第三種解決方案是使用通配證書。我們采用通配證書頒發(fā)給.domain.com,對于我們的示例中,應(yīng)該采用頒發(fā)給.marei.com的證書,這樣任何訪問該domain的請求均可以通過該證書解密,證書匹配錯誤也就不復(fù)存在了。
- 第四種解決方案是升級為IIS8,IIS8中添加的對于SNI(Server Name Indication)的支持,服務(wù)器可以通請求中提取出相應(yīng)的主機頭從而找到相應(yīng)的證書。
SNI開啟方式請參考http://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-server-name-indication-sni-ssl-scalability |