文章来源
HTTPS
HTTP协议以明文方式发送内容,不提供任何方式的数据加密。HTTPS协议是以安全为目标的HTTP通道,简单来说,HTTPS是HTTP的安全版,即将HTTP用SSL/TLS协议进行封装,HTTPS的安全基础是SSL/TLS协议。HTTPS提供了身份验证与加密通讯方法,被广泛用于万维网上安全敏感的通讯,例如交易支付。
- 客户端发起HTTPS请求。
- 服务端提前准备好公钥和私钥。
- 服务端将相应的公钥传送给客户端。
- 客户端解析证书的正确性。
如果证书正确,则会生成一个随机数(密钥),并用公钥进行加密,传输给服务端。
如果证书不正确,则SSL握手失败,需要重新上传证书进行认证。 - 服务端用之前的私钥进行解密,得到随机数(密钥)。
- 服务端用随机数(密钥)对传输的数据进行加密。
- 客户端用随机数(密钥)对服务端的加密数据进行解密,拿到相应的数据。
HTTP/2
HTTP/2也被称为HTTP 2.0,相对于HTTP 1.1的新增多路复用、压缩HTTP头、划分请求优先级、服务端推送等特性,解决了在HTTP 1.1中一直存在的问题,优化了请求性能,同时兼容了HTTP 1.1的语义。目前,Chrome、 IE11、Safari和Firefox等浏览器已经支持HTTP/2协议。
HTTP/2的优势:
1. 二进制协议:相比于HTTP 1.x基于文本的解析,HTTP/2将所有的传输信息分割为更小的消息和帧,并对它们采用二进制格式编码。基于二进制可以使协议有更多的扩展性,例如,引入帧来传输数据和指令。
2. 内容安全:HTTP/2基于HTTPS,具有安全特性。使用HTTP/2特性可以避免单纯使用HTTPS引起的性能下降问题。
3. 多路复用(MultiPlexing):通过该功能,在一条连接上,您的浏览器可以同时发起无数个请求,并且响应可以同时返回。另外,多路复用中支持了流的优先级(Stream dependencies)设置,允许客户端告知服务器最优资源,可以优先传输。
4. Header压缩(Header compression):HTTP请求头带有大量信息,而且每次都要重复发送。HTTP/2采用HPACK格式进行压缩传输,通讯双方各自缓存一份头域索引表,相同的消息头只发送索引号,从而提高效率和速度。
TLS(Transport Layer Security)
TLS(Transport Layer Security)即安全传输层协议,在两个通信应用程序之间提供保密性和数据完整性。最典型的应用就是HTTPS。HTTPS,即HTTP over TLS,就是安全的HTTP,运行在HTTP层之下,TCP层之上,为HTTP层提供数据加解密服务。
协议 | 说明 |
---|---|
TLSv1.0 | RFC2246,1999年发布,基于SSLv3.0,该版本易受各种攻击(如BEAST和POODLE),除此之外,支持较弱加密,对当今网络连接的安全已失去应有的保护效力。不符合PCI DSS合规判定标准。 |
TLSv1.1 | RFC4346,2006年发布,修复TLSv1.0若干漏洞 |
TLSv1.2 | RFC5246,2008年发布,目前广泛使用的版本 |
TLSv1.3 | RFC8446,2018年发布,最新的TLS版本,支持0-RTT模式(更快),只支持完全前向安全性密钥交换算法(更安全) |
TLSv1.3
密钥交换
完全支持 PFS
TLS 1.3 协议中选取的密钥交换算法均支持前向安全性。斯诺登事件之后互联网企业开始重视加密算法的前向安全性,防止私钥被破解之后历史数据也能被解密成明文。
为了达到上述安全目的,TLS1.3 协议中废除了不支持前向安全性的RSA和静态DH密钥交换算法。
废弃 DSA 证书
DSA证书作为历史遗留产物,因安全性差,从未被大规模应用,故在 TLS1.3 协议中被废弃。
RSA 填充模式更改
协议中规定RSA填充模式使用PSS。
禁用自定义的 DH 组参数
如果选用了不“安全”的素数作为 DH 的组参数,并且使用静态DH密码套件或使用默认 OpenSSL 配置的DHE加密套件(特别是SSL_OP_SINGLE_DH_USE选项未设置),就很容易受到 Key Recovery Attack 攻击。 因此 TLS1.3 协议中禁用自定义的DH组参数。
对称加密
禁用 CBC 模式
针对 CBC 模式加密算法的攻击,历史上出现过两次,分别是 2011 年BEAST和2013年Lucky 13,实践证明这种对称加密模式确实存在安全隐患。
禁用 RC4 流加密算法
研究人员发现了 BEAST 攻击,该攻击针对所有基于 CBC 模式的加密算法。为解决这个问题,专家建议采用非CBC 模式且普及率较高的 RC4 算法作为替代方案,由此 RC4 算法得到广泛应用。
随着 TLS 版本的演进,BEAST 攻击可通过升级到新版本解决,不必要采用 RC4 这种陈旧算法来替代。另外,2013 年英国皇家哈洛威学院的研究人员发现了一种针对TLS的攻击,该攻击可以从 RC4 算法加密的密文中恢复出少量明文,证明了这种算法无法提供让人放心的安全等级。
为防止 RC4 算法被彻底破解,导致之前加密的网络流量被解密出现严重的安全事故,互联网公司逐渐废弃了这个算法。2014年,CloudFlare 将 RC4 算法的优先级从最高降为最低。2015 年,IETF 组织在 rfc7465 中明确指出要禁用 RC4 流加密算法。
禁用SHA1
早在2005年研究机构就发现SHA1存在理论上的漏洞,可能造成碰撞攻击。
2013年开始微软、Google、Symantec等相关厂商相继公布SHA1证书的升级计划并宣布2017年将开始停止信任SHA1证书。
2017年初Google与荷兰研究机构CWI Amsterdam共同宣布破解SHA1,将SHA1的碰撞攻击从理论转变为现实。
禁用TLS压缩
由于TLS压缩存在安全漏洞,TLS1.3协议删除了该特性。该漏洞表现为通过CRIME攻击可窃取启用数据压缩特性的HTTPS或SPDY协议传输的Cookie。在成功解读身份验证Cookie后,攻击者可实行会话劫持并发动进一步攻击。
加密握手消息
TLS1.3协议中规定在ServerHello消息之后的握手信息需要加密。TLS1.2及之前版本的协议中各种扩展信息在ServerHello中以明文方式发送,新版本中可在加密之后封装到EncryptedExtension消息中,在ServerHello消息之后发送,提高数据安全性。
效率提升
HTTPS 在提高网络安全的同时却增加了额外的性能消耗,包括额外的 SSL 握手交互过程,数据加解密对 CPU 的消耗等。TLS 1.3 在提高效率方面进行了大量改进,特别是对 SSL 握手过程进行了重新设计,将握手交互延时从 2-RTT 降低至 1-RTT 甚至是 0-RTT。在网络环境较差或节点距离较远的情况下,这种优化能节省几百毫秒的时间。
0-RTT模式不具有前向安全性,且消息可能被用作重放攻击,所以安全性较低,需慎重使用。
OCSP stapling
OCSP stapling是一种允许在TLS握手中包含吊销信息的协议功能,启用OCSP stapling后,服务端可以代替客户端完成证书吊销状态的检测,并将全部信息在握手过程中返回给客户端。增加的握手信息大小在1KB以内,但省去了用户代理独立验证吊销状态的时间。
nginx 配置中 serer结构体内加入
# 在Nginx服务器上配置OCSP Stapling
# OCSP Stapling 开启。OCSP是用于在线查询证书吊销情况的服务,使用OCSP Stapling能将证书有效状态的信息缓存到服务器,提高 TLS 握手速度
ssl_stapling on;
# OCSP Stapling 验证开启
ssl_stapling_verify on;
# 用于查询 OCSP 服务器的DNS
resolver 100.100.2.138 100.100.2.136 valid=300s;
#查询域名超时时间
resolver_timeout 5s;
不开启OCSP Stapling
客户端根据证书中的OCSP信息,将查询请求发送到CA的验证地址