開發網頁的時候,往往需要觀察http通訊。
我使用的工具主要有兩個,在firefox中是firebug ,在ie中是fiddler 。但是,一直聽別人說,付費軟體httpwatch 是這方面最好的工具。
前幾天,httpwatch的官方網志 刊登了一篇好文章,澄清了一些https協議容易產生誤解的地方。學習之後,我增長了不少網頁加密通訊的知識。
https的七個誤解
原文**:
譯者:阮一峰
誤解七:https無法快取
許多人以為,出於安全考慮,瀏覽器不會在本地儲存https快取。實際上,只要在http頭中使用特定命令,https是可以快取的。
微軟的ie專案經理eric lawrence 寫道:
"說來也許令人震驚,只要http頭允許這樣做,所有版本的ie都快取https內容。比如,如果頭命令是cache-control: max-age=600,那麼這個網頁就將被ie快取10分鐘。ie的快取策略,與是否使用https協議無關。(其他瀏覽器在這方面的行為不一致,取決 於你使用的版本,所以這裡不加以討論。)"firefox預設只在記憶體中快取https。但是,只要頭命令中有cache-control: public,快取就會被寫到硬碟上。下面的顯示,firefox的硬碟快取中有https內容,頭命令正是cache-control:public。
誤解六:ssl證書很貴
如果你在網上搜一下 ,就會發現很多便宜的ssl證書,大概10美元一年,這和乙個.com網域名稱的年費差不多。而且事實上,還能找到免費 的ssl證書。
在效力上,便宜的證書當然會比大機構頒發的證書差一點,但是幾乎所有的主流瀏覽器都接受這些證書。
由於ipv4將要分配完畢,所以很多人關心這個問題。每個ip位址只能安裝一張ssl證書,這是毫無疑問的。但是,如果你使用子網域名稱萬用字元ssl證 書(wildcard ssl certificate,**大約是每年125美元),就能在乙個ip位址上部署多個https子網域名稱。比 如,和就共享同乙個ip位址。
另外,ucc(統一通訊證書,unified communications certificate)支援一張證書同時匹配多個站點,可以是完全不同的網域名稱。sni (服 務器名稱指示,server name indication)允許乙個ip位址上多個網域名稱安裝多張證書。伺服器端,apache和nginx支援該技術,iis不支援;客戶端,ie 7+、firefox 2.0+、chrome 6+、safari 2.1+和opera 8.0+支援。
誤解四:轉移伺服器時要購買新證書
部署ssl證書,需要這樣幾步:
1. 在你的伺服器上,生成乙個csr檔案(ssl證書請求檔案,ssl certificate signing request)。這些步驟都經過精心設計,保證傳輸的安全,防止有人擷取或非法獲得證書。結果就是,你在第二步得到的證書不能用在另一台伺服器上。如果你需要這樣做,就必須以其他格式輸出證書。2. 使用csr檔案,購買ssl證書。
3. 安裝ssl證書。
比如,iis的做法是生成乙個可以轉移的.pfx檔案,並加以密碼保護。
將這個檔案傳入其他伺服器,將可以繼續使用原來的ssl證書了。
誤解三:https太慢
使用https不會使你的**變得更快(實際上有可能,請看下文),但是有一些技巧 可以大大減少額外開銷。
首先,只要壓縮文字內容,就會降低解碼耗用的cpu資源。不過,對於當代cpu來說,這點開銷不值一提。
其次,建立https連線,要求額外的tcp往返,因此會新增一些傳送和接收的位元組。但是,從下圖可以看到,新增的位元組是很少的。
第一次開啟網頁的時候,https協議會比http協議慢一點,這是因為讀取和驗證ssl證書的時間。下面是一張http網頁開啟時間的瀑布圖。
同一張網頁使用https協議之後,開啟時間變長了。
建立連線的部分,大約慢了10%。但是,一旦有效的https連線建立起來,再重新整理網頁,兩種協議幾乎沒有區別。先是http協議的重新整理表現:
然後是https協議:
某些使用者可能發現,https比http更快一點。這會發生在一些大公司的內部區域網,因為通常情況下,公司的閘道器會擷取並分析所有的網路通訊。但 是,當它遇到https連線時,它就只能直接放行,因為https無法被解讀。正是因為少了這個解讀的過程,所以https變得比較快。
誤解二:有了https,cookie和查詢字串就安全了
雖然無法直接從https資料中讀取cookie和查詢字串,但是你仍然需要使它們的值變得難以**。
比如,曾經有一家英國銀行,直接使用順序排列的數值表示session id:
黑客可以先註冊乙個賬戶,找到這個cookie,看到這個值的表示方法。然後,改動cookie,從而劫持其他人的session id。至於查詢字串,也可以通過類似方式 洩漏。
誤解一:只有註冊登入頁,才需要https
這種想法很普遍。人們覺得,https可以保護使用者的密碼,此外就不需要了。firefox瀏覽器新外掛程式firesheep ,證明了這種想法是錯的。我們可以看到,在twitter和facebook上,劫持其他人的session是非常容易的。
咖啡館的免費wifi,就是乙個很理想的劫持環境,因為兩個原因:
1. 這種wifi通常不會加密,所以很容易監控所有流量。以twitter為例,它的登入頁使用了https,但是登入以後,其他頁面就變成了http。這時,它的cookie裡的session值就暴露了。2. wifi通常使用nat進行外網和內網的位址轉換,所有內網客戶端都共享乙個外網位址。這意味著,被劫持的session,看上去很像來自原來的登入者。
也就是說,這些cookie是在https環境下建立的,但是卻在http環境下傳輸。如果有人劫持到這些cookie,那他就能以你的身份在twitter上發言了。
HTTPS的七個誤解(譯文)
誤解七 https無法快取 許多人以為,出於安全考慮,瀏覽器不會在本地儲存https快取。實際上,只要在http頭中使用特定命令,https是可以快取的。微軟的ie專案經理eric lawrence寫道 說來也許令人震驚,只要http頭允許這樣做,所有版本的ie都快取https內容。比如,如果頭命令...
HTTPS的七個誤解(譯文)
開發網頁的時候,往往需要觀察http通訊。我使用的工具主要有兩個,在firefox中是firebug,在ie中是fiddler。但是,一直聽別人說,付費軟體httpwatch是這方面最好的工具。前幾天,httpwatch的官方網志刊登了一篇好文章,澄清了一些https協議容易產生誤解的地方。學習之後...
HTTPS的七個誤解(譯文)
開發網頁的時候,往往需要觀察http通訊。我使用的工具主要有兩個,在firefox中是firebug,在ie中是fiddler。但是,一直聽別人說,付費軟體httpwatch是這方面最好的工具。前幾天,httpwatch的官方網志刊登了一篇好文章,澄清了一些https協議容易產生誤解的地方。學習之後...