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