[Apache]單一主機下的SSL限制

有關於電腦系統設定, 備份, 監控, 網路等機制討論
回覆文章
頭像
tim
文章: 1380
註冊時間: 2008年 11月 26日, 00:49

[Apache]單一主機下的SSL限制

文章 tim »

一般在單一主機下, 只能啟用一組 SSL, 原因是因為主機標題是在憑證裡, 而在同一ip的狀況下, 是沒有辦法同時處理多重SSL的網域, 可以參考以下資料:

http://ssl.wis.com.tw/solution/hosting.asp

虛擬主機安全方案

前提

隨著虛擬主機技術的發展,功能越來越豐富,已經不僅僅只是滿足個人網站的需要,越來越多的小型電子商務網站也採用了虛擬主機來建站,如何為這些商戶提供經濟、方便的 SSL 解決方案,成為虛擬主機供應商新的業務收入來源。


技術分析

為什麼我不能在相同IP位址下多個網域名稱的虛擬主機上使用 SSL?

這個問題十分專業,有些像“先有雞還是先有蛋”的問題。SSL協定層是在HTTP協定層下面的,當SSL連接建立時,SSL模組在Web模組之前和瀏覽器進行通訊並交換憑證、建立加密隧道。眾所周知,Web伺服器是通過HTTP資料包中的”Host”欄位來區分虛擬主機的。而SSL模組在把伺服器憑證發送到瀏覽器時,還沒有收到任何關於HTTP的資料包,更不知道虛擬主機的網域名稱,因此SSL模組只能固定將一SSL憑證發送到瀏覽器,而不能根據網域名稱有選擇性的發送憑證。因此,您無法在一個IP位址的默認SSL 443埠下為多個虛擬主機配置多張憑證。

由於一個IP與一個埠號只能對應一張憑證,因此我們可以採用以下方式來解決:

1、為需要SSL加密的虛擬主機配置不同的IP位址,埠號都使用443。例如: www.domain1.com 的SSL使用 202.96.101.1:443 www.domain2.com的SSL使用 202.96.101.2:443,通過 https://www.domain1.comhttps://www.domain2.com 訪問這2個SSL網站了

2、如果只有一個IP位址,可以為多個網站配置不同的SSL埠。例如: www.domain1.com 的SSL使用 202.96.101.1:443 www.domain2.com的SSL使用 202.96.101.1:1000,通過 https://www.domain1.comhttps://www.domain2.com:1000 訪問這2個SSL網站了

如果多個虛擬主機是1個主網域名稱下的多個子網域名稱,情況發生了轉變,因為你可以申請通用SSL憑證。

例如: 有2個虛擬主機 abc.domain.com、xyz.domain.com,你申請一張 *.domain.com的憑證,按照前面所說的原理,2個虛擬主機都使用同一個IP和默認的443埠,當瀏覽器訪問IP:443埠時,SSL模組把通用SSL憑證傳送給瀏覽器,建立合法的SSL隧道,然後WEB模組接收到HTTP資料包時判斷網域名稱選擇虛擬主機。

原理是OK的,不幸的是你無法按照這個原理對IIS進行配置,IIS不支援SSL埠配置網域名稱。如果僅依靠IIS,你不得不使用上面的2個方法(不同的IP位址或者不同的埠號)。

如果僅有1個IP位址,採用方法2時,abc.domain.com 使用 443埠、xyz.domain.com使用1000埠,你會發現一個現象,由於SSL埠不區分網域名稱,因此https://abc.domain.com還是https://xyz.domain.com都是指向abc.domain.com網站內容,而https://abc.domain.com:1000還是https://xyz.domain.com:1000都是指向xyz.domain.com網站內容的。當然這也有好處,你可以在abc.domain.com下放一個程式,程式判斷一下網域名稱,如果用戶訪問https://xyz.domain.com就馬上跳轉到https://xyz.domain.com:1000,不會有任何的安全警告。
多多留言, 整理文章, 把經驗累積下來.....
回覆文章