天天看點

HTTPS中TLS 1.3/ECC/Brotli 算法

TLS 1.3

TLS(Transport Layer Security Protocol,傳輸層安全協定)主要目的是提供隐私和資料亮哥通信應用之間的完整性。該協定由兩層組成:TLS記錄協定(TLS Record)和TLS握手協定(TLS Handshake)。

TLS協定經過很多次版本的更新,目前低版本的TLS,如SSL 3.0/TLS 1.0等,存在許多嚴重漏洞,目前受到主流支援的TLS協定版本是1.1和1.2,但也都已經落後于時代的需求。在2018年8月份,IETF終于宣布TLS 1.3規範正式釋出了,标準規範定義在rfc8446。

相較于之前的版本TLS優化内容有:

l 相比過去的的版本,引入了新的密鑰協商機制 — PSK

l 支援 0-RTT 資料傳輸,在建立連接配接時節省了往返時間

l 廢棄了 3DES、RC4、AES-CBC 等加密元件,廢棄了 SHA1、MD5 等雜湊演算法

l ServerHello 之後的所有握手消息采取了加密操作,可見明文大大減少

l 不再允許對加密封包進行壓縮、不再允許雙方發起重協商

l DSA 證書不再允許在 TLS 1.3 中使用

在https中,每個連接配接的TLS的握手是很消耗資源及時間的,是以TLS 1.3的優化,比之前的版本建立連接配接的時間少了一個RTT,同等情況下,節省了很多時間,提高了響應速度。

TLS 1.3需要openssl 1.1.1支援,在nginx上,需要nginx 1.13+支援。

在編譯nginx的時候,需要添加編譯參數--with-openssl-opt=enable-tls1_3來開啟TLS 1.3支援,并在配置中ssl_protocols中添加TLSv1.3,對應的TLS1.3引入了新的算法,是以ssl_ciphers也需要添加新算法

預設情況下nginx因為安全原因,沒有開啟TLS 1.3的 0-RTT,可以通過指令ssl_early_data on來開啟。

ECC

ECC(Elliptic curve cryptography,橢圓曲線密碼學),一種建立公開密鑰的算法,基于橢圓曲線數學。

内置ECDSA公鑰的證書一般稱為ECC證書,内置RSA公鑰的證書一般稱為RSA證書。

ECC算法的數學理論非常深奧和複雜,在工程應用中比較難于實作,但它的機關安全強度相對較高,它的破譯或求解難度基本上是指數級的,黑客很難用通常使用的暴力破解的方法來破解。RSA算法的特點之一是數學原理相對簡單,在工程應用中比較易于實作,但它的機關安全強度相對較低。是以,ECC算法的可以用較少的計算能力提供比RSA加密算法更高的安全強度,有效地解決了“提高安全強度必須增加密鑰長度”的工程實作問題。

與RSA算法相比,ECC算法擁有一下優勢:

l 更适合于移動網際網路:ECC加密算法的密鑰長度很短(256位),意味着占用更少的存儲空間,更低的CPU開銷和占用更少的帶寬。随着越來越多的使用者使用移動裝置來完成各種網上活動,ECC加密算法為移動網際網路安全提供更好的客戶體驗。

l 更好的安全性:ECC加密算法提供更強的保護,比目前的其他加密算法能更好的防止攻擊,使你的網站和基礎設施比用傳統的加密方法更安全,為移動網際網路安全提供更好的保障。

l 更好的性能:ECC加密算法需要較短的密鑰長度來提供更好的安全,例如,256位的ECC密鑰加密強度等同于3072位RSA密鑰的水準(目前普通使用的RSA密鑰長度是2048位)。其結果是你以更低的計算能力代價得到了更高的安全性。經國外有關權威機構測試,在Apache和IIS伺服器采用ECC算法,Web伺服器響應時間比RSA快十幾倍。

l 更大的IT投資回報:ECC可幫助保護您的基礎設施的投資,提供更高的安全性,并快速處理爆炸增長的移動裝置的安全連接配接。ECC的密鑰長度增加速度比其他的加密方法都慢(一般按128位增長,而 RSA則是倍數增長,如:1024 –2048--4096),将延長您現有硬體的使用壽命,讓您的投資帶來更大的回報。

不過使用ECC證書有兩個問題需要注意:

1、不是所有類型證書都支援ECC,一般需要商業證書的增強版本中才支援

2、一些舊的裝置或浏覽器不支援ECC,可能需要ECC+RSA雙證書的模式來使用

Brotli

Brotli是Google于2015年9月推出的無損壓縮算法,Brotli通過變種的LZ77算法、Huffman編碼以及二階文本模組化等方式進行資料壓縮,與其他壓縮算法相比,它有者更高的壓縮效率。

更具Google釋出的報告指出,Brotli有一下特點:

l 針對常見的 Web 資源内容,Brotli 的性能相比 Gzip 提高了 17-25%;

l 當 Brotli 壓縮級别為 1 時,壓縮率比 Gzip 壓縮等級為 9(最高)時還要高;

l 在處理不同 HTML 文檔時,Brotli 依然能夠提供非常高的壓縮率。

Brotli的支援必須依賴HTTPS,nginx支援Brotli必須編輯添加brotli子產品

brotli子產品源碼位址

https://github.com/eustas/ngx_brotli.git

,下載下傳之後,在nginx編譯的時候通過編譯參數--add-module=/path/to/ngx_brotli進行編譯添加。添加之後通過配置檔案中添加配置啟用brotli。

HTTPS中TLS 1.3/ECC/Brotli 算法

在開發者工具中檢視headers:

HTTPS中TLS 1.3/ECC/Brotli 算法

繼續閱讀