HTTPS 加密了什麼內容?

2022-07-03     大方老師單片機

原標題:HTTPS 加密了什麼內容?

HTTPS加密了什麼內容?

6月,維基媒體基金會發布公告,旗下所有網站將默認開HTTPS,這些網站中最為人所知的當然是全球最大的在線百-維基百科。而更早時候3月,百度已經發布公告,百度全站默認開HTTPS。淘寶也默默做了全HTTPS

網站實HTTPS,在國外已經非常普及,也是必然的趨勢GoogleFacebookTwitter等巨頭公司早已經實現全HTTPS,而且為鼓勵全球網站HTTPS實現Google甚至調整了搜尋引擎算法,讓采HTTPS的網站在搜索中排名更靠前。但是在國內HTTPS網站進展並不好,大部分的電商網站也僅僅是對帳戶登錄和交易HTTPS,比如京東;很多網站甚至連登錄頁面也沒有實HTTPS這裡面有很多的原因,比如現有架構改動的代價過大CDN實現困難對用戶隱私和安全的不重視等。

還有個重要原因是擔心網站實HTTPS後,網站的用戶體驗和性能下降明顯。事實上,通過合理部署和優化HTTPS網站的訪問速度和性能基本不會受到影響。

一、什麼HTTPS網站?

在介HTTPS網站前,首先簡單介紹什麼HTTPS

HTTPS可以理解HTTP+TLSHTTP是網際網路中使用最為廣泛的協議,目前不部分WEB應用和網站都是使HTTP協議傳輸。主流版本HTTP1.1HTTP2.0還未正式普及2.0GoogleSPDY協議演化而來,在性能上有明顯的提升。

TLS是傳輸層加密協議,HTTPS安全的核心,其前身SSL,主流版本SSL3.0TLS1.0TLS1.1TLS1.2SSL3.0TLS1.0由於存在安全漏洞,已經很少被使用到。

那網站為什麼要實HTTPS

一言概之,為保護用戶隱私和網絡安全。通過數據加密、校驗數據完整性和身份認證三種機制來保障安全。

由於本文的重點HTTPS網站的性能加速,對HTTPS通信過程和加解密算法就不展開介紹了。

感興趣的同學可Google之,基礎都是一樣的。

HTTPS網站的直觀了解

推薦一個在線版全球知名HTTPS網站檢測工-SSL LabsQualys SSL Labs同時也是很具有影響力SSL安全和性能研究機構。在線檢測地址為:SSL Server Test (Powered by Qualys SSL Labs)

SSL LabsHTTPS網站的證書鏈、安全性、性能、協議細節進行全面檢測,檢測完畢後會進行打分,同時給出一份詳細的檢測報告和改進建議。

三、提HTTPS網站性能和訪問速度

如果你認為網站加TLS證書,就HTTPS網站了,那你就12306犯了同樣的錯……

首先,網站在加TLS證書時,為什麼會變慢?這主要又兩方面造成:

1. HTTPSHTTP在通信時會產生更多的通信過程,隨RTT時間就會增加;

2. HTTPS通信過程的非對稱和對稱加解密計算會產生更多的伺服器性能和時間上的消耗。

但是,每HTTPS網站其實都有著巨大的優化空間。下面我們結WildDog網站,來看QPS3000080000,加載時延800ms300ms,這中間的每個優化點是怎樣的。

·HSTS

HTTPS網站通常的做法是HTTP的訪問在伺服器端302跳轉,跳轉HTTPS。但這302跳轉存在兩個問題:

1.使用不安全HTTP協議進行通信;

2.增加一Round-Trip Time

HSTSHTTP Strict Transport Security的縮寫,伺服器端配置支HSTS後,會在給瀏覽器返回HTTP Header中攜HSTS欄位,瀏覽器在獲取到該信息後,在接下來的一段時間內,對該網站的所HTTP訪問,瀏覽器都將請求在內部307跳轉HTTPS,而無需任何網絡過程。

·Session Resume

Session Resume即會話復用,這提HTTPS網站性能最基礎也是最有效的方法。

HTTPS握手階段,對伺服器性能消耗最為嚴重的是非對稱密鑰交換計算,Session Resume通過對已經建TLS會話的合理復用,節省非對稱密鑰交換計算次數,可大幅提高伺服器TLS性能。

TLS協議提供兩種實現機Session Resume,分別Session cacheSession ticket

Session Cache

Session Cache的原理是使Session ID查詢伺服器上session cache,如果命中,則直接使用緩存信息。Session Cache有個明顯的缺點,它不支持分布式緩存,只支持單機進程間的共享緩存。這對於多個接入節點的架構很難適用。

Session ticket

Session ticket的原理是伺服器session信息加密ticket發送給瀏覽器,瀏覽器後續進TLS握手時,會發ticket,如果伺服器能夠解密和處理ticket,則可以復session

Session ticket可以很好的解決分布式問題,Session ticket的支持率還不是很高,而且需要考慮伺服器key的安全性方案。

·OCSP Stapling

HTTPS通信過程時,瀏覽器會去驗證伺服器端下發的證書鏈是否已經被撤銷。驗證的方法有兩種CRLOCSP

CRL是證書撤銷列表CA機構會維護並定期更CRL列表,但這個機制存在不足:

