誤解七:HTTPS無(wú)法緩存
許多人以為,出于安全考慮,瀏覽器不會(huì)在本地保存HTTPS緩存。實(shí)際上,只要在HTTP頭中使用特定命令,HTTPS是可以緩存的。
微軟的IE項(xiàng)目經(jīng)理Eric Lawrence寫(xiě)道:
"說(shuō)來(lái)也許令人震驚,只要HTTP頭允許這樣做,所有版本的IE都緩存HTTPS內(nèi)容。比如,如果頭命令是Cache-Control: max-age=600,那么這個(gè)網(wǎng)頁(yè)就將被IE緩存10分鐘。IE的緩存策略,與是否使用HTTPS協(xié)議無(wú)關(guān)。(其他瀏覽器在這方面的行為不一致,取決于你使用的版本,所以這里不加以討論。)"
Firefox默認(rèn)只在內(nèi)存中緩存HTTPS。但是,只要頭命令中有Cache-Control: Public,緩存就會(huì)被寫(xiě)到硬盤(pán)上。下面的圖片顯示,F(xiàn)irefox的硬盤(pán)緩存中有HTTPS內(nèi)容,頭命令正是Cache-Control:Public。
誤解六:SSL證書(shū)很貴
如果你在網(wǎng)上搜一下,就會(huì)發(fā)現(xiàn)很多便宜的SSL證書(shū),大概10美元一年,這和一個(gè).com域名的年費(fèi)差不多。而且事實(shí)上,還能找到免費(fèi)的SSL證書(shū)。
在效力上,便宜的證書(shū)當(dāng)然會(huì)比大機(jī)構(gòu)頒發(fā)的證書(shū)差一點(diǎn),但是幾乎所有的主流瀏覽器都接受這些證書(shū)。
誤解五:HTTPS站點(diǎn)必須有獨(dú)享的IP地址
由于IPv4將要分配完畢,所以很多人關(guān)心這個(gè)問(wèn)題。每個(gè)IP地址只能安裝一張SSL證書(shū),這是毫無(wú)疑問(wèn)的。但是,如果你使用子域名通配符SSL證書(shū)(wildcard SSL certificate,價(jià)格大約是每年125美元),就能在一個(gè)IP地址上部署多個(gè)HTTPS子域名。比如,https://www.httpwatch.com和https://store.httpwatch.com,就共享同一個(gè)IP地址。
另外,UCC(統(tǒng)一通信證書(shū),Unified Communications Certificate)支持一張證書(shū)同時(shí)匹配多個(gè)站點(diǎn),可以是完全不同的域名。SNI(服務(wù)器名稱指示,Server Name Indication)允許一個(gè)IP地址上多個(gè)域名安裝多張證書(shū)。服務(wù)器端,Apache和Nginx支持該技術(shù),IIS不支持;客戶端,IE 7+、Firefox 2.0+、Chrome 6+、Safari 2.1+和Opera 8.0+支持。
誤解四:轉(zhuǎn)移服務(wù)器時(shí)要購(gòu)買(mǎi)新證書(shū)
部署SSL證書(shū),需要這樣幾步:
1. 在你的服務(wù)器上,生成一個(gè)CSR文件(SSL證書(shū)請(qǐng)求文件,SSL Certificate Signing Request)。
2. 使用CSR文件,購(gòu)買(mǎi)SSL證書(shū)。
3. 安裝SSL證書(shū)。
這些步驟都經(jīng)過(guò)精心設(shè)計(jì),保證傳輸?shù)陌踩乐褂腥私厝』蚍欠ǐ@得證書(shū)。結(jié)果就是,你在第二步得到的證書(shū)不能用在另一臺(tái)服務(wù)器上。如果你需要這樣做,就必須以其他格式輸出證書(shū)。
比如,IIS的做法是生成一個(gè)可以轉(zhuǎn)移的.pfx文件,并加以密碼保護(hù)。
將這個(gè)文件傳入其他服務(wù)器,將可以繼續(xù)使用原來(lái)的SSL證書(shū)了。
誤解三:HTTPS太慢
使用HTTPS不會(huì)使你的網(wǎng)站變得更快(實(shí)際上有可能,請(qǐng)看下文),但是有一些技巧可以大大減少額外開(kāi)銷(xiāo)。
首先,只要壓縮文本內(nèi)容,就會(huì)降低解碼耗用的CPU資源。不過(guò),對(duì)于當(dāng)代CPU來(lái)說(shuō),這點(diǎn)開(kāi)銷(xiāo)不值一提。
其次,建立HTTPS連接,要求額外的TCP往返,因此會(huì)新增一些發(fā)送和接收的字節(jié)。但是,從下圖可以看到,新增的字節(jié)是很少的。
第一次打開(kāi)網(wǎng)頁(yè)的時(shí)候,HTTPS協(xié)議會(huì)比HTTP協(xié)議慢一點(diǎn),這是因?yàn)樽x取和驗(yàn)證SSL證書(shū)的時(shí)間。下面是一張HTTP網(wǎng)頁(yè)打開(kāi)時(shí)間的瀑布圖。
同一張網(wǎng)頁(yè)使用HTTPS協(xié)議之后,打開(kāi)時(shí)間變長(zhǎng)了。
建立連接的部分,大約慢了10%。但是,一旦有效的HTTPS連接建立起來(lái),再刷新網(wǎng)頁(yè),兩種協(xié)議幾乎沒(méi)有區(qū)別。先是HTTP協(xié)議的刷新表現(xiàn):
然后是HTTPS協(xié)議:
某些用戶可能發(fā)現(xiàn),HTTPS比HTTP更快一點(diǎn)。這會(huì)發(fā)生在一些大公司的內(nèi)部局域網(wǎng),因?yàn)橥ǔG闆r下,公司的網(wǎng)關(guān)會(huì)截取并分析所有的網(wǎng)絡(luò)通信。但是,當(dāng)它遇到HTTPS連接時(shí),它就只能直接放行,因?yàn)镠TTPS無(wú)法被解讀。正是因?yàn)樯倭诉@個(gè)解讀的過(guò)程,所以HTTPS變得比較快。
誤解二:有了HTTPS,Cookie和查詢字符串就安全了
雖然無(wú)法直接從HTTPS數(shù)據(jù)中讀取Cookie和查詢字符串,但是你仍然需要使它們的值變得難以預(yù)測(cè)。
比如,曾經(jīng)有一家英國(guó)銀行,直接使用順序排列的數(shù)值表示session id:
黑客可以先注冊(cè)一個(gè)賬戶,找到這個(gè)cookie,看到這個(gè)值的表示方法。然后,改動(dòng)cookie,從而劫持其他人的session id。至于查詢字符串,也可以通過(guò)類(lèi)似方式泄漏。
誤解一:只有注冊(cè)登錄頁(yè),才需要HTTPS
這種想法很普遍。人們覺(jué)得,HTTPS可以保護(hù)用戶的密碼,此外就不需要了。Firefox瀏覽器新插件Firesheep,證明了這種想法是錯(cuò)的。我們可以看到,在Twitter和Facebook上,劫持其他人的session是非常容易的。
咖啡館的免費(fèi)WiFi,就是一個(gè)很理想的劫持環(huán)境,因?yàn)閮蓚€(gè)原因:
1. 這種WiFi通常不會(huì)加密,所以很容易監(jiān)控所有流量。
2. WiFi通常使用NAT進(jìn)行外網(wǎng)和內(nèi)網(wǎng)的地址轉(zhuǎn)換,所有內(nèi)網(wǎng)客戶端都共享一個(gè)外網(wǎng)地址。這意味著,被劫持的session,看上去很像來(lái)自原來(lái)的登錄者。
以Twitter為例,它的登錄頁(yè)使用了HTTPS,但是登錄以后,其他頁(yè)面就變成了HTTP。這時(shí),它的cookie里的session值就暴露了。
也就是說(shuō),這些cookie是在HTTPS環(huán)境下建立的,但是卻在HTTP環(huán)境下傳輸。如果有人劫持到這些cookie,那他就能以你的身份在Twitter上發(fā)言了。
原文:http://blog.httpwatch.com/2011/01/28/top-7-myths-about-https/
譯文:http://www.ruanyifeng.com/blog/2011/02/seven_myths_about_https.html 譯者: 阮一峰