这篇文章将从两张图,即
https的运行流程图和
它对应的通信时序图,来详细拆解https的基本原理。
------原理拆解分割线------
https由两部分组成:HTTP + SSL / TLS,也就是在http上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。
那具体是怎样进行加密,解密,验证的?
大家可以先看下面这张流程图▼

附上流程图源文件,有需要的可以移步自取▼
part 1 证书验证
1. 客户端发起https请求
我们平常很普通的一个操作,就是在浏览器里输入一个https网址,然后连接到服务端。
2. 服务端接受请求并返回证书
采用https协议的服务器必须要有一套数字证书。这套证书其实就是一对公钥和私钥,大家可以将其理解为一把钥匙和一个锁头的关系,只有这把钥匙才能开这把锁。返回的证书包含公钥,其中会包含证书的颁发机构、过期时间等。
3. 客户端解析证书
客服端会验证公钥是否有效,比如颁发机构、过期时间等等,如果发现异常,就会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就会生成一个随机值。然后用证书(包含公约)对该随机值进行加密(相当于加了个特定的锁)。

part 2 数据传输
4. 传送加密信息
客户端会将用证书加密后的随机值传送给服务端。
5. 服务端解密信息
服务端用私钥(就是特定锁的钥匙)解密后,得到了客户端传过来的随机值(
此后客户端和服务端的通信就可以通过这个随机值来进行加密解密了),然后把内容通过该值进行对称加密。
6. 传输加密后的信息
这部分信息是服务端用私钥(随机值)加密后的信息,可以在客户端被还原。
7. 客户端解密信息
客户端用之前生成的私钥(随机值)解密服务端传过来的信息,于是获取了解密后的内容。