一篇文章爲你深度解析HTTPS 協議


作者:羅成   騰訊雲資深研發工程師   

出處:騰訊雲技術社區

-------------------------------------------------------



一、微信小程序接入的困境

農曆新年將至,微信小程序也如期發佈,開發者在接入微信小程序過程中,會遇到以下問題:

小程序要求必須通過 HTTPS 完成與服務端通信,若開發者選擇自行搭建 HTTPS 服務,那需要自行 SSL 證書申請、部署,完成 https 服務搭建,效率低流程冗長;且 HTTPS 的 SSL 加解析,對服務器的 CPU 有極大的開銷。

不僅僅是小程序,蘋果 iOS 平臺,Google Android 在 2017 也逐步強制要求開發者使用 HTTPS 接入。HTTPS 似乎是一個繞不開的門檻,讓不少開發者頭痛不已。

針對以上問題,騰訊雲的負載均衡服務(cloud load balance),希望通過對 HTTPS 的性能優化,提供一鍵式的 SSL 證書申請服務,降低 HTTPS 的應用門檻和使用成本,讓開發者能快速接入微信小程序等服務。首先,先讓我們看看 HTTP 與 HTTPS 的對比,逐一解開您的謎團。

二、爲什麼要接入 HTTPS—HTTP 的安全風險

HTTP 協議是一個非常簡單和高效的協議,互聯網大部分的主流應用默認都是使用的HTTP。由於性能和上個世紀 90 年代使用環境的限制,HTTP 協議本身並不是一個爲了安全設計的協議,既沒有身份認證,也沒有一致性檢驗,最頭疼的是,HTTP 所有的內容都是明文傳輸的。

另外一方面,互聯網的發展也是日新月異,各種 HTTP 應用不斷地***到人們生活的方方面面。不管是社交、購物、金融、遊戲、還是搜索,這些 HTTP 服務都能帶給人們極大的便捷,提升生活質量和效率。

顯然,HTTP 和人們生活及經濟利益密切相關,遺憾的是,它不安全。也就意味着這裏一 定潛藏着巨大的安全隱患。這些隱患又集中表現在如下兩方面:

1、隱私泄露

由於 HTTP 本身是明文傳輸,用戶和服務端之間的傳輸內容都能被中間者查看。也就是說 你在網上搜索、購物、訪問的網點、點擊的頁面等信息,都可以被「中間人」獲取。由於國人大多不太重視隱私的保護,這裏的風險比較隱性,傷害後果也不太好定量評估。已知的一些比較嚴重的隱私泄露事件包括:

  1. QQ 登陸態被不法分子竊取,然後在異地登陸,進行廣告和欺詐行爲。

  2. 用戶手機號和身份信息泄露。

  3. 用戶網上行爲泄露。比如搜索了一所醫院,很快就會有人打電話進行推廣(非效果廣告)。

2、頁面劫持

隱私泄露的風險比較隱蔽,用戶基本感知不到。但另外一類劫持的影響就非常明顯非常直接了——頁面劫持,也就是直接篡改用戶的瀏覽頁面。有很多頁面劫持很簡單粗暴,直接插入第三方廣告或者運營商的流量提示信息。

v2-bd5b9ca9f586051fcba7f0be3d8cf19a_b.pn

但也有一些劫持做得比較隱蔽,比如下面的京東頁面劫持:其中上圖是使用 HTTP 方面的頁面,頂部箭頭所示的地方出現了一個購物推薦,很逼真,就像京東或者瀏覽器官方的工具。

v2-861d2159b3944a99584d5286c3b8dbf7_b.pn

但換成 HTTPS 訪問,就沒有這個工具頁面,顯然是被劫持了。

3、劫持路徑及分類

那劫持到底是如何產生的呢?從技術上來講比較簡單,在內容經過的地方進行監聽篡改就行了。但要想把整個劫持的產業鏈條摸清楚,需要深入黑產內部,比較困難。有一點可以肯定的是,劫持大部分都是在中間的網絡節點發生的,又叫「中間人」(MITM, man in the middle)。如下圖所示:

v2-18d39b99d4bef72d92c8b22f80d74861_b.pn

由於信息傳輸都需要經過上述的「中間人節點」,它們又擁有信息的讀寫權限,如果信息沒有加密,也沒有校驗,那麼想要查看隱私,篡改頁面,對於「中間人」來說可謂是輕而易舉。

那劫持又有哪些主要的分類呢?根據劫持路徑劃分的話,主要是下圖所示的三類:

v2-d994ef7733d089fa2a51b1d303ce2f87_b.pn

DNS 劫持,客戶端劫持和鏈路劫持。 根據我們的不完全統計,業務遇到的絕大部分劫持 (90%)都屬於鏈路劫持。

三、HTTPS 是解決鏈路劫持的核武器

HTTPS 爲什麼能很好的解決鏈路劫持呢?主要是三大武器:

1、身份認證—防假冒,防抵賴

每次建立一個全新的 HTTPS 連接時,都需要對身份進行認證,確保用戶訪問的是正確的目的網站。

v2-d994ef7733d089fa2a51b1d303ce2f87_b.pn

