https的七個誤解
誤解七:https 無法緩存許多人以為,出于安全考慮,瀏覽器不會在本地保存https 緩存。實際上,只要在http 頭中使用特定命令,https 是可以緩存的。微軟的ie 項目經(jīng)理eric lawre
誤解七:https 無法緩存
許多人以為,出于安全考慮,瀏覽器不會在本地保存https 緩存。實際上,只要在http 頭中使用特定命令,https 是可以緩存的。
微軟的ie 項目經(jīng)理eric lawrence寫道:
" 說來也許令人震驚,只要http 頭允許這樣做,所有版本的ie 都緩存https 內(nèi)容。比如,如果頭命令是cache-control:max-age=600,那么這個網(wǎng)頁就將被ie 緩存10分鐘。ie 的緩存策略,與是否使用https 協(xié)議無關(guān)。(其他瀏覽器在這方面的行為不一致,取決于你使用的版本,所以這里不加以討論。)"
firefox默認只在內(nèi)存中緩存https 。但是,只要頭命令中有cache-control:public,緩存就會被寫到硬盤上。下面的圖片顯示,firefox 的硬盤緩存中有https 內(nèi)容,頭命令正是cache-control:public。
誤解六:ssl 證書很貴
如果你在網(wǎng)上搜一下,就會發(fā)現(xiàn)很多便宜的ssl 證書,大概10美元一年,這和一個.com 域名的年費差不多。而且事實上,還能找到免費的ssl 證書。
在效力上,便宜的證書當然會比大機構(gòu)頒發(fā)的證書差一點,但是幾乎所有的主流瀏覽器都接受這些證書。
誤解五:https 站點必須有獨享的ip 地址
由于ipv4將要分配完畢,所以很多人關(guān)心這個問題。每個ip 地址只能安裝一張ssl 證書,這是毫無疑問的。但是,如果你使用子域名通配符ssl 證書(wildcard ssl certificate,價格大約是每年125美元),就能在一個ip 地址上部署多個https 子域名。比如,
另外,ucc (統(tǒng)一通信證書,unified communications certificate)支持一張證書同時匹配多個站點,可以是完全不同的域名。sni (服務(wù)器名稱指示,server name indication)允許一個ip 地址上多個域名安裝多張證書。服務(wù)器端,apache 和nginx 支持該技術(shù),iis 不支持;客戶端,ie7 、firefox 2.0 、chrome 6 、safari 2.1 和opera 8.0 支持。
誤解四:轉(zhuǎn)移服務(wù)器時要購買新證書
部署ssl 證書,需要這樣幾步:
1. 在你的服務(wù)器上,生成一個csr 文件(ssl 證書請求文件,
ssl certificate signing request)。
,2. 使用csr 文件,購買ssl 證書。
3. 安裝ssl 證書。
這些步驟都經(jīng)過精心設(shè)計,保證傳輸?shù)陌踩?,防止有人截取或非法獲得證書。結(jié)果就是,你在第二步得到的證書不能用在另一臺服務(wù)器上。如果你需要這樣做,就必須以其他格式輸出證書。 比如,iis 的做法是生成一個可以轉(zhuǎn)移的.pfx 文件,并加以密碼保護。
將這個文件傳入其他服務(wù)器,將可以繼續(xù)使用原來的ssl 證書了。
誤解三:https 太慢
使用https 不會使你的網(wǎng)站變得更快(實際上有可能,請看下文),但是有一些技巧可以大大減少額外開銷。
首先,只要壓縮文本內(nèi)容,就會降低解碼耗用的cpu 資源。不過,對于當代cpu 來說,這點開銷不值一提。
其次,建立https 連接,要求額外的tcp 往返,因此會新增一些發(fā)送和接收的字節(jié)。但是,從下圖可以看到,新增的字節(jié)是很少的。
第一次打開網(wǎng)頁的時候,https 協(xié)議會比http 協(xié)議慢一點,這是因為讀取和驗證ssl 證書的時間。下面是一張http 網(wǎng)頁打開時間的瀑布圖。
同一張網(wǎng)頁使用https 協(xié)議之后,打開時間變長了。
建立連接的部分,大約慢了10。但是,一旦有效的https 連接建立起來,再刷新網(wǎng)頁,兩種協(xié)議幾乎沒有區(qū)別。先是http 協(xié)議的刷新表現(xiàn):
然后是https 協(xié)議:
,某些用戶可能發(fā)現(xiàn),https 比http 更快一點。這會發(fā)生在一些大公司的內(nèi)部局域網(wǎng),因為通常情況下,公司的網(wǎng)關(guān)會截取并分析所有的網(wǎng)絡(luò)通信。但 是,當它遇到https 連接時,它就只能直接放行,因為https 無法被解讀。正是因為少了這個解讀的過程,所以https 變得比較快。 誤解二:有了https ,cookie 和查詢字符串就安全了
雖然無法直接從https 數(shù)據(jù)中讀取cookie 和查詢字符串,但是你仍然需要使它們的值變得難以預測。
比如,曾經(jīng)有一家英國銀行,直接使用順序排列的數(shù)值表示session id:
黑客可以先注冊一個賬戶,找到這個cookie ,看到這個值的表示方法。然后,改動cookie ,從而劫持其他人的session id。至于查詢字符串,也可以通過類似方式泄漏。
誤解一:只有注冊登錄頁,才需要https
這種想法很普遍。人們覺得,https 可以保護用戶的密碼,此外就不需要了。firefox 瀏覽器新插件firesheep ,證明了這種想法是錯的。我們可以看到,在twitter 和facebook 上,劫持其他人的session 是非常容易的。
咖啡館的免費wifi ,就是一個很理想的劫持環(huán)境,因為兩個原因:
1. 這種wifi 通常不會加密,所以很容易監(jiān)控所有流量。
2. wifi通常使用nat 進行外網(wǎng)和內(nèi)網(wǎng)的地址轉(zhuǎn)換,所有內(nèi)網(wǎng)客戶端都共享一個外網(wǎng)地址。這意味著,被劫持的session ,看上去很像來自原來的登錄者。
以twitter 為例,它的登錄頁使用了https ,但是登錄以后,其他頁面就變成了http 。這時,它的cookie 里的session 值就暴露了。
也就是說,這些cookie 是在https 環(huán)境下建立的,但是卻在http 環(huán)境下傳輸。如果有人劫持到這些cookie ,那他就能以你的身份在twitter 上發(fā)言了。