一、微信小程序接入的困境農(nóng)歷新年將至,微信小程序也如期發(fā)布,開發(fā)者在接入微信小程序過程中,會(huì)遇到以下問題: 小程序要求必須通過 HTTPS 完成與服務(wù)端通信,若開發(fā)者選擇自行搭建 HTTPS 服務(wù),那需要自行 SSL 證書申請(qǐng)、部署,完成 https 服務(wù)搭建,效率低流程冗長;且 HTTPS 的 SSL 加解析,對(duì)服務(wù)器的 CPU 有極大的開銷。 不僅僅是小程序,蘋果 iOS 平臺(tái),Google Android 在 2017 也逐步強(qiáng)制要求開發(fā)者使用 HTTPS 接入。HTTPS 似乎是一個(gè)繞不開的門檻,讓不少開發(fā)者頭痛不已。 針對(duì)以上問題,騰訊云的負(fù)載均衡服務(wù)(cloud load balance),希望通過對(duì) HTTPS 的性能優(yōu)化,提供一鍵式的 SSL 證書申請(qǐng)服務(wù),降低 HTTPS 的應(yīng)用門檻和使用成本,讓開發(fā)者能快速接入微信小程序等服務(wù)。首先,先讓我們看看 HTTP 與 HTTPS 的對(duì)比,逐一解開您的謎團(tuán)。 二、為什么要接入 HTTPS—HTTP 的安全風(fēng)險(xiǎn)HTTP 協(xié)議是一個(gè)非常簡單和高效的協(xié)議,互聯(lián)網(wǎng)大部分的主流應(yīng)用默認(rèn)都是使用的HTTP。由于性能和上個(gè)世紀(jì) 90 年代使用環(huán)境的限制,HTTP 協(xié)議本身并不是一個(gè)為了安全設(shè)計(jì)的協(xié)議,既沒有身份認(rèn)證,也沒有一致性檢驗(yàn),最頭疼的是,HTTP 所有的內(nèi)容都是明文傳輸?shù)摹?/p> 另外一方面,互聯(lián)網(wǎng)的發(fā)展也是日新月異,各種 HTTP 應(yīng)用不斷地滲透到人們生活的方方面面。不管是社交、購物、金融、游戲、還是搜索,這些 HTTP 服務(wù)都能帶給人們極大的便捷,提升生活質(zhì)量和效率。 顯然,HTTP 和人們生活及經(jīng)濟(jì)利益密切相關(guān),遺憾的是,它不安全。也就意味著這里一 定潛藏著巨大的安全隱患。這些隱患又集中表現(xiàn)在如下兩方面: 1、隱私泄露由于 HTTP 本身是明文傳輸,用戶和服務(wù)端之間的傳輸內(nèi)容都能被中間者查看。也就是說 你在網(wǎng)上搜索、購物、訪問的網(wǎng)點(diǎn)、點(diǎn)擊的頁面等信息,都可以被「中間人」獲取。由于國人大多不太重視隱私的保護(hù),這里的風(fēng)險(xiǎn)比較隱性,傷害后果也不太好定量評(píng)估。已知的一些比較嚴(yán)重的隱私泄露事件包括:
2、頁面劫持隱私泄露的風(fēng)險(xiǎn)比較隱蔽,用戶基本感知不到。但另外一類劫持的影響就非常明顯非常直接了——頁面劫持,也就是直接篡改用戶的瀏覽頁面。有很多頁面劫持很簡單粗暴,直接插入第三方廣告或者運(yùn)營商的流量提示信息。 但也有一些劫持做得比較隱蔽,比如下面的京東頁面劫持:其中上圖是使用 HTTP 方面的頁面,頂部箭頭所示的地方出現(xiàn)了一個(gè)購物推薦,很逼真,就像京東或者瀏覽器官方的工具。
但換成 HTTPS 訪問,就沒有這個(gè)工具頁面,顯然是被劫持了。
3、劫持路徑及分類那劫持到底是如何產(chǎn)生的呢?從技術(shù)上來講比較簡單,在內(nèi)容經(jīng)過的地方進(jìn)行監(jiān)聽篡改就行了。但要想把整個(gè)劫持的產(chǎn)業(yè)鏈條摸清楚,需要深入黑產(chǎn)內(nèi)部,比較困難。有一點(diǎn)可以肯定的是,劫持大部分都是在中間的網(wǎng)絡(luò)節(jié)點(diǎn)發(fā)生的,又叫「中間人」(MITM, man in the middle)。如下圖所示:
由于信息傳輸都需要經(jīng)過上述的「中間人節(jié)點(diǎn)」,它們又擁有信息的讀寫權(quán)限,如果信息沒有加密,也沒有校驗(yàn),那么想要查看隱私,篡改頁面,對(duì)于「中間人」來說可謂是輕而易舉。 那劫持又有哪些主要的分類呢?根據(jù)劫持路徑劃分的話,主要是下圖所示的三類:
DNS 劫持,客戶端劫持和鏈路劫持。 根據(jù)我們的不完全統(tǒng)計(jì),業(yè)務(wù)遇到的絕大部分劫持 (90%)都屬于鏈路劫持。 三、HTTPS 是解決鏈路劫持的核武器HTTPS 為什么能很好的解決鏈路劫持呢?主要是三大武器: 1、身份認(rèn)證—防假冒,防抵賴每次建立一個(gè)全新的 HTTPS 連接時(shí),都需要對(duì)身份進(jìn)行認(rèn)證,確保用戶訪問的是正確的目的網(wǎng)站。
2、內(nèi)容加密—防竊聽內(nèi)容加密意味端對(duì)端的通信內(nèi)容全都是密文,中間人無法直接查看到明文,HTTPS 所有的應(yīng)用層內(nèi)容都是通過對(duì)稱加密來實(shí)現(xiàn)加密和解密的。
3、一致性校驗(yàn)—防篡改通過對(duì)數(shù)據(jù)和共享密鑰的 MAC 碼來防止中間者篡改消息內(nèi)容,確保數(shù)據(jù)的一致性。
四、HTTPS 普及之痛事實(shí)上 HTTPS 1995 年就誕生了,是一個(gè)非常古老、成熟的協(xié)議。同時(shí)又能很好地防止內(nèi)容劫持,保護(hù)用戶隱私。但是為什么一直到今天,還有大部分的網(wǎng)站不支持 HTTPS,只使用 HTTP 呢?
影響 HTTPS 普及的主要原因可以概括為兩個(gè)字:「慢」和「貴」。 1、慢在未經(jīng)任何優(yōu)化的情況下,HTTPS 會(huì)嚴(yán)重降低用戶的訪問速度。主要因素包括:
2、貴HTTPS 的貴,主要體現(xiàn)在如下三方面:
五、騰訊云負(fù)載均衡器 HTTPS 的性能優(yōu)化騰訊云負(fù)載均衡器深針對(duì) HTTPS 推廣應(yīng)用過程中的痛點(diǎn)進(jìn)行了深度優(yōu)化。接下來我們?cè)敿?xì)地介紹下這些優(yōu)化方案: 1、訪問速度的優(yōu)化前文提到 HTTPS 非常慢,我們也主要從兩個(gè)層面對(duì)訪問速度進(jìn)行了優(yōu)化:協(xié)議棧和前后端資源。 全鏈路協(xié)議棧優(yōu)化HTTPS 可以認(rèn)為是 HTTP over SSL,而 HTTPS 又是使用 TCP 協(xié)議進(jìn)行傳輸,所以整個(gè)協(xié)議棧的優(yōu)化涉及到三個(gè)層面:
SSL 協(xié)議優(yōu)化最重要的目標(biāo)還是提升簡化握手的比例。騰訊云通過實(shí)現(xiàn)全局 session cache 和全局 session ticket 來提升 SSL 的簡化握手比例,節(jié)省用戶訪問時(shí)間和計(jì)算資源。
HTTP2 相比 HTTP1.X 最大的優(yōu)勢(shì)就是多路復(fù)用,能夠?qū)⒍鄠€(gè) HTTP 請(qǐng)求通過一個(gè) TCP 連接并行發(fā)送,相比 HTTP1.X 的串行發(fā)送,性能無疑是提升很多。 由于 HTTP2 是從 SPDY 繼承發(fā)展出來的,所以部分較老的客戶端只支持 SPDY,不支持 HTTP2。而大部分新客戶端,只支持 HTTP2,不支持 SPDY。為了同時(shí)兼容新老客戶端的性能,騰訊云同時(shí)支持 SPDY 和 HTTP2,最大化提升新老版本客戶端的性能。 前后端優(yōu)化HTTP2 及 SPDY 最大的特性和優(yōu)勢(shì)就是多路復(fù)用,能夠?qū)⒍鄠€(gè)請(qǐng)求通過一個(gè)連接并行發(fā)送出來。這個(gè)特性雖然很強(qiáng)大,但是如果還使用傳統(tǒng)的 HTTP 優(yōu)化策略,多路復(fù)用的效果會(huì)很有限。比如域名分片,pipline 等都會(huì)影響多路復(fù)用的效果。于是我們又通過多次的數(shù)據(jù)實(shí)驗(yàn),調(diào)整了一些前端資源包括后端接入的策略:
2、計(jì)算性能優(yōu)化針對(duì) HTTPS 的計(jì)算性能,騰訊云主要從三個(gè)層面進(jìn)行了優(yōu)化,包括:
下面再詳細(xì)介紹一下: RSA 異步代理計(jì)算騰訊云針對(duì) HTTPS 性能消耗最嚴(yán)重的環(huán)節(jié)——非對(duì)稱密鑰交換算法進(jìn)行了重點(diǎn)優(yōu)化。優(yōu)化思路主要包括如下三部分:
通過對(duì) openssl 握手協(xié)議棧的深度改造以及 SSL 硬件加速卡的 RSA 計(jì)算性能,騰訊云 CLB 的 SSL 計(jì)算能力提升了 350%。單機(jī) ECDHE_RSA 處理性能達(dá)到了 65000 cps。 對(duì)稱加密算法的自動(dòng)最優(yōu)選擇騰訊云根據(jù)應(yīng)用場景匹配最優(yōu)的對(duì)稱加密算法:
3、協(xié)議的并行卸載騰訊云 CLB 支持現(xiàn)在主流的全部 HTTP 類協(xié)議接入和卸載。包括:
CLB 能夠?qū)⑸鲜銎邔訁f(xié)議統(tǒng)一轉(zhuǎn)換成 HTTP1.1,透傳給業(yè)務(wù)。對(duì)業(yè)務(wù)的好處也非常明顯: 0 開發(fā)成本就能使用 HTTPS 和 HTTP2,極大減少了適配各種協(xié)議和客戶端的壓力。
4、安全安全涉及的領(lǐng)域和場景非常龐大,HTTPS 雖然能夠徹底解決鏈路劫持,但是對(duì)于如下兩類問題卻無能為力:
上述兩類都是經(jīng)常困擾業(yè)務(wù)的風(fēng)險(xiǎn)極大的安全問題。 針對(duì)上述問題,騰訊云也設(shè)計(jì)實(shí)現(xiàn)了一套針對(duì) HTTPS 的防 CC 和 WAF 的安全系統(tǒng),能夠有效地防御這類安全風(fēng)險(xiǎn)。
Keyless(無密鑰加載)私鑰的重要性對(duì)證書稍微熟悉的朋友都知道,SSL 密鑰和證書都是成對(duì)使用的,一個(gè)證書一定唯一對(duì)應(yīng)一個(gè)私鑰。整個(gè) HTTPS 最重要的一個(gè)數(shù)據(jù)就是 SSL 的私鑰了,如果私鑰泄露,整個(gè)握手過程就可以被劫持,簽名可以被偽造,對(duì)稱密鑰也可以被破解。整個(gè) HTTPS 就毫無安全可言。 傳統(tǒng)的私鑰使用方案和風(fēng)險(xiǎn)傳統(tǒng)的私鑰方案就是將私鑰和應(yīng)用程序綁定在一起。比如大家熟知的 nginx, apache,如果想使用 HTTPS,必須在部署 nginx 的接入機(jī)器上部署相關(guān)的證書和私鑰。
這種方案會(huì)有如下安全上的問題:私鑰部署在云端或者 CDN,如果泄露了怎么辦? 無秘鑰方式雖然騰訊云的內(nèi)網(wǎng)非常安全,但是出于對(duì)客戶的安全負(fù)責(zé),徹底打消用戶對(duì)私鑰泄露的顧 慮,確保用戶對(duì)私鑰的絕對(duì)控制,騰訊云提供一種無私鑰的加載方案。這個(gè)方案核心是「不需要把私鑰存儲(chǔ)在騰訊云,允許用戶使用自己的服務(wù)器保管私鑰,完成 HTTPS 的接入」。 騰訊云完全接觸不到私鑰,客戶甚至可以把私鑰保存在自己家里的服務(wù)器上。 它的接入過程如下:
整個(gè)過程,騰訊云接觸不到 HTTPS 私鑰,需要注意一點(diǎn)的,keyless server 是騰訊云提供一個(gè)服務(wù)端程序,代碼開源,用戶自主部署,服務(wù)端行為用戶掌握得一清二楚。
六、零門檻,HTTPS 快速接入微信小程序騰訊云 CLB 負(fù)載均衡器通過對(duì)協(xié)議棧及服務(wù)端的深度優(yōu)化,實(shí)現(xiàn)了 HTTPS 性能的巨大提升。同時(shí),我們也通過與國際上著名的證書機(jī)構(gòu)合作,極大降低了證書的成本。騰訊云 CLB 在如下幾個(gè)方面,能夠?yàn)槲⑿判〕绦蚪尤霂矸浅o@著的收益:
以上的這些收益,可以幫助開發(fā)者降低 HTTPS 的試用門檻。 |