2、內容加密—防竊聽

內容加密意味端對端的通信內容全都是密文,中間人無法直接查看到明文,HTTPS 所有的應用層內容都是通過對稱加密來實現加密和解密的。

v2-7cebe455a54f0daa9c4e2c00328b6682_b.pn

3、一致性校驗—防篡改

通過對數據和共享密鑰的 MAC 碼來防止中間者篡改消息內容,確保數據的一致性。

四、HTTPS 普及之痛

事實上 HTTPS 1995 年就誕生了,是一個非常古老、成熟的協議。同時又能很好地防止內容劫持,保護用戶隱私。但是爲什麼一直到今天,還有大部分(約66%)的網站不支持 HTTPS,只使用 HTTP 呢?

影響 HTTPS 普及的主要原因可以概括爲兩個字:「慢」和「貴」。

1、慢

在未經任何優化的情況下,HTTPS 會嚴重降低用戶的訪問速度。主要因素包括:

  1. 網絡耗時。由於協議的規定,必須要進行的網絡傳輸。比如 SSL 完全握手,302 跳轉等。最壞情況下可能要增加 7 個 RTT。v2-d4e7d77a51713aa05e2fa7db1d0bdf24_b.pn

  2. 計算耗時。無論是客戶端還是服務端,都需要進行對稱加解密,協議解析,私鑰計算,證書校驗等計算,增加大量的計算時間。

2、貴

HTTPS 的貴,主要體現在如下三方面:

  1. 服務器成本。HTTPS 的私鑰計算會導致服務端性能的急劇下降,甚至不到 HTTP 協議的十分之一,也就是說,如果 HTTP 的性能是 10000cps,HTTPS 的性能可能只有幾百 cps,會增加數倍甚至數十倍的服務器成本。

  2. 證書成本。根據證書個數及證書類型,一年可能需要花費幾百到幾百萬不等的證書成本。

  3. 開發和運維成本。HTTPS 協議比較複雜,openssl 的開源實現也經常發生安全BUG, 包括協議的配置,證書的更新,過期監控,客戶端的兼容等一系列問題都需要具備專業背景的技術人員跟進處理。

五、騰訊雲負載均衡器 HTTPS 的性能優化

騰訊雲負載均衡器深針對 HTTPS 推廣應用過程中的痛點進行了深度優化。接下來我們詳細地介紹下這些優化方案:

1、訪問速度的優化

前文提到 HTTPS 非常慢,我們也主要從兩個層面對訪問速度進行了優化:協議棧和前後端資源。

全鏈路協議棧優化

HTTPS 可以認爲是 HTTP over SSL,而 HTTPS 又是使用 TCP 協議進行傳輸,所以整個協議棧的優化涉及到三個層面:

  1. TCP 優化。包括擁塞窗口的調整,tcp fast open,reuseport 的支持,最新的 BBR 擁塞控制算法的支持等。

  2. SSL 協議優化。分佈式 session cache, session ticket,False start, ocsp stapling file, 動態 record size 等。v2-e2a4318ba0cf7143a2f10131fc92632e_b.pn

SSL 協議優化最重要的目標還是提升簡化握手的比例。騰訊雲通過實現全局 session cache 和全局 session ticket 來提升 SSL 的簡化握手比例,節省用戶訪問時間和計算資源。

3.應用層協議優化。同時支持 SPDY,HTTP2,HSTS 等。

HTTP2 相比 HTTP1.X 最大的優勢就是多路複用,能夠將多個 HTTP 請求通過一個 TCP 連接並行發送,相比 HTTP1.X 的串行發送,性能無疑是提升很多。

由於 HTTP2 是從 SPDY 繼承發展出來的,所以部分較老的客戶端只支持 SPDY,不支持 HTTP2。而大部分新客戶端,只支持 HTTP2,不支持 SPDY。爲了同時兼容新老客戶端的性能,騰訊雲同時支持 SPDY 和 HTTP2,最大化提升新老版本客戶端的性能。

前後端優化

HTTP2 及 SPDY 最大的特性和優勢就是多路複用,能夠將多個請求通過一個連接並行發送出來。這個特性雖然很強大,但是如果還使用傳統的 HTTP 優化策略,多路複用的效果會很有限。比如域名分片,pipline 等都會影響多路複用的效果。於是我們又通過多次的數據實驗,調整了一些前端資源包括後端接入的策略:

  1. 域名收歸。通過頁面資源及性能分析,確實域名收歸方案,比如移動頁面不超過 3 個。

  2. 預建連接。STGW 提供預連接頁面,通過對熱點頁面的用戶行爲進行分析,提前建立連接,減少協議開銷對用戶體驗的影響。

  3. 通過騰訊雲遍佈全球的 CDN 及 IDC 節點就近完成 HTTPS 卸載。

2、計算性能優化

針對 HTTPS 的計算性能,騰訊雲主要從三個層面進行了優化,包括:

  1. 儘量減少完全握手的發生,提升簡化握手比例。比如前文提到的全局 sessioncache 和 session ticket。

  2. 對於不可避免的完全握手,騰訊雲實現了 RSA 異步代理計算,通過對協議棧的改造和 SSL 硬件加速卡的使用,大幅度提升了 HTTPS 的計算能力和防***能力。

  3. 對稱加密計算過程也進行了場景使用上的優化。

