打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
流量安全之HTTPS协议浅析

来自:百度质量部(百度测试_QA)

作者:阮星华

链接:http://qa.baidu.com/blog/?p=1282


1、HTTPS 协议简介


Https 协议是由SSL HTTP 协议构建的可进行加密传输、身份认证的网络协议,相比


Http 更加安全。相比Http 有如下特点:


(1)Https 需要到CA 申请证书,一般是收费的;

(2)Http 是超文本传输协议,信息是明文传输,Https 则是具有安全性的SSL 加密传
输协议;

(3)Http 一般使用的端口是80 端口,Https 一般使用443 端口。


Https 的核心作用:


(1)数据保密性:保证内容在传输过程不会被第三方看到;

(2)数据完整性:保证内容在传输过程中不会被篡改;

(3)身份校验:保证数据到达用户期望的目的地;


2、HTTPS 协议流程


与 HTTP 相比,HTTPS 增加了SSL(Secure Sockets Layer)安全套接层,如图1 所示。



图1、安全套接层


在真正的数据交互之前通过 SSL Handshake(SSL 握手)协商一个对称秘钥,通过这个


对称秘钥对以后的通信内容进行加密。如图2 所示,HTTPS 的通信过程如下:


(1)、客户端发起HTTPS 请求
(2)、服务端证书配置
(3)、传送证书
(4)、客户端解析证书
(5)、传送加密信息
(6)、服务端解密信息
(7)、传输加密后的信息
(8)、客户端解密信息



如图 2、HTTPS 通信过程


3、SSL 证书及其验证过程


3.1 数字证书


数字证书在 SSL 握手过程中扮演身份认证和密钥分发的功能,究竟什么是数字证书呢?


简单来说数字证书就是一种网络上证明持有者身份的文件,同时证书中还含有公钥。证书是由国际上公认的证书机构颁发,一些验证证书的客户端应用程序比如浏览器对于这些机构颁发的证书完全信任。通常windows 部署系统的时候会让客户端安装“根受信任机构列表”,当客户端收到一个证书时会查看证书是否是该列表中的机构颁发的,如果是则信任这个证书。


如图3 就是一个受信任的证书样式,而图4 是一个不受信任的非法证书。



图 3、合法受信任的证书



图4、非法不受信任的证书

在服务器证书不在受信任的范围内的时候,浏览器会给出安全提示:



图 5、浏览器报警



图6、浏览器报警

3.2 数字证书的验证


由此可以看出 https 的站点需要一份数字证书,证书需要一个机构颁发,这个机构可以使一个国际上公认的证书机构,也可以是任何一台安装有证书服务的计算机。客户端是否信任这个证书取决于客户端上是否安装了这个证书颁发者的根证书。证书的颁发和验证过程如

图7 所示。


图 7、证书颁发和验证过程


以 IE 浏览器为例,会从如下三个方面验证证书的有效性,不满足情况下会报警提示:


(1) 证书颁发者是否在“根受信任的证书颁发机构列表”中;

(2) 证书是否过期;

(3) 证书的持有者是否和访问的网站一致;


实际上除此之外浏览器还会定期证书颁发者的“证书吊销列表”,如果某个证书虽然符合上述条件,但是被它的颁发者在“证书吊销列表”中列出,那么也将给出警告。每个证书的CRLDistribution Point 字段显示了查看这个列表的url。尽管如此,windows 对于这个列表是“不
敏感”的,也就是说windows 的api 会缓存这个列表,直到设置的缓存过期才会再从CRLDistribution Point 中下载新的列表。可以通过在证书颁发服务端尽量小的设置这个有效期(最小1 天),来尽量使windows 的客户端“敏感”。


4、HTTPS 性能消耗及其优化


4.1 HTTPS 性能消耗



图 8、HTTPS 通信过程


如图 8 所示,Https 与Http 的通信过程相比存在如下几点差异:


( 1 ) 302 重定向: 302 跳转不是每次都需要的, 当用户在地址栏直接输入https://www.baidu.com(当然可以是其他https 站点,只要带上前缀https://)进行访问的时候就不会有这个重定向过程;


(2)SSL 握手(SSL handshake)过程增加的网络传输RTT,及数字签名的校验过程,特别是一些移动终端的计算性能本身不是很强,耗时就更加明显;


(3)证书验证和状态检验,检查证书是否过期等。浏览器一般会通过ocsp 来检查证书的撤销状态,在拿到服务器发送过来的证书之后会请求ocsp 站点获取证书的状态,如果ocsp站点位于国外或者出现故障的话会影响这个正常用户的访问速度。好在ocsp 检查周期一般比较长(7 天),不是很频繁。并且有些浏览器直接关闭了ocsp 功能。


4.2 HTTPS 性能优化


既然 HTTPS 相比HTTP 存在很多耗时的地方,实际测试表明没有经过任何优化的情况下,HTTPS 要比HTTP 耗时多达200ms 以上,因此针对HTTPS 的性能优化非常必要。手段都有哪些呢,下面我们来一一分析:


1、首先是减少302 跳转,通过服务器配置HSTS(HTTP Strict Transport Security,HTTP 严格传输协议,RFC 6797)。他的作用是强制客户端(如浏览器)使用HTTPS 与服务器之间连接。同时HSTS 还能够抵御SSL 剥离攻击,SSL 剥离攻击属于中间人劫持的一种,是由Moxie Marlinspike 于2009 年发明的一种攻击方式,它的前提是用户很少直接在地址栏中输入https://,更多是通过点击连接、3xx 重定向从HTTP 页面进入HTTPS。攻击者在中间将所有的https://替换成http://以达到阻止HTTPS 的目的。


HSTS 的实现方式是当客户端通过https 发出请求时,在服务器返回的超文本传输协议响应头中包含Strict-Transport-Security 字段。非加密传输时设置的HSTS 字段无效,比如https://www.baidu.com/ 的响应头含有Strict-Transport-Security: max-age=31536000;includeSubDomains,表示在接下来的一年时间里,浏览器只要向www.baidu.com 发送请求必须采用HTTPS 方式发送。用户在地址栏中输入http://www.baidu.com,浏览器会自动将http:替换成https://。


2、设置ocsp stapling file,使得ocsp 的请求不再发往ca 提供的ocsp 站点,改为发往网站的webserver。


3、启用SPDY,SPDY(读作“SPeeDY”)是Google 开发的基于TCP 的应用层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验。SPDY 并不是一种用于替代HTTP 的协议,而是对HTTP 协议的增强。包括数据流的多路复用、请求优先级以及HTTP


报头压缩。协议层次如图9 所示:



图 9、SPDY 协议位置


SPDY 协议比较复杂,这里就不再详细展开。使用SPDY 不仅能够提高HTTPS 的访问速度,甚至比HTTP 还要快。谷歌表示,引入SPDY 协议后,在实验室测试中页面加载速度比原先快64%。SPDY 的缺点是支持的浏览器不够多,Google 也表示2016 年将从Chrome中去除SPDY,改用HTTP/2(IETF 努力打造的全新协议,前身就是大名鼎鼎的HTTP,采用了SPDY 很多的特点)。


4、有限ECDHE 密钥交换算法,支持PFS(完全正向保密Perfect forward secrecy),能够实现false start;


5、启用TFO(TCP Fast Open),TFO 能够优化TCP 链接的RTT 次数从而提高效率,不仅能够优化HTTPS,同时也能够优化HTTP,但是支持TFO 的客户端不多;


6、设置ssl session 的共享内存cache. 以nginx 为例,它目前只支持session cache的单机多进程共享。


