如何實(shí)現(xiàn)HTTPS在移動端的性能優(yōu)化

原文? https://blog.wilddog.com/?p=749

主題 Https OpenSSL 性能優(yōu)化

HTTPS網(wǎng)站的普及使大家更加關(guān)注HTTPS性能優(yōu)化耐床,一般做HTTPS優(yōu)化可能只是針對PC端牲平,但在移動端的效果并不理想赠橙。去年Google就已經(jīng)在移動端做了HTTPS的性能加速,為Android平臺的Chrome瀏覽器上增加一個新的TLS加密套件:ChaCha20-Poly1305,是專門為移動設(shè)備推出的加密套件,為了能提供更好的安全和性能。

為了能夠更好的了解ChaCha20-Poly1305搏恤,先簡單介紹對稱加密和AES-NI。

對稱加密與AES-NI

對稱加密

在HTTPS握手過程湃交,通過非對稱加密協(xié)商出對稱加密密鑰熟空,然后使用對稱加密對雙方通信的數(shù)據(jù)內(nèi)容進(jìn)行加密。非對稱加密是服務(wù)器性能的開銷是巨大的巡揍,通過Session Resume等方法可以進(jìn)行加速痛阻。常見的非對稱加密算法有RSA、ECDHE等腮敌。

在協(xié)商出對稱加密密鑰后阱当,HTTPS中所有數(shù)據(jù)內(nèi)容通信的加密都使用對稱加密進(jìn)行俏扩。對稱加密分為流式加密和分組加密。

常見的流式加密算法有:RC4弊添,ChaCha20-Poly1305录淡。

常見的分組加密算法有:AES-CBC,AES-GCM油坝。

RC4由于存在嚴(yán)重安全漏洞嫉戚,已經(jīng)基本不再使用;AES-CBC容易遭受BEAST和LUCKY13攻擊澈圈,使用也逐漸減少彬檀,AES-GCM是它們的安全替代,AES-GCM也是目前最為流行的對稱加密算法瞬女。

安全風(fēng)險可參看ssllabs上的相關(guān)文章:https://community.qualys.com/blogs/securitylabs/2013/03/19/rc4-in-tls-is-broken-now-what

AES-NI

AES-GCM解決了對稱加密存在的安全問題窍帝,但帶來了性能問題。為此诽偷,出現(xiàn)了AES-NI(Advanced Encryption Standard New Instruction)坤学。AES-NI是Intel和AMD微處理器上x86架構(gòu)的一個擴(kuò)展,可以從硬件上加速AES的性能报慕,目前在服務(wù)器和PC端深浮,CPU對AES-NI的支持率已經(jīng)非常普及。

測試結(jié)果:服務(wù)器開啟AES-NI后眠冈,性能提高了5-8倍左右飞苇,這與Intel官方公布的數(shù)據(jù)基本是一致的。

測試方法:

可以使用OpenSSL測試也可以使用其他SSL庫測試洋闽,因?yàn)樗蠸SL庫都支持AES-128-GCM玄柠。

OpenSSL AES-NI = OFF

# OPENSSL_ia32cap=”~0x200000200000000″ openssl speed -elapsed -evp aes-128-gcm

OpenSSL AES-NI = ON

# openssl speed -elapsed -evp aes-128-gcm

關(guān)于AES-NI的指令集,推薦查看Shay Gueron編寫的《Intel 高級加密標(biāo)準(zhǔn) (AES) 指令集 (2010)》诫舅。https://software.intel.com/en-us/articles/intel-advanced-encryption-standard-aes-instructions-set

ChaCha20-Poly1305優(yōu)勢何在?

Google推出新的加密套件并在所有移動端的Chrome瀏覽器上優(yōu)先使用原因:

ChaCha20-Poly1305避開了現(xiàn)有發(fā)現(xiàn)的所有安全漏洞和攻擊宫患;

ChaCha20-Poly1305針對移動端設(shè)備大量使用的ARM芯片做了優(yōu)化刊懈,能夠充分利用ARM向量指令,在移動設(shè)備上加解密速度更快娃闲、更省電虚汛;

更加節(jié)省帶寬,Poly1305的輸出是16字節(jié)皇帮,而HMAC-SHA1是20字節(jié)卷哩,可以節(jié)省16%的overhead消耗。

通過實(shí)際的測試數(shù)據(jù)來看看ChaCha20-Poly1305在移動端使用的優(yōu)勢属拾。

測試一:

在支持AES-NI擴(kuò)展的設(shè)備上将谊,AES加密的性能優(yōu)勢是明顯的冷溶。 目前最為常用的對稱加密AES-128-GCM的性能是ChaCha20-Poly1305的近5倍。