下面再詳細介紹一下:

RSA 異步代理計算

騰訊雲針對 HTTPS 性能消耗最嚴重的環節——非對稱密鑰交換算法進行了重點優化。優化思路主要包括如下三部分:

  1. 算法分離。就是將最消耗 CPU 資源的算法剝離出來,不讓消耗本地的 CPU 資源。

  2. 代理計算。使用空閒的 CPU 機器或者專門的 SSL 硬件加速卡來完成 RSA 計算。

  3. 異步執行。傳統的 openssl 在進行 RSA 的時候,上層應用,比如 NGINX 都需要同步等待。這一步驟也非常影響,必須要進行異步改造,這樣在加速集羣進行 RSA 計算的時候,接入服務器也可以接入其他用戶的請求,提升吞吐能力。

通過對 openssl 握手協議棧的深度改造以及 SSL 硬件加速卡的 RSA 計算性能,騰訊雲 CLB 的 SSL 計算能力提升了 350%。單機 ECDHE_RSA 處理性能達到了 65000 cps。

對稱加密算法的自動最優選擇

騰訊雲根據應用場景匹配最優的對稱加密算法:

  1. 對於視頻等流媒體內容,優先使用 aes-gcm。

  2. 針對不支持 aes-ni 硬件加速指令的移動終端,使用 chacha20-poly1305 。

  3. 針對 IE6 等古董級別的客戶端,使用 RC4 算法。v2-ea9149f43f50b3644b35e3c04fedc304_b.pn

3、協議的並行卸載

騰訊雲 CLB 支持現在主流的全部 HTTP 類協議接入和卸載。包括:

  1. http1.0/http1.1

  2. http2 及前身 spdy3.1

  3. https,包括 ssl3.0, tlsv1.0,tlsv1.1,tlsv1.2

  4. websocket 及 secure websocket。

  5. tcp,udp 透明轉發。

CLB 能夠將上述七層協議統一轉換成 HTTP1.1,透傳給業務。對業務的好處也非常明顯: 0 開發成本就能使用 HTTPS 和 HTTP2,極大減少了適配各種協議和客戶端的壓力。v2-7c403a23eda32a1789fdf82d518483a5_b.pn

4、安全

安全涉及的領域和場景非常龐大,HTTPS 雖然能夠徹底解決鏈路劫持,但是對於如下兩類問題卻無能爲力:

  1. CC ***,特別是 HTTPS 計算型***,HTTPS 的性能會急劇降低,引入更大的安全風險。

  2. 業務安全,包括 SQL 注入,XSS 跨站、網站掛馬等。

上述兩類都是經常困擾業務的風險極大的安全問題。

針對上述問題,騰訊雲也設計實現了一套針對 HTTPS 的防 CC 和 WAF 的安全系統,能夠有效地防禦這類安全風險。

v2-31a208cb31600e600837df22c19481d4_b.pn

六、零門檻,HTTPS 快速接入微信小程序

騰訊雲 CLB 負載均衡器通過對協議棧及服務端的深度優化,實現了 HTTPS 性能的巨大提升。同時,我們也通過與國際上著名的證書機構合作,極大降低了證書的成本。騰訊雲 CLB 在如下幾個方面,能夠爲微信小程序接入帶來非常顯著的收益:

  1. 提供一鍵式的 SSL 證書申請,CLB 負載均衡服務作爲 HTTPS 代理,減輕開發負擔,讓開發者可以專注小程序業務的開發。

  2. 使用 HTTPS 並不會降低 client 端的訪問速度。HTTP、HTTPS 訪問時延幾乎一致。

  3. 集羣內單臺服務器 SSL 加解密性能,高達 6.5Wcps 的完全握手。相比高性能CPU 提升了至少 3.5 倍,節省了服務端成本,極大提升了業務運營及流量突漲時的服務能力, 增強了計算型防***的能力。

  4. 支持多種協議卸載及轉換。減少業務適配客戶端各種協議的壓力,業務後端只需要支持 HTTP1.1 就能使用 HTTP2,SPDY,SSL3.0,TLS1.2 等各版本協議。滿足微信小程序,iOS 平臺等對協議的要求。

  5. SSL 證書申請、監控、替換。我們和國際頂級的證書廠商 comodo,symantec 已有深入合作,服務體系完善。

  6. 防 CC 及 WAF 功能。能夠有效杜絕慢連接、高頻定點***、SQL 注入、網頁掛馬等應用層***。

以上的這些收益,可以幫助開發者降低 HTTPS 的試用門檻。開發者還可以通過訪問我們官方網站或點擊「微信小程序解決方案」,查看微信小程序接入的最佳實踐。





------------------------------

獲取更多雲計算技術乾貨,可請前往 騰訊雲技術社區

微信公衆號:騰訊雲技術社區( QcloudCommunity)

wKioL1jBZi2QyEHtAAAvZ3cJzxs970.jpg-wh_50

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章