如今,HTTPS更快也更安全,使用HTTPS的企業(yè)網(wǎng)站也比以往更多。盡管Web開發(fā)人員或網(wǎng)絡(luò)架構(gòu)師忙碌依舊,卻很難跟上互聯(lián)網(wǎng)技術(shù)的最新發(fā)展。
在本文中,筆者將討論通過SSL保障現(xiàn)代網(wǎng)站安全的最佳方法?,F(xiàn)代SSL除了要保障企業(yè)網(wǎng)站的安全外,還要兼顧性能。因此,本文會涉及一些有助于提高網(wǎng)站性能的SSL優(yōu)化方法。
在討論所謂的最佳方法之前,我們首先看幾個SSL和TLS術(shù)語。從技術(shù)上講,SSL已經(jīng)被TLS(傳輸層安全)協(xié)議代替,但是多數(shù)人仍將SSL和TLS混稱為SSL。除非SSL后有一個版本號,否則此文仍使用此習(xí)慣用法。
其次,在深入討論之前,對SSL/TLS握手有一個基本的理解也很重要。這種握手發(fā)生在瀏覽器通過HTTPS與服務(wù)器進(jìn)行連接之時,是客戶端和服務(wù)器約定的用于會話加密的一種方法。TLS握手有幾種不同的類型,但是RSA握手圖展示的是相關(guān)部分。
首先,瀏覽器向WEB服務(wù)器發(fā)送一個大隨機(jī)數(shù)和一個加密套件清單,由此開始了TLS握手。Web服務(wù)器從中選擇首要的加密套件,從而決定了握手類型以及用于此次TLS會話的加密機(jī)制。然后,Web服務(wù)器向瀏覽器發(fā)送加密套件,還要向瀏覽器返回另一個大隨機(jī)數(shù)和服務(wù)器的公共SSL證書。瀏覽器需要知道SSL證書是否被吊銷,所以它會檢查CA的證書吊銷列表(除非支持OCSP封裝)。
如果證書仍然合法,瀏覽器會生成一個“預(yù)主密鑰”,以生成一個對稱的會話密鑰。瀏覽器會用服務(wù)器的公鑰(包含在服務(wù)器的SSL證書中)來加密“預(yù)主密鑰”,并傳送回服務(wù)器。在服務(wù)器用私鑰解密“預(yù)主密鑰”后,瀏覽器和服務(wù)器都獲得對稱密鑰,用以加密TLS會話的其余部分。
在本文中,所討論的每種措施都可以使這些步驟更安全或更快速。
充分利用現(xiàn)代SSL的安全功能
TLS握手有很多步驟,這意味著安全管理員有很多機(jī)會改進(jìn)網(wǎng)站的安全性。這里先討論強(qiáng)制使用HTTPS連接的HSTS,然后再看一下SHA-1與SHA-2的當(dāng)前狀態(tài),還要探討如何保護(hù)未來的用戶會話數(shù)據(jù),以及升級到最新TLS版本的重要性。
支持HSTS頭
支持HSTS協(xié)議是更好地保障網(wǎng)站、API、移動應(yīng)用安全的最簡單方法之一。HSTS是HTTP協(xié)議的一個擴(kuò)展,它強(qiáng)制客戶端對每一個訪問Web服務(wù)器的請求都使用安全連接。通過提供一個嚴(yán)格傳輸安全(STS)頭部,Web服務(wù)器就可以告訴瀏覽器只能在指定的時間段由HTTPS連接到網(wǎng)站。
然后,瀏覽器會在將用戶的請求發(fā)送給服務(wù)器之前,自動將所有的http請求變成https請求。在連接的安全性存在問題時(例如,服務(wù)器的TLS證書不再可信時),HSTS還會告訴瀏覽器顯示一個錯誤頁面。這類錯誤不同于用戶憑直覺就可以忽視的錯誤,它無法被繞開。
這種鏈接重寫可以防御某些類型的“降級攻擊”,如SSL-stripping攻擊,防止中間人將HTTPS請求變成HTTP請求而窺探用戶通信。
持SHA-2證書簽名
支
SHA-2是SHA(安全哈希算法)的下一代版本。哈希算法是一種單向功能,它可以產(chǎn)生一個消息的唯一指紋特征,并且從互聯(lián)網(wǎng)誕生起就已經(jīng)成為一個關(guān)鍵組件。
在CA為網(wǎng)站頒發(fā)TLS證書后,就取得了證書中的所有信息(域名、合法周期、公鑰、序列號,等等),將這些信息“哈希(hash)”變成數(shù)字證書,使用指紋信息創(chuàng)建簽名,并生成私有簽名密鑰。在瀏覽器信任服務(wù)器的證書之前,它需要將證書信息進(jìn)行哈希(hash),并且使用CA的公共簽發(fā)密鑰驗證指紋是否與證書的簽名相匹配。
如果攻擊者能夠使用不同的證書信息生成同樣的數(shù)字指紋,就可以生成偽造的但仍能通過CA簽名驗證的證書。然后,攻擊者就可以將此偽造的證書作為中間人,而終端用戶并不能夠分辨自己是否正在將其敏感信息發(fā)送給互聯(lián)網(wǎng)上的某個人,而不是安全的Web服務(wù)器。
產(chǎn)生這種哈希沖突需要大量的計算資源。隨著計算機(jī)越來越快和廉價,攻擊者就越有可能偽造一個使用SHA-1進(jìn)行簽名的TLS證書。解決方案就是SHA-2。
現(xiàn)代網(wǎng)站都使用SHA-2而不是SHA-1簽名的TLS證書。如果企業(yè)網(wǎng)站仍在使用SHA-1證書,主流的瀏覽器廠商都會顯示警告消息,告訴網(wǎng)站的訪問者正在訪問不安全的網(wǎng)站。到2016年底的時候,瀏覽器將會完全阻止用戶訪問這種網(wǎng)站。為了升級,企業(yè)網(wǎng)站需要從自己的CA購買一個新的SHA-2證書,并且將其安裝到Web服務(wù)器上。
如果企業(yè)仍需要支持不能使用SHA-2的用戶,不妨考慮利用一個能夠選擇最高安全的證書,并且用戶的瀏覽器還要支持。
用EDH(Ephemeral Diffie-Hellman)支持前向轉(zhuǎn)發(fā)的加密
如果服務(wù)器一直用同樣的私鑰獲得對稱TLS會話密鑰,私鑰就成為鏈條中的脆弱一環(huán)。例如,如果攻擊者記錄了服務(wù)器和用戶之間的大量通信,就可以從服務(wù)器中竊取私鑰,然后可以解密通信。
即使私鑰在日后失竊了,EDH (Ephemeral Diffie-Hellman)或 DHE也可以使用戶的加密會話更安全。EDH 是一種可以為每個會話產(chǎn)生唯一對稱密鑰的密鑰交換機(jī)制,這意味著即使服務(wù)器的私鑰被竊多年,攻擊者也不能用它來解密已記錄的會話。
僅支持TLS1.2
加密系統(tǒng)并非靜止不變,所以安全的Web服務(wù)器應(yīng)當(dāng)總是全力支持互聯(lián)網(wǎng)安全方面的最新和最大的改進(jìn)。理想情況下,企業(yè)網(wǎng)站不應(yīng)當(dāng)支持低于TLS最新版本的任何系統(tǒng)。TLS和SSL協(xié)議的早期版本包括過時的加密套件或一些不安全的實施方案,這使得企業(yè)的加密通信易于遭受攻擊。
TLS連接依靠客戶端和服務(wù)器的功能。安全管理者可能擔(dān)心,如果企業(yè)網(wǎng)站不支持較老的版本,就可能影響客戶體驗,但事實上,大多數(shù)瀏覽器已經(jīng)支持TLS1.2有很長時間了。
到2016年六年底時,升級到TLS1.2對于必須遵循PCI的企業(yè)來說將是強(qiáng)制性的。所以,現(xiàn)在我們有理由為網(wǎng)站實施僅支持TLS1.2的策略。
確保服務(wù)器的SSL的最新對企業(yè)網(wǎng)站的安全有實際影響。SSL3.0易于遭受POODLE攻擊,并且還會遭受有安全問題的RC4加密的破壞。TLS1.0修復(fù)了此問題,卻發(fā)現(xiàn)了新漏洞:隱式初始化向量和填充錯誤的不正確處理,導(dǎo)致不安全的加密CBC。TLS1.1同樣如此,并易于遭受Lucky 13的攻擊。TLS1.2支持使用AES-GCM加密套件,卻沒有CBC模式加密的相同漏洞。
充分挖掘現(xiàn)代SSL的性能優(yōu)化
過去的SSL要比HTTP慢得多,這正是許多Web開發(fā)者和網(wǎng)絡(luò)管理者更愿意使用“http://”的原因。但是,互聯(lián)網(wǎng)技術(shù)的發(fā)展已經(jīng)使SSL更加高效。通過利用最新的TLS性能特性以及SPDY或http/2技術(shù),現(xiàn)代SSL網(wǎng)站往往比未加密網(wǎng)站更快。
支持OCSP 封裝
CA和TLS并非總是可靠。有時,CA頒發(fā)了一個非預(yù)期的證書,有時公司用一種使證書無效的方式改變了安全策略,有時證書的密鑰被惡意用戶竊取。不管是什么原因,CA和瀏覽器的廠商認(rèn)識到:它們需要撤銷有可能被破壞的證書的方法。
為了使網(wǎng)站的用戶信任服務(wù)器交給他們的TLS證書,就需要查詢由CA維護(hù)的證書撤銷列表(CRL),看看證書是否已經(jīng)被撤銷。不幸的是,這種額外的撤銷檢查可以延緩用戶頁面的加載,并且瀏覽器必須等到CA返回TLS證書的狀態(tài)。這種檢查往往還需要DNS查詢,并且需要下載很多被撤銷的證書,從而導(dǎo)致巨大的性能犧牲。
OCSP 封裝是OCSP的一部分,后者用實時的撤銷檢查修復(fù)了一些性能問題。由此,Web服務(wù)器不再強(qiáng)迫用戶的瀏覽器直接查詢CA,而是由服務(wù)器自己在一定的時間查詢CA,用以找回OCSP響應(yīng)。這個響應(yīng)是由CA簽發(fā)的,證明在指定的時間段內(nèi)TLS證書的合法性。服務(wù)器可以消除用戶瀏覽器的不必要的往返時間。
支持ECC(橢圓曲線密碼)
ECC是當(dāng)代的一種替代RSA的選擇。ECC使用橢圓曲線的數(shù)學(xué)屬性來創(chuàng)建單向功能,這成為公鑰加密的基礎(chǔ)。
使用ECC的好處就是ECC要求的密鑰更短,所以幾乎不需要向終端用戶的計算機(jī)傳送數(shù)據(jù),從而加速了最初的TLS握手。此外,ECC花費(fèi)的簽名時間要比RSA少10倍。每次握手都需要由私鑰簽名,所以ECC實際上可以減少服務(wù)器的負(fù)擔(dān)。
支持通過會話票據(jù)(Session Ticket)實現(xiàn)恢復(fù) TLS 會話
毋庸置疑,TLS揚(yáng)很昂貴,但TLS確實包括一種避免不必要握手的方法。TLS的會話恢復(fù)可以利用以前會話的對稱密鑰使客戶端與服務(wù)器重新連接。這就無需額外的數(shù)據(jù)往返和獲得新的對稱密鑰的費(fèi)用。有兩種不同的TLS恢復(fù)機(jī)制:票據(jù)(ticket)和id。
如果瀏覽器和服務(wù)器都支持TLS會話票據(jù)(ticket),服務(wù)器會返回一個包含對稱密鑰的票據(jù)(ticket),作為握手的一部分。這個票據(jù)(ticket)使用一個只有服務(wù)器才知道的加密密鑰來加密的,這就使得存儲TLS的會話信息成為一種安全方法。在瀏覽器試圖重新連接到服務(wù)器時,就會返回一個加密的會話票據(jù)(ticket)。每個人都可以繞過TLS握手的其余部分,這是因為雙方都可以訪問對稱的會話密鑰。
不幸的是,Safari和IE并不支持會話票據(jù)(ticket)。這些瀏覽器使用一種稱為會話ID的機(jī)制來恢復(fù)TLS會話。會話信息存儲在服務(wù)器上而不是存儲在客戶端,客戶端將會話的ID返回給服務(wù)器。保持所有TLS連接參數(shù)的高速緩存對服務(wù)器可能是一種負(fù)擔(dān),但是,如果你希望更廣泛地支持TLS會話恢復(fù),既支持會話票據(jù)(ticket)又支持會話ID是一個好主意。
支持 SPDY 或 HTTP/2
SPDY 和 HTTP/2是可以極大提升網(wǎng)站加載速度的互聯(lián)網(wǎng)協(xié)議。從技術(shù)上講,SSL并不要求其中任何協(xié)議,但是主流的瀏覽器廠商都支持SPDY或http/2。
HTTP/1.1強(qiáng)制每一次請求都使用TCP連接,而瀏覽器每次只能打開有限的TCP連接。結(jié)果,網(wǎng)站的HTML、CSS、JavaScript、媒體資產(chǎn)等都被連續(xù)下載。HTTP/2 和 SPDY增加了幾個稱為多路傳輸?shù)男绿匦?,可以使瀏覽器使用整個網(wǎng)站的單個TCP連接。它不像HTTP/1.1,多路傳輸可以使瀏覽器并行下載網(wǎng)站的所有資產(chǎn)。所以,它要比HTTP/1.1快得多。
大多數(shù)互聯(lián)網(wǎng)通信都支持SPDY或HTTP/2。如果Web服務(wù)器并不支持這種得到廣泛支持的SPDY和HTTP/2瀏覽器,就無法充分利用支持TLS的Web服務(wù)器的全部價值。這是現(xiàn)代SSL真正使Web服務(wù)器更快的一個好例子,雖然最初握手花費(fèi)了一些成本。
結(jié)論:HTTPS面面觀
在考慮到現(xiàn)代SSL所帶來的安全和性能益處后,企業(yè)網(wǎng)站再也沒有理由不利用HTTPS去響應(yīng)每一個請求。如此便會簡化Web開發(fā)者和系統(tǒng)管理員的工作,因為他們不再需要編寫復(fù)雜的URL重定向來對一些網(wǎng)頁使用HTTP,而對另一些網(wǎng)頁使用HTTPS。
選擇TLS還可以在企業(yè)和企業(yè)網(wǎng)站之間建立信任。HTTPS可以確保網(wǎng)站的訪問者看到在企業(yè)網(wǎng)站上應(yīng)該看到的內(nèi)容。企業(yè)通過HTTPS提供內(nèi)容就可以避免利用普通的HTTP時ISP將廣告植入到企業(yè)網(wǎng)頁中的情況。
在保障企業(yè)網(wǎng)站安全的問題上,四個很實用的SSL最佳實踐是:
1.支持HSTS頭
2.使用SHA-2證書簽名
3.使用EDH 握手實現(xiàn)前向加密
4.升級到TLS1.2
另外,在此還提供使支持SSL的企業(yè)網(wǎng)站擁有更高性能的四個最佳方法:
1.支持OCSP 封裝
2.利用橢圓曲線加密(ECC)
3.支持TLS會話恢復(fù)
4.支持HTTP/2可SPDY