7、配置相同的session ticket key,部署在多个服务器上,这样多个不同的服务器也能产生相同的 session ticket。session ticket 的缺点是支持率不广,大概只有40%。而session id 是client hello 的标准内容,从SSL2.0 开始就被全部客户支持。


8、设置tls record size,最好是能动态调整record size,即连接刚建立时record size设置成msg,连接稳定之后可以将record size 动态增加。


5、 HTTPS 的安全分析


从上面对 HTTPS 通信过程的分析,大家可以看出HTTPS 通过客户端和服务器之间协商出来的对称密钥对数据进行加密来实现隐私保护。有两个地方比较重要:


(1)加密算法以及对称密钥的安全性,如AES、RC4 和DES 等,本文我们不详细展开分析对称加密的安全性;


(2)密钥交换的过程,也就是如何通过非对称加密的方式协商出一个对称密钥,如RSA、DHE、ECDHE,本文我们以简单的RSA 为例来介绍非对称加密的过程,帮助大家理解这个过程,而不去介绍ECDHE 等基于椭圆曲线的更复杂的算法。


5.1 非对称加密及密钥交换


在 1976 年以前,所有加密都是对称加密方式,这种加密方式最大的问题是保存和传递密钥的过程非常不安全。1976 年两位计算机学家Whitfield Diffie 和 Martin Hellman,提出了一种崭新构思,可以在不直接传递密钥的情况下,完成解密。这被称为“Diffie-Hellman密钥交换算法”。1977 年,三位数学家Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。这种算法用他们三个人的名字命名,叫做RSA 算法。从那时直到现在,RSA 算法一直是最广为使用的”非对称加密算法”。毫不夸张地说,只要有计算机网络的地方,就有RSA 算法。这种算法非常可靠,密钥越长越安全。到目前为止被公开破解的密钥长度
是768 位,可以认为1024 位的RSA 密钥基本安全,2048 位的RSA 密钥非常安全。


RSA 的安全基于大数分解的难度。其公钥和私钥是一对大素数(100 到200 位十进制数或更大)的函数。从一个公钥和密文恢复出明文的难度,等价于分解两个大素数之积。


公钥 Ku:(e,n)


(1) n 是两个素数p 和q 的乘积(其中p 和q 保密)
(2) e 是与(p-1)(q-1)互质的数


私钥 Kr:(d,n)
(1) n 同上
(2) d 是e?1(mod( p ?1)(q ?1))


加密过程:C ? Me (mod n),其中 M 是被加密内容,C 是产生的密文;


解密过程:M ? Cd (mod n)


【Example】下面我们演示一个例子:

令 p=5,q=11,得出n ? p?q ? 5?11? 55, f (n) ? ( p ?1)?(q ?1) ? 4?10 ? 40。取 e=7

(7 与40 互质),下面要计算得到 d满足e?d ?1mod f (n),也就是7?d ?1mod 40。写

个程序计算一下可以取到d=23,于是我们得到了公钥(7,55)和私钥(23,55)。

假设现在的明文是(5,8,16),然后计算密文如下:

7

7

7

1 ( 1) (mod ) 5 (mod55) 25

2 ( 2) (mod ) 8 (mod55) 2

3 ( 3) (mod ) 16 (mod55) 36

e

e

e

C M n

C M n

C M n

得到密文:25,2,36

最后我们进行解密如下:

d 23

d 23

d 23

M1 (C1) (mod ) 25 (mod 55) 5

M2 (C2) (mod ) 2 (mod 55) 8

M3 (C3) (mod ) 36 (mod55) 16

5,8,16

n

n

n

明文:


从上面例子中我们可以看出,明文(5,8,16)通过公钥加密得到密文,最后通过私钥进行解密。当然也可以通过私钥进行加密,然后通过公钥进行解密,在对称密钥协商的过程中就是这样用的。上面的例子选取的素数都比较小,实际运用要比这复杂得多,由于RSA 算法的公钥私钥的长度要到1024 位甚至2048 位才能保证安全,因此,p、q、e 的选取、公钥私钥的生成,加密解密模指数运算都有一定的计算程序,需要仰仗计算机完成。


