HTTPS

什么是HTTPS

本质上是:基于SSL/TSL构建的通道,再叠加HTTP的通信,在这个通道协议保护下,S/C之间的通信可以在不可信的网络中保密的传输,

SSL/TLS 保护整个上层应用协议的通信包,

域名不加密

超文本传输协议安全(HTTPS)是HTTP的安全版本,HTTP是在浏览器和您连接的网站之间发送数据的协议。HTTPS末尾的“S”代表“安全”。这意味着您的浏览器和网站之间的所有通信都是加密的。

HTTPS通常用于保护高度机密的在线交易,如网上银行和在线购物订单。

受保护的信息包括Cookie,用户代理详细信息,URL路径,表单提交和查询字符串参数。HTTPS旨在防止在传输过程中读取或更改此信息

Internet Explorer,Firefox和Chrome等Web浏览器也会在地址栏中显示挂锁图标,以直观地指示HTTPS连接有效。

HTTPS如何工作

HTTPS页面通常使用两种安全协议之一来加密通信 - SSL(安全套接字层)或TLS(传输层安全性)。TLS和SSL协议都使用所谓的“非对称”公钥基础结构(PKI)系统。非对称系统使用两个“密钥”来加密通信,一个“公共”密钥和一个“私有”密钥。使用公钥加密的任何内容只能通过私钥解密,反之亦然。

“私人”密钥应该受到严格保护,并且只能由私钥的所有者访问。对于网站,私钥仍然安全地存放在Web服务器上。相反,公钥旨在分发给任何需要能够解密用私钥加密的信息的人和每个人。

什么是 SSL证书

两个作用:

  • 验证服务器的身份
  • 对传输的数据进行加密、保证其完整性及隐私性

当您请求与网页建立HTTPS连接时,网站最初会将其SSL证书发送到您的浏览器。此证书包含开始安全会话所需的公钥。根据此初始交换,您的浏览器和网站然后启动“SSL握手”。SSL握手涉及生成共享机密以在您自己和网站之间建立唯一安全的连接。

证书颁发机构[2]可以代表Web服务所有者颁发加密签名证书。这些证书向客户端传达Web服务主机在证书颁发时向证书颁发机构证明域的所有权。这可以防止未知或不受信任的网站伪装成联邦网站或服务。

为什么需要证书

通过常规HTTP连接发送的所有通信都是“纯文本”,任何黑客都可以读取,这些黑客会破坏浏览器和网站之间的连接。如果“通信”在订单上并且包含您的信用卡详细信息或社会安全号码,则存在明显的危险。通过HTTPS连接,所有通信都是安全加密的。这意味着即使有人设法闯入连接,他们也无法解密您和网站之间传递的任何数据。

HTTPS 证书的好处

通过常规HTTP连接发送的所有通信都是“纯文本”,任何黑客都可以读取,这些黑客会破坏浏览器和网站之间的连接。如果“通信”在订单上并且包含您的信用卡详细信息或社会安全号码,则存在明显的危险。通过HTTPS连接,所有通信都是安全加密的。这意味着即使有人设法闯入连接,他们也无法解密您和网站之间传递的任何数据。

HTTPS 不做什么

HTTPS有几个重要的限制。通信期间未加密IP地址和目标域名。即使是加密的流量也可以间接地泄露某些信息,例如在网站上花费的时间,或者请求的资源或提交的信息的大小。

HTTPS仅保证两个系统之间连接的完整性,而不是系统本身。它的目的不是保护Web服务器不被黑客入侵或泄露,或者防止Web服务在正常操作期间暴露用户信息。同样,如果攻击者破坏了用户的系统,则可以更改该系统,以使其未来的HTTPS连接受到攻击者的控制。HTTPS的保证也可能被受损或恶意的证书颁发机构削弱或消除

建立连接的过程

连接建立在TCP 握手之后、发送/接受HTTP请求之前,HTTPS通过SSL/TLS握手的SSL/TLS协议在客户端和服务器之间建立协商,

目标:

  • 确保客户端与正确的服务器通信
  • 商定一个双方都支持的密码套件(加密算法等)
  • 获得对于各方能够具有对于算法来说必要的商定的密钥

ssL的handshake

SSL握手

加密什么