由于原生的OpenSSL目前還不支持ChaCha20-Poly1305尊浓,通過編譯LibreSSL源碼(最新源碼下載地址:http://ftp.openbsd.org/pub/OpenBSD/LibreSSL)來進(jìn)行測試逞频。

測試方法:

進(jìn)入到編譯后的LibreSSL目錄,通過下面的命令測試栋齿。

./apps/openssl/openssl speed -elapsed -evp chacha

./apps/openssl/openssl speed -elapsed -evp aes-128-gcm

./apps/openssl/openssl speed -elapsed -evp aes-256-gcm

./apps/openssl/openssl speed -elapsed -evp aes-128-cbc

./apps/openssl/openssl speed -elapsed -evp aes-256-cbc

測試二:

在不支持AES-NI擴(kuò)展的移動設(shè)備上苗胀,ChaCha20-Poly1305的性能是AES-GCM的三倍左右。

對稱加密最合理的使用方法是:在支持AES-NI的設(shè)備上瓦堵,優(yōu)先使用AES-128-GCM加密套件基协;在不支持AES-NI的移動設(shè)備上,特別是ARM架構(gòu)的設(shè)備上菇用,優(yōu)先使用ChaCha20-Poly1305加密套件堡掏。

Nginx實(shí)現(xiàn)ChaCha20-Poly1305的三種方法

OpenSSL官方版本目前不支持ChaCha20-Poly1305,所以不能使用原生的OpenSSL版本刨疼。關(guān)注OpenSSL官方的動態(tài)(https://www.openssl.org/news/changelog.html )泉唁。

在Nginx上實(shí)現(xiàn)ChaCha20-Poly1305主流的方法有三種:

使用OpenBSD從OpenSSL fork的分支LibreSSL;

使用Google從OpenSSL fork的分支BoringSSL揩慕;

使用CloudFlare提供的OpenSSL Patch亭畜。

主流的三種方法,都已經(jīng)在服務(wù)器上部署成功并經(jīng)過流量測試迎卤,各有優(yōu)缺點(diǎn)拴鸵。具體的部署方法、Nginx配置蜗搔、部署過程可能會遇到的錯誤及解決方法劲藐,涉及的內(nèi)容太多,相關(guān)內(nèi)容如下:

Nginx編譯安裝BoringSSL

Nginx編譯安裝LibreSSL

Nginx編譯安裝CloudFlare提供的OpenSSL Patch

下面是我總結(jié)的這三種方法的優(yōu)缺點(diǎn)樟凄,這個歡迎大家補(bǔ)充聘芜。

LibreSSL

編譯安裝方法最為簡單;

OpenBSD小組對OpenSSL的代碼進(jìn)行了全面清理并重構(gòu)缝龄,更為輕量汰现;

已經(jīng)發(fā)布穩(wěn)定版本,相比于OpenSSL團(tuán)隊(duì)叔壤,問題修復(fù)更及時瞎饲。

BoringSSL

支持等價加密算法組功能(Equal preference cipher groups),這功能我認(rèn)為很有意思炼绘,在后面博客中再介紹嗅战;

與Nginx編譯友好性不足,編譯容易出錯俺亮,至少需要修改兩處源碼驮捍;

不支持OCSP Stapling功能疟呐。這一點(diǎn)是比較有意思的,Google工程師在博客上說OCSP Stapling存在缺陷厌漂,目前不支持萨醒,但不排除后面支持的可能性。聯(lián)想到Chrome瀏覽器默認(rèn)也不使用OCSP苇倡,可見Google對OCSP的情感是復(fù)雜的富纸。https://www.imperialviolet.org/2014/04/19/revchecking.html

OpenSSL Patch

編譯安裝過程較為復(fù)雜;

OpenSSL本身較重旨椒,存在的安全問題也多晓褪,需要頻繁升級版本;

穩(wěn)定性需要進(jìn)一步驗(yàn)證综慎。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末涣仿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子示惊,更是在濱河造成了極大的恐慌好港,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件米罚,死亡現(xiàn)場離奇詭異钧汹,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)录择,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門拔莱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人隘竭,你說我怎么就攤上這事塘秦。” “怎么了动看?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵尊剔,是天一觀的道長。 經(jīng)常有香客問我弧圆,道長赋兵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任搔预,我火速辦了婚禮,結(jié)果婚禮上叶组,老公的妹妹穿的比我還像新娘拯田。我一直安慰自己,他們只是感情好甩十,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布船庇。 她就那樣靜靜地躺著吭产,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鸭轮。 梳的紋絲不亂的頭發(fā)上臣淤,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天,我揣著相機(jī)與錄音窃爷,去河邊找鬼邑蒋。 笑死,一個胖子當(dāng)著我的面吹牛按厘,可吹牛的內(nèi)容都是我干的医吊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼逮京,長吁一口氣:“原來是場噩夢啊……” “哼卿堂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起懒棉,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤草描,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后策严,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體穗慕,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年享钞,在試婚紗的時候發(fā)現(xiàn)自己被綠了揍诽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡栗竖,死狀恐怖暑脆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情狐肢,我是刑警寧澤添吗,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站份名,受9級特大地震影響碟联,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜僵腺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一鲤孵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧辰如,春花似錦普监、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽毙玻。三九已至,卻和暖如春廊散,著一層夾襖步出監(jiān)牢的瞬間桑滩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工允睹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留运准,地道東北人。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓擂找,卻偏偏與公主長得像戳吝,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子贯涎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容