如何实现HTTPS在移动端的性能优化

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

主题 Https OpenSSL 性能优化

HTTPS网站的普及使大家更加关注HTTPS性能优化,一般做HTTPS优化可能只是针对PC端,但在移动端的效果并不理想。去年Google就已经在移动端做了HTTPS的性能加速,为Android平台的Chrome浏览器上增加一个新的TLS加密套件:ChaCha20-Poly1305,是专门为移动设备推出的加密套件,为了能提供更好的安全和性能。

为了能够更好的了解ChaCha20-Poly1305,先简单介绍对称加密和AES-NI。

对称加密与AES-NI

对称加密

在HTTPS握手过程,通过非对称加密协商出对称加密密钥,然后使用对称加密对双方通信的数据内容进行加密。非对称加密是服务器性能的开销是巨大的,通过Session Resume等方法可以进行加速。常见的非对称加密算法有RSA、ECDHE等。

在协商出对称加密密钥后,HTTPS中所有数据内容通信的加密都使用对称加密进行。对称加密分为流式加密和分组加密。

常见的流式加密算法有:RC4,ChaCha20-Poly1305。

常见的分组加密算法有:AES-CBC,AES-GCM。

RC4由于存在严重安全漏洞,已经基本不再使用;AES-CBC容易遭受BEAST和LUCKY13攻击,使用也逐渐减少,AES-GCM是它们的安全替代,AES-GCM也是目前最为流行的对称加密算法。

安全风险可参看ssllabs上的相关文章:https://community.qualys.com/blogs/securitylabs/2013/03/19/rc4-in-tls-is-broken-now-what

AES-NI

AES-GCM解决了对称加密存在的安全问题,但带来了性能问题。为此,出现了AES-NI(Advanced Encryption Standard New Instruction)。AES-NI是Intel和AMD微处理器上x86架构的一个扩展,可以从硬件上加速AES的性能,目前在服务器和PC端,CPU对AES-NI的支持率已经非常普及。

测试结果:服务器开启AES-NI后,性能提高了5-8倍左右,这与Intel官方公布的数据基本是一致的。

测试方法:

可以使用OpenSSL测试也可以使用其他SSL库测试,因为所有SSL库都支持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

关于AES-NI的指令集,推荐查看Shay Gueron编写的《Intel 高级加密标准 (AES) 指令集 (2010)》。https://software.intel.com/en-us/articles/intel-advanced-encryption-standard-aes-instructions-set

ChaCha20-Poly1305优势何在?

Google推出新的加密套件并在所有移动端的Chrome浏览器上优先使用原因:

ChaCha20-Poly1305避开了现有发现的所有安全漏洞和攻击;

ChaCha20-Poly1305针对移动端设备大量使用的ARM芯片做了优化,能够充分利用ARM向量指令,在移动设备上加解密速度更快、更省电;

更加节省带宽,Poly1305的输出是16字节,而HMAC-SHA1是20字节,可以节省16%的overhead消耗。

通过实际的测试数据来看看ChaCha20-Poly1305在移动端使用的优势。

测试一:

在支持AES-NI扩展的设备上,AES加密的性能优势是明显的。 目前最为常用的对称加密AES-128-GCM的性能是ChaCha20-Poly1305的近5倍。

由于原生的OpenSSL目前还不支持ChaCha20-Poly1305,通过编译LibreSSL源码(最新源码下载地址:http://ftp.openbsd.org/pub/OpenBSD/LibreSSL)来进行测试。

测试方法:

进入到编译后的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扩展的移动设备上,ChaCha20-Poly1305的性能是AES-GCM的三倍左右。

对称加密最合理的使用方法是:在支持AES-NI的设备上,优先使用AES-128-GCM加密套件;在不支持AES-NI的移动设备上,特别是ARM架构的设备上,优先使用ChaCha20-Poly1305加密套件。

Nginx实现ChaCha20-Poly1305的三种方法

OpenSSL官方版本目前不支持ChaCha20-Poly1305,所以不能使用原生的OpenSSL版本。关注OpenSSL官方的动态(https://www.openssl.org/news/changelog.html )。

在Nginx上实现ChaCha20-Poly1305主流的方法有三种:

使用OpenBSD从OpenSSL fork的分支LibreSSL;

使用Google从OpenSSL fork的分支BoringSSL;

使用CloudFlare提供的OpenSSL Patch。

主流的三种方法,都已经在服务器上部署成功并经过流量测试,各有优缺点。具体的部署方法、Nginx配置、部署过程可能会遇到的错误及解决方法,涉及的内容太多,相关内容如下:

Nginx编译安装BoringSSL

Nginx编译安装LibreSSL

Nginx编译安装CloudFlare提供的OpenSSL Patch

下面是我总结的这三种方法的优缺点,这个欢迎大家补充。

LibreSSL

编译安装方法最为简单;

OpenBSD小组对OpenSSL的代码进行了全面清理并重构,更为轻量;

已经发布稳定版本,相比于OpenSSL团队,问题修复更及时。

BoringSSL

支持等价加密算法组功能(Equal preference cipher groups),这功能我认为很有意思,在后面博客中再介绍;

与Nginx编译友好性不足,编译容易出错,至少需要修改两处源码;

不支持OCSP Stapling功能。这一点是比较有意思的,Google工程师在博客上说OCSP Stapling存在缺陷,目前不支持,但不排除后面支持的可能性。联想到Chrome浏览器默认也不使用OCSP,可见Google对OCSP的情感是复杂的。https://www.imperialviolet.org/2014/04/19/revchecking.html

OpenSSL Patch

编译安装过程较为复杂;

OpenSSL本身较重,存在的安全问题也多,需要频繁升级版本;

稳定性需要进一步验证。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容