这是我参与8月更文挑战的第22天,活动详情查看:8月更文挑战
一、准备工作
非对称加密 生成证书
- 服务端上报 公钥A 给 CA(数字整数认证机构)——【申请证书】;
- CA 用私钥对 公钥A 进行加密,生成 数字签名,并颁发 公钥证书B——【颁发证书】;
- 服务端将 证书B 放置在 Web服务 上供下载,如置于 Nginx 目录下【证书下载】;
二、建立连接
https = http + TLS/SSL
- 客户端将支持的加密算法列表、用于产生密钥的随机数C发送给服务端;
- 服务端选择其中一个加密算法,对 随机数C 进行加密得到 通讯密钥D,同时返回 证书B、公钥A 给客户端;
- 客户端 [提前或即时下载] 拿到 CA公钥(或本地加载CA的根证书,一般已经由浏览器开发商安装好。没有则会弹出告警,提示“是否信任此证书”,涉及 中间签发机构 & 信任链 & 传递性 的知识点);
- 客户端用 CA公钥 验证 证书B,确认 服务端公钥A 的真实性;
- 若验证通过,则客户端用 通信密钥D 对随机生成的 通信密钥E 进行对称加密,发送给服务端;
- 服务端用 私钥 解码,得到 通信密钥E。
三、通信过程
对通信报文进行 对称加密
- 从第二步可知,密钥D 与 随机数C 经过选择的 加密算法 计算得到了 密钥E。
- 自此,客户端保存了跟服务端通信的 密钥D,后续每次发送的报文都经过 密钥D 的加密。
- 同理,服务端保存了跟客户端通信的 密钥E,后续每次发送的报文都经过 密钥E 的加密。
- 后续的通信中,客户端/服务端 都使用 通信密钥E 对报文进行 加密传输。
四、通信结束
- 跟 TCP 一样,通过 四次挥手 完成连接中断。