1.CRL列表只會越來越大;

2.如果瀏覽器更新不及時,會造成誤判。

OCSP是實時證書在線驗證協議,是CRL機制的彌補,通OCSP瀏覽器可以實時的CA機構驗證證書。OCSP同樣存在不足:

1.CA機構要求過高,要求實時全球高可用;

2.客戶端的訪問隱私會CA機構被泄露;

3.增加瀏覽器的握手時延。

OCSP StaplingOCSP缺陷的彌補,伺服器可事先模擬瀏覽器對證書鏈進行驗證,並將帶CA機構簽名OCSP響應保存到本地,然後在握手階段,OCSP響應和證書鏈一起下發給瀏覽器,省去瀏覽器的在線驗證過程。

·SPDYHTTP2.0

SPDY Google推出的優 HTTP傳輸效率的協議,採用多路復用方式,能將多 HTTP請求在同一個連接上一起發出去,HTTP通信效率提升明顯HTTP2.0 IETF 2015 2月份通過 HTTP下一代協議,它 SPDY為原型SPDY HTTP2目前的實現默認使 HTTPS協議。

Nginx stable版本當前只能支持SPDY3.1,但最新發布1.9.5版本通過patch的方式,可以支HTTP2.0,這絕對是不一樣的奇妙體驗。不過不建議直接在線上環境部署,等2015年年底吧Nginx會發Stable版本支HTTP2.0.

·TCP優化

TCPHTTPS的承載TCP的性能提升,上層業務都可以受益。

慢啟動TCP規範中很重要的算法,其目的是為避免網絡擁塞。通過客戶端和伺服器之間的數據交換,從一個很保守的初始擁塞窗口值,收斂到雙方都認可的可用帶寬。當客戶端和伺服器收斂到一定帶寬時,如果一段時間內,雙方沒有收發數據包,伺服器端的擁塞窗口會被重置為初始擁塞窗口值。這對於連接中的突發數據傳輸性能影響是很嚴重的。

在沒有充足的理由時,伺服器端需要禁用空閒後的慢啟動機制。

另外,當前瀏覽器和伺服器之間的可用帶寬已經相對較大,所以我們還應該將初始的擁塞窗口值擴大,新RFC中的建議10Google16

·TLS Record Size

伺服器在建TLS連接時,會為每個連接分Buffer,這BufferTLS Record Size。這Size是可調。

Size值如果過小,頭部負載比重就會過大,最高可6%

Size值如果過大,那單RecordTCP層會被分成多個包發送。瀏覽器必須等待這些全部達到後,才能解密,一旦出現丟包、擁塞、重傳、甚至重新建立的情況,時延就會被相應增加。

TLS Record Size值如何選擇呢?有兩個參數可參考。

首先TLS Record Size要大於證書鏈OCSP Stapling響應大小,證書鏈不會分成多record

其次,要小於初始擁塞窗口值,保證伺服器在通信之初可以發送足夠數據而不需要等待瀏覽器確認

一般來說,從CA機構申請的證書2-3KB左右,級數越多,證書鏈越大ocsp響應2KB左右,所TLS Record Size是需要根據你的實際情況設置Google5KBWildDog當前的值6KB

·證書鏈完整且不冗餘

瀏覽器在驗證伺服器下發的證書鏈時,不僅僅驗證網站證書。如果是多級證書,網站證書和根證書之間所有的中間證書都需要被驗證。一旦出現證書鏈出現不完整,瀏覽器就會暫停握手過程,自行到網際網路進行驗證,這個時間基本是不可估算的。

至於怎麼查看,通openssl命令查看,也可以通SSL Labs幫你在線檢測。

·移動設備上ChaCha20-Poly1305

去年的時候,谷歌已經AndroidChrome瀏覽器上增加支持一個新TLS加密套件,這個加密套件就ChaCha20-Poly1305。它的設計者是伊利諾伊大學的教授和研究Dan BernsteinChaCha20被用來加密Poly1305被用來消息認證,兩個操作都需要運行TLS上。

當前流行的加密套AES-GCMTLS 1.2支持,它是不安RC4AES-CBC加密套件的替代品。但是,在不支持硬AES的設備上會引起性能問題,如大部分的智慧型手機、平板電腦、可穿戴設備。

ChaCha20-Poly1305正式為解決這個問題而生。以下Google的相關測試數據,在使Snapdragon S4 Pro處理器Nexus 4或其他手機中AES-GSM的加密吞吐量41.5MB/sChaCha20-Poly1305130.9MB/s。在使OMAP 4460的老Galaxy Nexus手機上AES-GSM的吞吐量24.1MB/sChaCha20-Poly130575.3MB/s

當前OpenSSL 1.0.2的分支上已經開始支ChaCha20-Poly1305,而ChaCha20-Poly1305支持最好的當BoringSSL。通過重新NginxSSL庫編譯,可以支持ChaCha20-Poly1305,不過對於線上環境,建議看明白源碼再使用。

除此之外,還有不少優化的細節,如硬體加速False Start、禁TLS壓縮等等,這裡就不扒了。

如果覺得這篇文章有幫助,就請收藏或者分享一下,希望可以幫到更多人。

文章來源: https://twgreatdaily.com/zh-my/0bc094493b0c6709576dea0f49312f3c.html