SSL和TLS部署實踐指南
在TLS中,所有安全性都以伺服器的加密身份開始,這就需要一個強大的私鑰來防止攻擊者進行模擬攻擊。同樣重要的是擁有一個有效和強大的證書,它會授予私鑰來代表一個特定的主機名。
對於大多數網站都來說,由2048位RSA密鑰提供的安全性就已經足夠了。 由於RSA公鑰演算法應用廣泛,從而使得它成為安全的默認選擇。對於2048位的RSA密鑰來說,能夠提供大約112位密鑰。如果你想要更高的安全性, RSA密鑰則不能很好地進行擴展。比如,要獲得128位的密鑰,就需要3072位的RSA密鑰,這顯然運行較慢。橢圓曲線數字簽名演算法ECDSA顯示為你提供了更好的安全性和更好的性能。以ECDSA256為例,,ECDSA密鑰提供了128位的密鑰。
如何保護私鑰
(1)要在具有足夠熵的可信計算機上生成私鑰。
(2)從一開始就要為密鑰設置密碼保護,以防止在存儲到備份系統中時受到攻擊。私鑰密碼在實際運行中不會有太大的安全保障,因為攻擊者完全可以隨時從進程內存中檢索密鑰。利用硬體設備(硬體安全模塊或HSM),即使在伺服器受損的情況下也可以保護私鑰,但是這些設備是昂貴的,因此僅適用於對安全有嚴格安全性要求的機構。
(3)被攻擊後,撤銷舊證書並生成新密鑰。
(4)每年更新證書,最好你的設備可以自動執行此過程,因此具有較短使用周期的證書在實踐中更為安全。
(5)除非特殊情況,否則每當獲得新證書時,就應該生成相應的新私鑰。
確保證書覆蓋所使用的網站
確保你的證書覆蓋你所使用的網站,避免無效的證書警告。
可靠的CA獲取證書
選擇CA時,請注意以下5方面:
(1)所有CA的安全狀態都要經過定期審核;
(2)選擇以CA為主業務且提供各種功能支持的機構;
(3)你選擇的CA應提供證書吊銷列表(CRL)和在線證書狀態協議(OCSP)撤銷的支持;
使用強大的證書籤名演算法
證書安全性取決於用於簽署證書的私鑰的強度及簽名中使用的哈希函數的強度。原來大多數證書都依賴於SHA1散列函數,不過現在已經證實這是不安全的。因此,目前的趨勢是正在向SHA256轉型。截止2016年底,SHA1證書將不再被網站支持。
TLS伺服器的配置
使用完整的證書鏈
無效的證書鏈會讓伺服器證書無效並導致瀏覽器發出安全警告,在大多數SSL和TLS部署中,只有伺服器證書需要兩個或多個證書來建立完整的信任鏈。
使用安全協議
SSL/TLS系列中有五種協議:SSL 2,SSL 3,TLS 1.0,TLS 1.1和TLS 1.2。
SSL2和SSL3已經非常過時了,建議不要使用。從理論上來講,TLS 1.0也不應該被使用,但在實踐中經常被使用。截至目前,TLS 1.1和 1.2都還沒有什麼安全問題,但只有 1.2提供了現代的加密演算法。
所以TLS 1.2應該是被使用的主要協議,因為它是唯一提供現代認證加密(也稱為AEAD)的版本。
選擇最佳加密套件
加密套件是用於在SSL/TLS握手期間協商安全設置的演算法的組合。在ClientHello和ServerHello消息交換之後,客戶端發送優先順序列表的密碼支持套件。然後,伺服器使用從列表中選擇的密碼套件進行響應。加密套件為以下組合:
密鑰交換演算法(RSA,DH,ECDH,PSK);
認證演算法(RSA,DSA);
批量加密演算法(AES,Camellia,ARIA);
消息認證碼演算法(SHA-256);
不過有幾個過時的加密原語必須禁止使用:
(1)匿名Diffie-Hellman(ADH)套件不提供身份驗證。
(2)NULL加密套件不提供加密。
(3)導出加密套件在連接協商時不安全,但也可以針對更強大的套件(FREAK攻擊)的伺服器使用。
(4)弱密碼(通常為40和56位)的套件使用可以輕鬆被攻擊。
(5)RC4是不安全的。
(6)3DES運行緩慢且易被攻擊。
在SSL 3及更高版本的協議版本中,客戶端會先提交一系列支持的加密套件,伺服器從列表中選擇一個用於連接的套件。然而,並不是所有的伺服器都能執行此操作,有些會固定的從客戶端列表中選擇第一個支持的套件,所以伺服器主動選擇最佳可用加密套件對於實現最佳安全性至關重要。
使用前向保密
前向安全或前向保密(英語:Forward Secrecy,縮寫:FS),有時也被稱為完美前向安全 [1] (英語:Perfect Forward Secrecy,縮寫:PFS),是密碼學中通訊協議的安全屬性,指的是長期使用的主密鑰泄漏不會導致過去的會話密鑰泄漏。 [2] 前向安全能夠保護過去進行的通訊不受密碼或密鑰在未來暴露的威脅。如果系統具有前向安全性,就可以保證在主密鑰泄露時歷史通訊的安全,即使系統遭到主動攻擊也是如此。
使用強大的密鑰交換演算法
確保數據的傳輸、存儲安全,通常都會對傳輸的數據加密後存儲或傳輸,接收方收到數據後解密密文,還原明文。通常採用的加密演算法主要有對稱密鑰加密演算法以及非對稱密鑰加密演算法。在安全的數據通信中,通信的雙方必須分別具有加密的密鑰以及解密的密鑰。一旦通信的密鑰被泄漏或破解,由其加密的信息就會被泄漏。因此,如何安全地交換或協商通信密鑰就成為至關重要的問題,從而如何保證密鑰的安全,特別是安全的密碼交換就成為電子商務中安全信息交換的核心問題。
2015年,研究人員發現一個SSL加密安全漏洞LogJam,LogJam漏洞將影響任何支持DHE_EXPORT密碼的伺服器及所有瀏覽器,包括最新版的IE、Chrome、Firefox、Safari等。隨後他們評估稱學術派黑客可以破解768位的密鑰,而國家支持的黑客更可以突破1024位的密鑰。所以為了安全起見,如果部署DHE,至少要配置2048位的密鑰。
正確部署前的驗證
也許在按著本文的方法在進行部署時,許多軟體和硬體配置都有了新的版本,建議大家先對自己的SSL / TLS做個全面評估,以確保運行的安全,推薦大家使用此鏈接進行測試。
實踐部署過程中的注意事項
避免一味的追求過高的安全性
使用太短的密碼肯定是不安全的,但使用太長的密碼也不一定安全,比如會導致操作的複雜。對於大多數網站來說,使用強於2048位的RSA密鑰以及使用強於256位的ECDSA密鑰會浪費CPU功耗,並可能會損害用戶體驗。類似地,增加臨時密鑰交換的強度對於DHE為2048位以及ECDHE為256位幾乎沒有什麼好處,使用高於128位的加密也沒有明顯的好處。
使用會話重用機制
由於SSL握手的非對稱運算無論是RSA還是ECDHE,都會消耗性能,故為了提高性能,對於之前已經進行過握手的SSL連接,儘可能減少握手round time trip以及運算。
SSL提供2中不同的會話復用機制。
(1)session id會話復用;
(2)session ticket會話復用,Session id會話復用有2個缺點,其一就是伺服器會大量堆積會話,特別是在實際使用時,會話老化時間配置為數小時,這種情況對伺服器內存佔用非常高。
使用廣域網優化
廣域網優化(WAN optimization),通常也被稱為廣域網加速(WAN acceleration),即通過一些優化技術來提供高性能的遠程數據訪問,從而提高應用程序在廣域網上的性能。
緩存公共內容
通過TLS進行通信時,瀏覽器可能會把所有流量都視為敏感數據。這樣,它們通常會使用內存來緩存某些資源,但一旦關閉瀏覽器,所有內容都可能會丟失。為了獲得性能提升並實現對某些資源的長期緩存,可以將公共資源(例如圖像)標記為公開。
啟用OCSP Stapling
而 OCSP Stapling ,顧名思義,是將查詢 OCSP 介面的工作交給伺服器來做,伺服器除了可以直接查詢 OCSP 信息,還可以僅進行少數次查詢並將響應緩存起來。當有客戶端向伺服器發起 TLS 握手請求時,伺服器將證書的 OCSP 信息隨證書鏈一同發送給客戶端,從而避免了客戶端驗證會產生的阻塞問題。由於 OCSP 響應是無法偽造的,因此這一過程也不會產生額外的安全問題。
使用快速加密原語
儘可能使用支持硬體加速AES的CPU,如果你真的想要進一步提高性能,請考慮使用ECDSA密鑰。
HTTP的加密
加密整個網站,加密的問題可能是當今最大的安全問題之一,比如:
(1)沒有TLS的網站
(2)具有TLS但不執行TLS的站點
(3)混合了TLS和非TLS內容的網站,有時甚至在同一網頁內
(4)編程錯誤的網站會破壞TLS
刪除混合內容
即使你加密了整個網站,仍然可能會從第三方網站中檢索出未加密的一些資源。混合內容頁面是通過TLS傳輸但是包含不通過TLS傳輸的資源(例如,JavaScript文件,圖像,CSS文件)的頁面。這樣的頁面非常不安全,這些不受保護的JavaScript資源會被中間人攻擊所利用,例如劫持整個用戶會話。
了解第三方服務
多數網站都是通過從另一台伺服器下載的JavaScript代碼來激活的第三方服務比如Google Analytics。包含第三方代碼的網站會創建一個隱含的信任連接,有效地使對方完全控制你的網站。雖然第三方連接可能不是惡意的,但是這些服務背後的廠商可能被攻擊,比如,如果一個伺服器被攻擊,那攻擊者將自動訪問所有依賴該伺服器的站點。
安全設置Cookie
為了在保持性能的前提下,實現安全,網站需要TLS,而且所有的Cookie在創建時都被明確標記為安全的。否則就有可能被MITM攻擊者利用,建議大家為你的Cookie添加加密完整性驗證。
安全的HTTP壓縮
CRIME攻擊通過利用壓縮過程中的漏洞,可解密部分安全連接。而禁用TLS壓縮可防止這種攻擊。另外要注意,HTTP壓縮可能被TIME和BREACH攻擊利用。與TLS壓縮不同,HTTP壓縮是必需的,不能關閉。因此,為了解決這些攻擊,需要對應用程序代碼進行更改。
配置使用HTTP嚴格傳輸安全(HSTS)
要激活HSTS保護,你可以向你的網站添加一個新的響應頭。之後,支持HSTS的瀏覽器就會執行它。通過自動將所有明文鏈接轉換為安全的鏈接,來實現了這一目標。
建議大家添加對HSTS的支持,這是為TLS安全性做出的最重要的保障。為了獲得最佳安全效果,請考慮使用HSTS預載入,將HSTS配置嵌入到瀏覽器中。只要是在有效期內,瀏覽器都將直接強制性的發起HTTPS請求。
部署內容安全策略(CSP)
敏感內容作出處理
由於使用基於雲的應用平台正在增加,所以為了讓所有敏感內容只讓接收方收到,你必須小心對敏感內容作出處理。
※網路安全行業競爭格局之變:谷歌Chronicle發布首款信息安全數據平台——Backstory
※域滲透——Kerberoasting
TAG:嘶吼RoarTalk |