2

前言

八月初的时候有幸在参与了一场公司内部的讲座分享,现在各大公司都在进行从HTTPHTTPS的迁移,这部分势必会对前端的性能测速产生影响,所以了解HTTPS基本对前端也是有必要

HTTP的差异

HTTP的URL由“http://”起始且默认使用端口80不同,HTTPS的URL由“https://”起始且默认使用端口443。

HTTP是不安全的,且攻击者通过监听和中间人攻击等手段,可以获取网站帐户和敏感信息等。HTTPS被设计为可防止前述攻击,并(在没有使用旧版本的SSL时)被认为是安全的。

SSL/TLS协议解决的问题

  • 所有信息都是加密传播,第三方无法窃听。

  • 具有校验机制,一旦被篡改,通信双方会立刻发现。

  • 配备身份证书,防止身份被冒充

SSL/TLS 握手过程

客户端发出请求(ClientHello)

客户端(通常是浏览器)先向服务器发出加密通信的请求,这被叫做ClientHello请求。
在这一步,客户端主要向服务器提供以下信息。

  1. 支持的协议版本,比如TLS 1.0版。

  2. 一个客户端生成的随机数,稍后用于生成"对话密钥"。

  3. 支持的加密方法,比如RSA公钥加密。

  4. 支持的压缩方法。

服务器回应(SeverHello)

服务器收到客户端请求后,向客户端发出回应,这叫做SeverHello。服务器的回应包含以下内容。

  1. 确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。

  2. 一个服务器生成的随机数,稍后用于生成"对话密钥"。

  3. 确认使用的加密方法,比如RSA公钥加密。

  4. 服务器证书。

客户端回应

客户端收到服务器回应以后,首先验证服务器证书。如果证书不是可信机构颁布、或者证书中的域名与实际域名不一致、或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。
如果证书没有问题,客户端就会从证书中取出服务器的公钥。然后,向服务器发送下面三项信息。
(1) 一个随机数。该随机数用服务器公钥加密,防止被窃听。
(2) 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
(3) 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验。

服务器的最后回应

服务器收到客户端的第三个随机数pre-master key之后,计算生成本次会话所用的"会话密钥"。然后,向客户端最后发送下面信息。
(1)编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
(2)服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验。
至此,整个握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的HTTP协议,只不过用"会话密钥"加密内容。

以下例子可以总结整个握手过程:
握手阶段分成五步。
第一步,爱丽丝给出协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的加密方法。
第二步,鲍勃确认双方使用的加密方法,并给出数字证书、以及一个服务器生成的随机数(Server random)。
第三步,爱丽丝确认数字证书有效,然后生成一个新的随机数(Premaster secret),并使用数字证书中的公钥,加密这个随机数,发给鲍勃。
第四步,鲍勃使用自己的私钥,获取爱丽丝发来的随机数(即Premaster secret)。
第五步,爱丽丝和鲍勃根据约定的加密方法,使用前面的三个随机数,生成"对话密钥"(session key),用来加密接下来的整个对话过程。

握手阶段有三点需要注意。

  1. 生成对话密钥一共需要三个随机数。

  2. 握手之后的对话使用"对话密钥"加密(对称加密),服务器的公钥和私钥只用于加密和解密"对话密钥"(非对称加密),无其他作用。

  3. 服务器公钥放在服务器的数字证书之中。

HTTPS性能

测量HTTPS链接耗时的方法

HTTP耗时 = TCP握手
HTTPs耗时 = TCP握手 + SSL握手

所以,HTTPS肯定比HTTP耗时,这就叫SSL延迟。

  • 加密/解密的过程是需要消耗时间的
    毕竟需要对传输的数据进行加密/解密,算法耗时是肯定有的。

  • 交换公钥/私钥消耗时间
    HTTPS传输在传输之前是需要再服务端与客户端交换公钥/私钥的,这个过程也是非常耗时的。有统计称HTTPS的链接耗时是HTTP的连接耗时的3倍。

  • 重定向消耗时间
    这里还有一个影响速度的点,那就是用户在浏览器中输入网址的时候,是不会去自己输入https协议头的,如果你在浏览器中输入www.jd.com的话,默认浏览器访问的是http://www.jd.com的,如果我们想要用户访问https的网站的话,就要自己进行一次网页重定向,重定向也是比较耗时的操作。这都会对我们的网站速度造成影响。

HTTPS发展趋势

  • https everywhere,http2主流实现强制使用https

  • 加密强度增加

  • 证书开源免费

  • 速度提升, Tls1.3 减少握手

参考资料

wiki百科
阮一峰老师的博客
聊一聊HTTPS那些事儿


已注销
958 声望58 粉丝