加密几乎一切传递的数据(除了IP和域名)

加密了就保证了安全吗

影响性能速度如何处理

HTTPS通信过程

1
2
3
4
5
6
-> 客户端向服务端发送请求 
-> 服务端返回数字证书
-> 客户端用自己的CA[主流的CA机构证书一般都内置在各个主流浏览器中]公钥去解密证书,如果证书有问题会提示风险
-> 如果证书没问题客户端会生成一个对称加密的随机秘钥然后再和刚刚解密的服务器端的公钥对数据进行加密,然后发送给服务器端
-> 服务器端收到以后会用自己的私钥对客户端发来的对称秘钥进行解密
-> 之后双方就拿着这个对称加密秘钥来进行正常的通信

加解密算法

1.对称加密

分为:

流式、分组两种 加密解密使用同一个密钥

主要有: DES、AES-GCM、ChaCha20-Ploy1305、AES,RC4,3DES

简单了解原理:

DES:

AES-GCM:

ChaCha20-Ploy1305:

2.非对称加密

加密密钥与解密密钥不同,称为:公钥、私钥

使用公钥加密的只能用私钥解密,相反同理

公钥和算法都是公开的,私钥是保密的。

非对称加密算法性能较低,(密钥交换等过程耗费)但是安全性超强,由于其加密特性,非对称加密算法能加密的数据长度也是有限的。

非对称加密算法性能低的原因:

非对称加密算法:

RSA(见的比较多)、DSA、ECDSA、DH、ECDHE

3.哈希算法

任意长度的信息转换为较短的固定长度的值,通常其长度要比信息小得多,且算法不可逆

例如: MD5、SHA-1、SHA-2、SHA-256

4.数字签名

签名就是在信息的后面再加上一段内容(信息经过hash后的值),可以证明信息没有被修改过。hash值一般都会加密后(也就是签名)再和信息一起发送,以保证这个hash值不被修改

在线版HTTPS网站检测工具

会对HTTPS网站的证书链、安全性、性能、协议细节进行全面检测,检测完毕后会进行打分,同时给出一份详细的检测报告和改进建议。

提高HTTPS网站的性能和访问速度

误区: 并不是你加了TLS 证书,你的网站就是HTTPS网站了

加上证书,通常网站的速度会变慢,原因:

1.HTTPS 比HTTP 通信时产生更多的通信过程,RTT 时间增加

2.通信过程中的非对称和对称加密计算也会造成更多的服务器性能和时间上的消耗

优化点
1.HSTS(HTTP Strict Transport Security)

HTTPS网站通常的做法是对HTTP的访问在服务器端做302跳转,跳转到HTTPS.,但是存在一些问题

  1. 使用不安全的HTTP协议进行通信;
  1. 增加一个Round-Trip Time

HSTS是HTTP Strict Transport Security的缩写,服务器端配置支持HSTS后,会在给浏览器返回的HTTP Header中携带HSTS字段,浏览器在获取到该信息后,在接下来的一段时间内,对该网站的所有HTTP访问,浏览器都将请求在内部做307跳转到HTTPS,而无需任何网络过程

2.Session Resume(会话复用)

是提升HTTPS网站性能最基础也是最有效的方法。

在HTTPS握手阶段,对服务器性能消耗最为严重的是非对称密钥交换计算,而Session Resume通过对已经建立TLS会话的合理复用,节省非对称密钥交换计算次数,可大幅提高服务器的TLS性能

0 (33)

TLS协议提供两种实现机制Session Resume,分别是Session cache和Session ticket。

Session Cache

Session Cache的原理是使用Session ID查询服务器上的session cache,如果命中,则直接使用缓存信息。但Session Cache有个明显的缺点,它不支持分布式缓存,只支持单机进程间的共享缓存。这对于多个接入节点的架构很难适用。

Session ticket

Session ticket的原理是服务器将session信息加密成ticket发送给浏览器,浏览器后续进行TLS握手时,会发送ticket,如果服务器能够解密和处理该ticket,则可以复用session。

Session ticket可以很好的解决分布式问题,但Session ticket的支持率还不是很高,而且需要考虑服务器上key的安全性方案

3.OCSP Stapling

在HTTPS通信过程时,浏览器会去验证服务器端下发的证书链是否已经被撤销。验证的方法有两种:CRL和OCSP。

