Https 图解

一张图理解 HTTPS 加密过程,整个过程十分清晰简单,以下是一些详细解释

https 作用

https 相较 http 多了 SSL/TLS 加密协议,https 因此多了以下几个优点:

  1. 所有信息都是加密传输,第三方无法窃听
  2. 具备完善的校验机制,一旦被篡改,通信双方会立即发现
  3. 具备身份证书,防止身份被冒充

原理

SSL/TLS协议的基本思路是采用公钥加密法,即:客户端先向服务器索要公钥,然后用公钥加密信息,服务器收到密文后,使用私钥解密。

而这个过程中需要解决两个问题:
(1) 如何保证公钥不被篡改?

解决方法:将公钥放在数字证书中。只要证书是可信的,公钥就是可信的。

(2) 公钥加密法作为一种非对称加密算法,计算量比对称加密算法大很多,如何减少耗费时间?

解决方法:每次会话(session),客户端和服务器端都生成一个”会话密钥“(session key),用它来加密信息。这里,客户端仅用公钥加密”会话密钥”,而通信过程中的大量信息则用”会话密钥”来加密,由于大量使用对称加密算法,所以可以大幅减少加密运算的时间。

因此,SSL/TLS协议的基本过程如下:

(1) 客户端向服务器索取并验证公钥。
(2) 双方协商生成”会话密钥”。
(3) 双方采用”会话密钥”进行加密通信。

其中,(1)(2)又称为”握手阶段“(handshake)

握手阶段详解

客户端发出请求(ClientHello)

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

(1) 支持的协议版本,如TLS 1.0版本。
(2) 一个客户端生成的随机数,稍后用于生成”会话密钥”。
(3) 支持的加密方法,如RSA公钥加密。
(4) 支持的压缩方法。

服务器回应(ServerHello)

ServerHello: 服务器收到客户端请求后,向客户端发出回应。
在这一步,服务器端的回应包含以下内容:

(1) 确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。
(2) 一个服务器生成的随机数,稍后用于生成”会话密钥”。
(3) 确认使用的加密方法,如RSA公钥加密。
(4) 服务器证书。

客户端回应

客户端收到服务器回应以后,首先验证服务器证书。如果证书不是可信机构颁布、或者证书中的域名与实际域名不一致、或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。

如果证书没有问题,客户端就会从证书中取出服务器的公钥。然后,向服务器发送下面三项信息。

(1) 一个随机数。该随机数用服务器公钥加密,防止被窃听。
(2) 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
(3) 客户端握手结束通知,表示客户端的握手阶段已经结束。本项的值为前面发送的所有内容的hash值,用于服务器校验,以防被篡改。

服务器回应

然后,向客户端发送以下信息:

(1) 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
(2) 服务器握手结束通知,表示服务器的握手阶段已经结束。本项的值为前面发送的所有内容的hash值,用于服务器校验,以防被篡改。

至此,整个握手阶段全部结束。
接下来,客户端与服务器进入加密通信,就完全是使用普通的HTTP协议,只不过用”会话密钥”加密内容。