一文理解 HTTPS 与 TLS 握手原理

每天都在用 HTTPS,但一直没真正搞清楚它背后发生了什么。这篇笔记把我学到的 TLS 握手过程梳理一遍。

HTTP 的问题

普通 HTTP 是明文传输的,数据在网络中间任何一个节点都可能被偷看或篡改。HTTPS 就是在 HTTP 和 TCP 之间加了一层 TLS,用来解决三个问题:加密(防偷看)、完整性(防篡改)、身份认证(防冒充)。

对称加密 vs 非对称加密

TLS 巧妙地把两者结合:用非对称加密在握手阶段安全地协商出一把对称密钥,之后的数据通信全部用对称加密,兼顾安全与性能。

握手大致流程

  1. 客户端发送支持的加密套件列表(Client Hello);
  2. 服务器选定加密套件,并把自己的证书发给客户端(Server Hello);
  3. 客户端验证证书是否可信,然后协商出本次会话的对称密钥;
  4. 双方确认后,后续通信都用这把对称密钥加密。

证书链与 CA

客户端怎么知道服务器的证书是真的?这就靠证书链。服务器证书由中间 CA 签发,中间 CA 又由根 CA 签发,而根 CA 的证书预装在操作系统/浏览器里、是默认受信任的。

验证过程就是从服务器证书一级一级往上追溯,直到遇到一个本地信任的根证书。任何一环对不上,浏览器就会报"证书不受信任"。

小结

理解了握手过程之后再回头看 Caddy 自动签发证书,就清楚它其实是替我们完成了向 CA 证明"我确实拥有这个域名"的过程(ACME 协议),然后拿到可信的证书。

← 返回首页