基本概念
HTTP:超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,所以,HTTP协议不适合传输一些敏感信息,好比:信用卡号、密码等支付信息。浏览器
HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL(SSL记录协议[SSL Record Protocol]),所以加密的详细内容就须要SSL。安全
HTTPS协议的主要做用能够分为两种:一种是创建一个信息安全通道,来保证数据传输的安全;另外一种就是确认网站的真实性。性能优化
HTTPS和HTTP的区别
1. https协议须要到ca申请证书,通常免费证书较少,于是须要必定费用。服务器
2. http是超文本传输协议,信息是明文传输,https则是具备安全性的ssl加密传输协议。网络
3. http和https使用的是彻底不一样的链接方式,用的端口也不同,前者是80,后者是443。session
4. http的链接很简单,是无状态的;并发
5. HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。性能
HTTPS最大的特色
HTTPS最大的特色是安全, 在保护用户隐私,防止流量劫持方面发挥着很是关键的做用。主要有如下3点:优化
- 内容加密。浏览器到百度服务器的内容都是以加密形式传输,中间者没法直接查看原始内容。
- 身份认证。保证用户访问的是百度服务,即便被 DNS 劫持到了第三方站点,也会提醒用户没有访问百度服务,有可能被劫持
- 数据完整性。防止内容被第三方冒充或者篡改。
HTTPS的缺点
一、证书费用以及更新维护。网站
二、HTTPS 下降必定用户访问速度(实际上优化好就不是缺点了)。
三、HTTPS 消耗 CPU 资源,须要增长大量机器。
HTTPS 网络访问过程
http协议下,用户只须要完成 TCP 三次握手创建 TCP 链接就可以直接发送 HTTP 请求获取应用层数据,此外在整个访问过程当中也没有须要消耗计算资源的地方。
HTTPS 的访问过程,相比 HTTP 要复杂不少,在部分场景下,使用 HTTPS 访问有可能增长 7 个 RTT。
- 三次握手创建 TCP 链接。耗时一个 RTT。
- 使用 HTTP 发起 GET 请求,服务端返回 302 跳转到 https://www.baidu.com 。须要一个 RTT 以及 302 跳转延时。
- 三次握手从新创建 TCP 链接。耗时一个 RTT。
- TLS 彻底握手阶段一。耗时至少一个 RTT。
- 解析 CA 站点的 DNS。耗时一个 RTT。
- 三次握手创建 CA 站点的 TCP 链接。耗时一个 RTT。
- 发起 OCSP 请求,获取响应。耗时一个 RTT。
- 彻底握手阶段二,耗时一个 RTT 及计算时间。
- 彻底握手结束后,浏览器和服务器之间进行应用层(也就是 HTTP)数据传输。
固然不是每一个请求都须要增长 7 个 RTT 才能完成 HTTPS 首次请求交互。大概只有不到 0.01% 的请求才有可能须要经历上述步骤。
HTTPS的性能优化
主要优化两方面,访问速度和计算性能。
HTTPS 访问速度优化
- 设置HSTS,服务端返回一个 HSTS 的 http header,浏览器获取到 HSTS 头部以后,在一段时间内,无论用户输入www.baidu.com仍是http://www.baidu.com,都会默认将请求内部跳转成https://www.baidu.com。Chrome, firefox, ie 都支持了 HSTS。
- Session resume,复用session能够减小 CPU 消耗,由于不须要进行非对称密钥交换的计算。能够提高访问速度,不须要进行彻底握手阶段二,节省了一个 RTT 和计算耗时。复用有2种方式,Session cache和Session ticket。
- Nginx设置Ocsp stapling。Ocsp 全称在线证书状态检查协议 (rfc6960),用来向 CA 站点查询证书状态,好比是否撤销。一般状况下,浏览器使用 OCSP 协议发起查询请求,CA 返回证书状态内容,而后浏览器接受证书是否可信的状态。这个过程很是消耗时间,由于 CA 站点有可能在国外,网络不稳定,RTT 也比较大。若是不须要查询则可节约时间。
- 使用 SPDY 或者 HTTP2。SPDY 最大的特性就是多路复用,能将多个 HTTP 请求在同一个链接上一块儿发出去,不像目前的 HTTP 协议同样,只能串行地逐个发送请求。Pipeline 虽然支持多个请求一块儿发送,可是接收时依然得按照顺序接收,本质上没法解决并发的问题。HTTP2支持多路复用,有一样的效果。
- False start。简单归纳 False start 的原理就是在 client
key
exchange 发出时将应用层数据一块儿发出来,可以节省一个 RTT。
HTTPS 计算性能优化
- 优先使用 ECC椭圆加密算术。
- 使用最新版的 openssl。
- 硬件加速方案。
- TLS 远程代理计算