5.2 HTTPS 依然面临的安全问题


虽然HTTPS 通过SSL 确实能够为保护用户隐私,防止流量劫持起到很大作用,但是依然存在许多威胁,比如服务器私钥的泄露、协商过程产生出的对称泄露、对称加密算法被破解以及中间人攻击等等。下面我们主要针对中间人攻击举几个例子来说明:


【SSLSniff 攻击】:



图 10、SSLSniff 攻击


SSLSniff 属于中间人攻击(Man-in-the-MiddleAttack,MITM 攻击)的一种,过程如下:


1、攻击者介于用户和服务器之间,伪造证书,当用户发送https 请求是攻击者劫持这个请求,并返回自己的证书(非法证书),同时它会继续请求服务器;


2、由于证书不合法,通常浏览器上会有警示,如果用户稍加注意能够避免这种攻击;


3、攻击者和服务器之间是一个合法的https 连接,服务器无法区分用户和攻击者,攻击者能够取到服务器结果并进行篡改,然后以他和用户之间协商出来的密钥进行通信。


【SSLStrip 攻击】:



图 11、SSLStrip 攻击


SSLStrip 攻击的本质是利用一般用户在浏览器地址栏中输入地址时一般不会带https://的特点,将用户劫持并对于后续服务器返回结果中所有带有https://的地方都替换成http://使得用户和服务器之间不会建立https 连接来达到劫持攻击的目的。过程如下:


1、一般用户在浏览器地址栏输入时不会选择https,SSLStrip 利用这个特点进行攻击


2、正常情况下对于HTTPS 服务器,当遇到http 请求时会做一个重定向到https


3、攻击者和用户之间始终保持http 链接,而与服务器之间保持https 连接。


【降级攻击】:



图12、SSL 降级攻击


SSL 3.0 是一个比较老的协议,大多数浏览器为了兼容性都会支持这个协议,但是SSL3.0 存在一些安全漏洞。攻击者就是利用这个特性,首先让用户使用的协议降级到SSL 3.0然后利用SSL 3.0 的漏洞进行攻击。


过程如图 12 所示:


1、一般情况下用户发起请求会采用更加安全的TLS 1.2/1.1/1.0 协议,TLS(TransportLayer Security,传输层安全协议)是IETF(Internet Engineering Task Force,Internet 工程任务组)制定的一种新的协议,它建立在SSL 3.0 协议规范之上,是SSL 3.0 的后续版本。在TLS 与SSL3.0 之间存在着显著的差别,主要是它们所支持的加密算法不同,所以TLS 与SSL3.0 不能互操作;


2、中间人(攻击者)驳回这个请求,告诉用户浏览器说不支持这几个协议,建议其采用SSL 3.0;


3、用户客户端降级采用SSL 3.0,中间人就利用SSL 3.0 进行攻击;


4、攻击者和服务器之间依然使用https 建立正常的链接,服务器无法区分攻击者和用户。


4、参考链接


(1) HSTS(RFC 6797):http://tools.ietf.org/html/rfc6797


(2) TFO 论文:http://conferences.sigcomm.org/co-next/2011/papers/1569470463.pdf


(3) 完全前向安全Perfect Forward Secrecy:http://de.wikipedia.org/wiki/Perfect_Forward_Secrecy


(4) SSL: https://www.digicert.com/ssl.htm


(5) SPDY 协议简介及如何编译含有SPDY 的nginx:http://network.51cto.com/art/201401/426957.htm

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
一篇文章看明白 HTTP,HTTPS,SSL/TSL 之间的关系
HTTPS vs HTTP 1.1 vs HTTP 2 | Aoho''s Blog
SSL协议详解-2
HTTPS到底是个啥玩意儿?
详解http和https的区别
SSL/TLS/WTLS原理_free life
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服