微信小程序接入的困境 農(nóng)歷新年將至,微信小程序也如期發(fā)布,開發(fā)者在接入微信小程序過程中,會遇到以下問題: 小程序要求必須通過 HTTPS 完成與服務(wù)端通信,若開發(fā)者選擇自行搭建 HTTPS 服務(wù),那需要自行 SSL 證書申請、部署,完成 https 服務(wù)搭建,效率低流程冗長;且 HTTPS 的 SSL 加解析,對服務(wù)器的 CPU 有極大的開銷。 不僅僅是小程序,蘋果 iOS 平臺,Google Android 在 2017 也逐步強(qiáng)制要求開發(fā)者使用 HTTPS 接入。HTTPS 似乎是一個繞不開的門檻,讓不少開發(fā)者頭痛不已。 針對以上問題,騰訊云的負(fù)載均衡服務(wù)(cloud load balance),希望通過對 HTTPS 的性能優(yōu)化,提供一鍵式的 SSL 證書申請服務(wù),降低 HTTPS 的應(yīng)用門檻和使用成本,讓開發(fā)者能快速接入微信小程序等服務(wù)。首先,先讓我們看看 HTTP 與 HTTPS 的對比,逐一解開您的謎團(tuán)。 HTTP 協(xié)議是一個非常簡單和高效的協(xié)議,互聯(lián)網(wǎng)大部分的主流應(yīng)用默認(rèn)都是使用的HTTP。由于性能和上個世紀(jì) 90 年代使用環(huán)境的限制,HTTP 協(xié)議本身并不是一個為了安全設(shè)計的協(xié)議,既沒有身份認(rè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)在如下兩方面: 由于 HTTP 本身是明文傳輸,用戶和服務(wù)端之間的傳輸內(nèi)容都能被中間者查看。也就是說 你在網(wǎng)上搜索、購物、訪問的網(wǎng)點、點擊的頁面等信息,都可以被「中間人」獲取。由于國人大多不太重視隱私的保護(hù),這里的風(fēng)險比較隱性,傷害后果也不太好定量評估。已知的一些比較嚴(yán)重的隱私泄露事件包括: QQ 登陸態(tài)被不法分子竊取,然后在異地登陸,進(jìn)行廣告和欺詐行為。 用戶手機(jī)號和身份信息泄露。 用戶網(wǎng)上行為泄露。比如搜索了一所醫(yī)院,很快就會有人打電話進(jìn)行推廣(非效果廣告)。 隱私泄露的風(fēng)險比較隱蔽,用戶基本感知不到。但另外一類劫持的影響就非常明顯非常直接了——頁面劫持,也就是直接篡改用戶的瀏覽頁面。有很多頁面劫持很簡單粗暴,直接插入第三方廣告或者運(yùn)營商的流量提示信息。 但也有一些劫持做得比較隱蔽,比如下面的京東頁面劫持:其中上圖是使用 HTTP 方面的頁面,頂部箭頭所示的地方出現(xiàn)了一個購物推薦,很逼真,就像京東或者瀏覽器官方的工具。 但換成 HTTPS 訪問,就沒有這個工具頁面,顯然是被劫持了。 那劫持到底是如何產(chǎn)生的呢?從技術(shù)上來講比較簡單,在內(nèi)容經(jīng)過的地方進(jìn)行監(jiān)聽篡改就行了。但要想把整個劫持的產(chǎn)業(yè)鏈條摸清楚,需要深入黑產(chǎn)內(nèi)部,比較困難。有一點可以肯定的是,劫持大部分都是在中間的網(wǎng)絡(luò)節(jié)點發(fā)生的,又叫「中間人」(MITM, man in the middle)。如下圖所示: 由于信息傳輸都需要經(jīng)過上述的「中間人節(jié)點」,它們又擁有信息的讀寫權(quán)限,如果信息沒有加密,也沒有校驗,那么想要查看隱私,篡改頁面,對于「中間人」來說可謂是輕而易舉。 那劫持又有哪些主要的分類呢?根據(jù)劫持路徑劃分的話,主要是下圖所示的三類: DNS 劫持,客戶端劫持和鏈路劫持。 根據(jù)我們的不完全統(tǒng)計,業(yè)務(wù)遇到的絕大部分劫持 (90%)都屬于鏈路劫持。 HTTPS 為什么能很好的解決鏈路劫持呢?主要是三大武器: 每次建立一個全新的 HTTPS 連接時,都需要對身份進(jìn)行認(rèn)證,確保用戶訪問的是正確的目的網(wǎng)站。 內(nèi)容加密意味端對端的通信內(nèi)容全都是密文,中間人無法直接查看到明文,HTTPS 所有的應(yīng)用層內(nèi)容都是通過對稱加密來實現(xiàn)加密和解密的。 通過對數(shù)據(jù)和共享密鑰的 MAC 碼來防止中間者篡改消息內(nèi)容,確保數(shù)據(jù)的一致性。 事實上 HTTPS 1995 年就誕生了,是一個非常古老、成熟的協(xié)議。同時又能很好地防止內(nèi)容劫持,保護(hù)用戶隱私。但是為什么一直到今天,還有大部分的網(wǎng)站不支持 HTTPS,只使用 HTTP 呢? 影響 HTTPS 普及的主要原因可以概括為兩個字:「慢」和「貴」。 在未經(jīng)任何優(yōu)化的情況下,HTTPS 會嚴(yán)重降低用戶的訪問速度。主要因素包括: 網(wǎng)絡(luò)耗時。由于協(xié)議的規(guī)定,必須要進(jìn)行的網(wǎng)絡(luò)傳輸。比如 SSL 完全握手,302 跳轉(zhuǎn)等。最壞情況下可能要增加 7 個 RTT。 計算耗時。無論是客戶端還是服務(wù)端,都需要進(jìn)行對稱加解密,協(xié)議解析,私鑰計算,證書校驗等計算,增加大量的計算時間。 HTTPS 的貴,主要體現(xiàn)在如下三方面: 服務(wù)器成本。HTTPS 的私鑰計算會導(dǎo)致服務(wù)端性能的急劇下降,甚至不到 HTTP 協(xié)議的十分之一,也就是說,如果 HTTP 的性能是 10000cps,HTTPS 的性能可能只有幾百 cps,會增加數(shù)倍甚至數(shù)十倍的服務(wù)器成本。 證書成本。根據(jù)證書個數(shù)及證書類型,一年可能需要花費幾百到幾百萬不等的證書成本。 開發(fā)和運(yùn)維成本。HTTPS 協(xié)議比較復(fù)雜,openssl 的開源實現(xiàn)也經(jīng)常發(fā)生安全BUG, 包括協(xié)議的配置,證書的更新,過期監(jiān)控,客戶端的兼容等一系列問題都需要具備專業(yè)背景的技術(shù)人員跟進(jìn)處理。 騰訊云負(fù)載均衡器深針對 HTTPS 推廣應(yīng)用過程中的痛點進(jìn)行了深度優(yōu)化。接下來我們詳細(xì)地介紹下這些優(yōu)化方案: 前文提到 HTTPS 非常慢,我們也主要從兩個層面對訪問速度進(jìn)行了優(yōu)化:協(xié)議棧和前后端資源。 HTTPS 可以認(rèn)為是 HTTP over SSL,而 HTTPS 又是使用 TCP 協(xié)議進(jìn)行傳輸,所以整個協(xié)議棧的優(yōu)化涉及到三個層面: TCP 優(yōu)化。包括擁塞窗口的調(diào)整,tcp fast open,reuseport 的支持,最新的 BBR 擁塞控制算法的支持等。 SSL 協(xié)議優(yōu)化。分布式 session cache, session ticket,F(xiàn)alse start, ocsp stapling file, 動態(tài) record size 等。 SSL 協(xié)議優(yōu)化最重要的目標(biāo)還是提升簡化握手的比例。騰訊云通過實現(xiàn)全局 session cache 和全局 session ticket 來提升 SSL 的簡化握手比例,節(jié)省用戶訪問時間和計算資源。 應(yīng)用層協(xié)議優(yōu)化。同時支持 SPDY,HTTP2,HSTS 等。 HTTP2 相比 HTTP1.X 最大的優(yōu)勢就是多路復(fù)用,能夠?qū)⒍鄠€ HTTP 請求通過一個 TCP 連接并行發(fā)送,相比 HTTP1.X 的串行發(fā)送,性能無疑是提升很多。 由于 HTTP2 是從 SPDY 繼承發(fā)展出來的,所以部分較老的客戶端只支持 SPDY,不支持 HTTP2。而大部分新客戶端,只支持 HTTP2,不支持 SPDY。為了同時兼容新老客戶端的性能,騰訊云同時支持 SPDY 和 HTTP2,最大化提升新老版本客戶端的性能。 HTTP2 及 SPDY 最大的特性和優(yōu)勢就是多路復(fù)用,能夠?qū)⒍鄠€請求通過一個連接并行發(fā)送出來。這個特性雖然很強(qiáng)大,但是如果還使用傳統(tǒng)的 HTTP 優(yōu)化策略,多路復(fù)用的效果會很有限。比如域名分片,pipline 等都會影響多路復(fù)用的效果。于是我們又通過多次的數(shù)據(jù)實驗,調(diào)整了一些前端資源包括后端接入的策略: 域名收歸。通過頁面資源及性能分析,確實域名收歸方案,比如移動頁面不超過 3 個。 預(yù)建連接。STGW 提供預(yù)連接頁面,通過對熱點頁面的用戶行為進(jìn)行分析,提前建立連接,減少協(xié)議開銷對用戶體驗的影響。 通過騰訊云遍布全球的 CDN 及 IDC 節(jié)點就近完成 HTTPS 卸載。 針對 HTTPS 的計算性能,騰訊云主要從三個層面進(jìn)行了優(yōu)化,包括: 盡量減少完全握手的發(fā)生,提升簡化握手比例。比如前文提到的全局 sessioncache 和 session ticket。 對于不可避免的完全握手,騰訊云實現(xiàn)了 RSA 異步代理計算,通過對協(xié)議棧的改造和 SSL 硬件加速卡的使用,大幅度提升了 HTTPS 的計算能力和防攻擊能力。 對稱加密計算過程也進(jìn)行了場景使用上的優(yōu)化。 下面再詳細(xì)介紹一下: 騰訊云針對 HTTPS 性能消耗最嚴(yán)重的環(huán)節(jié)——非對稱密鑰交換算法進(jìn)行了重點優(yōu)化。優(yōu)化思路主要包括如下三部分: 算法分離。就是將最消耗 CPU 資源的算法剝離出來,不讓消耗本地的 CPU 資源。 代理計算。使用空閑的 CPU 機(jī)器或者專門的 SSL 硬件加速卡來完成 RSA 計算。 異步執(zhí)行。傳統(tǒng)的 openssl 在進(jìn)行 RSA 的時候,上層應(yīng)用,比如 NGINX 都需要同步等待。這一步驟也非常影響,必須要進(jìn)行異步改造,這樣在加速集群進(jìn)行 RSA 計算的時候,接入服務(wù)器也可以接入其他用戶的請求,提升吞吐能力。 通過對 openssl 握手協(xié)議棧的深度改造以及 SSL 硬件加速卡的 RSA 計算性能,騰訊云 CLB 的 SSL 計算能力提升了 350%。單機(jī) ECDHE_RSA 處理性能達(dá)到了 65000 cps。 騰訊云根據(jù)應(yīng)用場景匹配最優(yōu)的對稱加密算法: 對于視頻等流媒體內(nèi)容,優(yōu)先使用 aes-gcm。 針對不支持 aes-ni 硬件加速指令的移動終端,使用 chacha20-poly1305 。 針對 IE6 等古董級別的客戶端,使用 RC4 算法。 騰訊云 CLB 支持現(xiàn)在主流的全部 HTTP 類協(xié)議接入和卸載。包括: http1.0/http1.1 http2 及前身 spdy3.1 https,包括 ssl3.0, tlsv1.0,tlsv1.1,tlsv1.2 websocket 及 secure websocket。 tcp,udp 透明轉(zhuǎn)發(fā)。 CLB 能夠?qū)⑸鲜銎邔訁f(xié)議統(tǒng)一轉(zhuǎn)換成 HTTP1.1,透傳給業(yè)務(wù)。對業(yè)務(wù)的好處也非常明顯: 0 開發(fā)成本就能使用 HTTPS 和 HTTP2,極大減少了適配各種協(xié)議和客戶端的壓力。 安全涉及的領(lǐng)域和場景非常龐大,HTTPS 雖然能夠徹底解決鏈路劫持,但是對于如下兩類問題卻無能為力: CC 攻擊,特別是 HTTPS 計算型攻擊,HTTPS 的性能會急劇降低,引入更大的安全風(fēng)險。 業(yè)務(wù)安全,包括 SQL 注入,XSS 跨站、網(wǎng)站掛馬等。 上述兩類都是經(jīng)常困擾業(yè)務(wù)的風(fēng)險極大的安全問題。 針對上述問題,騰訊云也設(shè)計實現(xiàn)了一套針對 HTTPS 的防 CC 和 WAF 的安全系統(tǒng),能夠有效地防御這類安全風(fēng)險。 對證書稍微熟悉的朋友都知道,SSL 密鑰和證書都是成對使用的,一個證書一定唯一對應(yīng)一個私鑰。整個 HTTPS 最重要的一個數(shù)據(jù)就是 SSL 的私鑰了,如果私鑰泄露,整個握手過程就可以被劫持,簽名可以被偽造,對稱密鑰也可以被破解。整個 HTTPS 就毫無安全可言。 傳統(tǒng)的私鑰方案就是將私鑰和應(yīng)用程序綁定在一起。比如大家熟知的 nginx, apache,如果想使用 HTTPS,必須在部署 nginx 的接入機(jī)器上部署相關(guān)的證書和私鑰。 這種方案會有如下安全上的問題:私鑰部署在云端或者 CDN,如果泄露了怎么辦? 雖然騰訊云的內(nèi)網(wǎng)非常安全,但是出于對客戶的安全負(fù)責(zé),徹底打消用戶對私鑰泄露的顧 慮,確保用戶對私鑰的絕對控制,騰訊云提供一種無私鑰的加載方案。這個方案核心是「不需要把私鑰存儲在騰訊云,允許用戶使用自己的服務(wù)器保管私鑰,完成 HTTPS 的接入」。 騰訊云完全接觸不到私鑰,客戶甚至可以把私鑰保存在自己家里的服務(wù)器上。 它的接入過程如下: 用戶發(fā)起 HTTPS 握手請求。 在涉及到私鑰計算的時候,騰訊云 CLB 會將這個私鑰計算請求通過加密的自定義協(xié)議,轉(zhuǎn)發(fā)給用戶自己的 keyless 服務(wù)器上。 keyless 服務(wù)調(diào)用用戶的私鑰完成計算。 keyless 服務(wù)將計算結(jié)果返回給騰訊云 CLB。 CLB 繼續(xù)進(jìn)行 HTTPS 請求的處理。 整個過程,騰訊云接觸不到 HTTPS 私鑰,需要注意一點的,keyless server 是騰訊云提供一個服務(wù)端程序,代碼開源,用戶自主部署,服務(wù)端行為用戶掌握得一清二楚。 騰訊云 CLB 負(fù)載均衡器通過對協(xié)議棧及服務(wù)端的深度優(yōu)化,實現(xiàn)了 HTTPS 性能的巨大提升。同時,我們也通過與國際上著名的證書機(jī)構(gòu)合作,極大降低了證書的成本。騰訊云 CLB 在如下幾個方面,能夠為微信小程序接入帶來非常顯著的收益: 提供一鍵式的 SSL 證書申請,CLB 負(fù)載均衡服務(wù)作為 HTTPS 代理,減輕開發(fā)負(fù)擔(dān),讓開發(fā)者可以專注小程序業(yè)務(wù)的開發(fā)。 使用 HTTPS 并不會降低 client 端的訪問速度。HTTP、HTTPS 訪問時延幾乎一致。 集群內(nèi)單臺服務(wù)器 SSL 加解密性能,高達(dá) 6.5Wcps 的完全握手。相比高性能CPU 提升了至少 3.5 倍,節(jié)省了服務(wù)端成本,極大提升了業(yè)務(wù)運(yùn)營及流量突漲時的服務(wù)能力, 增強(qiáng)了計算型防攻擊的能力。 支持多種協(xié)議卸載及轉(zhuǎn)換。減少業(yè)務(wù)適配客戶端各種協(xié)議的壓力,業(yè)務(wù)后端只需要支持 HTTP1.1 就能使用 HTTP2,SPDY,SSL3.0,TLS1.2 等各版本協(xié)議。滿足微信小程序,iOS 平臺等對協(xié)議的要求。 SSL 證書申請、監(jiān)控、替換。我們和國際頂級的證書廠商 comodo,symantec 已有深入合作,服務(wù)體系完善。 防 CC 及 WAF 功能。能夠有效杜絕慢連接、高頻定點攻擊、SQL 注入、網(wǎng)頁掛馬等應(yīng)用層攻擊。 以上的這些收益,可以幫助開發(fā)者降低 HTTPS 的試用門檻。
2、頁面劫持3、劫持路徑及分類
2、內(nèi)容加密—防竊聽
3、一致性校驗—防篡改
四、HTTPS 普及之痛
2、貴
五、騰訊云負(fù)載均衡器 HTTPS 的性能優(yōu)化
2、計算性能優(yōu)化3、協(xié)議的并行卸載
4、安全
Keyless(無密鑰加載)私鑰的重要性
六、零門檻,HTTPS 快速接入微信小程序
愛盈利(aiyingli.com)移動互聯(lián)網(wǎng)最具影響力的盈利指導(dǎo)網(wǎng)站。定位于服務(wù)移動互聯(lián)網(wǎng)創(chuàng)業(yè)者,移動盈利指導(dǎo)。我們的目標(biāo)是讓盈利目標(biāo)清晰可見!降低門檻,讓缺乏經(jīng)驗、資金有限的個人和團(tuán)隊獲得經(jīng)驗和機(jī)會,提高熱情,激發(fā)產(chǎn)品。
【轉(zhuǎn)載說明】  若上述素材出現(xiàn)侵權(quán),請及時聯(lián)系我們刪除及進(jìn)行處理:[email protected]