HTTPS学习笔记

147 阅读2分钟

这是我参与8月更文挑战的第22天,活动详情查看:8月更文挑战

一、准备工作

非对称加密 生成证书

  1. 服务端上报 公钥A 给 CA(数字整数认证机构)——【申请证书】;
  2. CA 用私钥对 公钥A 进行加密,生成 数字签名,并颁发 公钥证书B——【颁发证书】;
  3. 服务端将 证书B 放置在 Web服务 上供下载,如置于 Nginx 目录下【证书下载】;

二、建立连接

https = http + TLS/SSL

  1. 客户端将支持的加密算法列表、用于产生密钥的随机数C发送给服务端;
  2. 服务端选择其中一个加密算法,对 随机数C 进行加密得到 通讯密钥D,同时返回 证书B、公钥A 给客户端;
  3. 客户端 [提前或即时下载] 拿到 CA公钥(或本地加载CA的根证书,一般已经由浏览器开发商安装好。没有则会弹出告警,提示“是否信任此证书”,涉及 中间签发机构 & 信任链 & 传递性 的知识点);
  4. 客户端用 CA公钥 验证 证书B,确认 服务端公钥A 的真实性;
  5. 若验证通过,则客户端用 通信密钥D 对随机生成的 通信密钥E 进行对称加密,发送给服务端;
  6. 服务端用 私钥 解码,得到 通信密钥E

三、通信过程

对通信报文进行 对称加密

  1. 从第二步可知,密钥D随机数C 经过选择的 加密算法 计算得到了 密钥E
  2. 自此,客户端保存了跟服务端通信的 密钥D,后续每次发送的报文都经过 密钥D 的加密。
  3. 同理,服务端保存了跟客户端通信的 密钥E,后续每次发送的报文都经过 密钥E 的加密。
  4. 后续的通信中,客户端/服务端 都使用 通信密钥E 对报文进行 加密传输

四、通信结束

  1. 跟 TCP 一样,通过 四次挥手 完成连接中断。