Https核心原理与流程

HTTPS 并非一个新的协议,而是 HTTP 协议运行在 SSL/TLS 协议之上的安全通道。其核心本质是混合加密:利用非对称加密解决密钥交换问题,利用对称加密解决数据传输效率问题。

一、HTTPS 建立连接的详细流程(TLS 握手)

这个过程就像特工交接任务,目的是在不安全的网络中协商出一把只有双方知道的“会话密钥”。

  1. 客户端发起请求
  • 动作:浏览器发送 Client Hello
  • 内容:支持的 TLS 版本、支持的加密套件列表、客户端随机数
  1. 服务端响应
  • 动作:服务器发送 Server Hello
  • 内容:确认使用的 TLS 版本和加密套件、服务端随机数数字证书(包含服务器公钥、域名、有效期、CA 签名等)。
  1. 客户端验证证书
  • 动作:浏览器对证书进行“体检”(详见第二部分)。
  • 结果:验证通过后,提取证书中的服务器公钥
  1. 密钥交换(关键步骤)
  • 动作:浏览器生成第三个随机数,称为预主密钥
  • 加密:用服务器公钥加密“预主密钥”,发送给服务器。
  • 解密:服务器用私钥解密,拿到“预主密钥”。
  1. 生成会话密钥
  • 原理:此时,客户端和服务端手里都有了三个数:客户端随机数 + 服务端随机数 + 预主密钥
  • 计算:双方利用相同的算法,独立计算出同一把会话密钥
  • 注意:这把钥匙从未在网络上传输过,极其安全。
  1. 握手结束与数据传输
  • 验证:双方互发 Finished 消息(用会话密钥加密),确认密钥一致且握手未被篡改。
  • 传输:后续所有的 HTTP 数据(HTML、图片等)都使用会话密钥进行对称加密传输。

二、客户端如何校验证书合法性

浏览器内置了一套严格的“安检机制”,只有以下 5 项全部通过,才会信任该证书:

  1. 信任链验证
  • 原理:浏览器操作系统或浏览器内部预装了“受信任的根证书颁发机构”列表(包含根 CA 的公钥)。
  • 校验:浏览器利用根 CA 的公钥,验证服务器证书上的数字签名。如果签名有效,说明该证书是由可信机构签发的。
  1. 有效期检查
  • 校验:对比系统当前时间与证书中的 Not BeforeNot After 字段。
  • 目的:防止使用过期或尚未生效的证书。
  1. 域名一致性检查
  • 校验:检查证书中的 Common NameSubject Alternative Name 字段。
  • 目的:确保你访问的域名(如 www.example.com)与证书里登记的域名完全一致,防止“张冠李戴”。
  1. 吊销状态检查
  • 校验:浏览器可能会通过 CRL 或 OCSP 协议查询证书是否被 CA 机构提前吊销(例如私钥泄露的情况)。
  1. 完整性校验
  • 校验:确保证书内容在传输过程中未被黑客篡改。

三、公钥如何解密签名并进行比对

这是 HTTPS 信任机制的数学基石。通常我们认为“公钥加密,私钥解密”,但在数字签名中,逻辑反过来了:“私钥加密(签名),公钥解密(验签)”

核心逻辑

  • 私钥签名:只有持有私钥的人(CA 机构)才能生成这段加密数据。
  • 公钥解密:既然公钥能解开,就证明这段数据一定是私钥持有者生成的(身份认证)。

详细比对步骤

  1. 服务端(CA 签发时)
  • 提取:提取证书的明文信息(域名、公钥、有效期等)。
  • 哈希:对明文信息进行哈希运算(如 SHA-256),生成摘要 A
  • 加密:用 CA 机构的私钥对“摘要 A”进行加密。这个加密后的结果就是数字签名
  1. 客户端(浏览器校验时)
  • 解密:浏览器利用本地信任的 CA 公钥,去解密证书上的“数字签名”,还原出摘要 A
  • 计算:浏览器对收到的证书明文信息,用同样的哈希算法重新计算,生成摘要 B
  • 比对
  • 如果 摘要 A == 摘要 B
  • 说明内容未被篡改(完整性)。
  • 说明签名确实由 CA 私钥生成(真实性)。
  • 如果两者不一致,浏览器会直接拦截并报错。

四、总结速查表

核心环节 关键动作 使用的密钥 目的
握手阶段 交换随机数、传输证书 明文/非对称加密 协商参数、验证身份
密钥交换 传输预主密钥 公钥加密,私钥解密 安全传递生成会话密钥的“种子”
证书校验 验证签名 CA 公钥解密签名 确认服务器身份真实、未被篡改
通信阶段 传输网页数据 会话密钥(对称加密) 高效、安全地传输业务数据