CRL是证书撤销列表,CA机构会维护并定期更新CRL列表,但这个机制存在不足:

1.CRL列表只会越来越大;

2.如果浏览器更新不及时,会造成误判。

OCSP是实时证书在线验证协议,是对CRL机制的弥补,通过OCSP浏览器可以实时的向CA机构验证证书。但OCSP同样存在不足

  1. 对CA机构要求过高,要求实时全球高可用;
  2. 客户端的访问隐私会在CA机构被泄露;
  3. 增加浏览器的握手时延。

OCSP Stapling是对OCSP缺陷的弥补,服务器可事先模拟浏览器对证书链进行验证,并将带有CA机构签名的OCSP响应保存到本地,然后在握手阶段,将OCSP响应和证书链一起下发给浏览器,省去浏览器的在线验证过程。

4.SPDY和HTTP/2

SPDY 是 Google 推出的优化 HTTP 传输效率的协议,采用多路复用方式,能将多个 HTTP 请求在同一个连接上一起发出去,对HTTP通信效率提升明显。HTTP2.0是 IETF 2015 年 2 月份通过的 HTTP 下一代协议,它以 SPDY 为原型。SPDY 和 HTTP2 目前的实现默认使用 HTTPS 协议。

Nginx stable版本当前只能支持到SPDY3.1,但最新发布的1.9.5版本通过打patch的方式,可以支持HTTP2.0,这绝对是不一样的奇妙体验。不过不建议直接在线上环境部署,等到2015年年底吧,Nginx会发布Stable版本支持HTTP2.0.

5.TCP 优化

慢启动是TCP规范中很重要的算法,其目的是为避免网络拥塞。通过客户端和服务器之间的数据交换,从一个很保守的初始拥塞窗口值,收敛到双方都认可的可用带宽。当客户端和服务器收敛到一定带宽时,如果一段时间内,双方没有收发数据包,服务器端的拥塞窗口会被重置为初始拥塞窗口值。这对于连接中的突发数据传输性能影响是很严重的。

在没有充足的理由时,服务器端需要禁用空闲后的慢启动机制。

另外,当前浏览器和服务器之间的可用带宽已经相对较大,所以我们还应该将初始的拥塞窗口值扩大,新的RFC中的建议是10,Google是16。

6.TLS Record Size

服务器在建立TLS连接时,会为每个连接分配Buffer,这个Buffer叫TLS Record Size。这个Size是可调。

Size值如果过小,头部负载比重就会过大,最高可达6%。

Size值如果过大,那单个Record在TCP层会被分成多个包发送。浏览器必须等待这些全部达到后,才能解密,一旦出现丢包、拥塞、重传、甚至重新建立的情况,时延就会被相应增加。

那TLS Record Size值如何选择呢?有两个参数可参考。

首先,TLS Record Size要大于证书链和OCSP Stapling响应大小,证书链不会分成多个record;

其次,要小于初始拥塞窗口值,保证服务器在通信之初可以发送足够数据而不需要等待浏览器确认

一般来说,从根CA机构申请的证书为2-3KB左右,级数越多,证书链越大,ocsp响应为2KB左右,所以TLS Record Size是需要根据你的实际情况设置,Google的值5KB。WildDog当前的值是6KB

7.证书链完整且不冗余

浏览器在验证服务器下发的证书链时,不仅仅验证网站证书。如果是多级证书,网站证书和根证书之间所有的中间证书都需要被验证。一旦出现证书链出现不完整,浏览器就会暂停握手过程,自行到因特网进行验证,这个时间基本是不可估算的。

至于怎么查看,通过openssl命令查看,也可以通过SSL Labs帮你在线检测。

8.移动设备上的ChaCha20-Poly1305

ChaCha20被用来加密,Poly1305被用来消息认证,两个操作都需要运行于TLS上。

当前流行的加密套件AES-GCM在TLS 1.2支持,它是不安全RC4和AES-CBC加密套件的替代品。但是,在不支持硬件AES的设备上会引起性能问题,如大部分的智能手机、平板电脑、可穿戴设备。

SSL Handshake过程中服务器端RSA2048解密操作可以用专用硬件做加速来大大提升握手效率。