一文理解 HTTPS 与 TLS 握手原理
每天都在用 HTTPS,但一直没真正搞清楚它背后发生了什么。这篇笔记把我学到的 TLS 握手过程梳理一遍。
HTTP 的问题
普通 HTTP 是明文传输的,数据在网络中间任何一个节点都可能被偷看或篡改。HTTPS 就是在 HTTP 和 TCP 之间加了一层 TLS,用来解决三个问题:加密(防偷看)、完整性(防篡改)、身份认证(防冒充)。
对称加密 vs 非对称加密
- 对称加密:加密和解密用同一把密钥,速度快,但密钥怎么安全地告诉对方是个难题;
- 非对称加密:有公钥和私钥一对,公钥加密的只有私钥能解,安全但速度慢。
TLS 巧妙地把两者结合:用非对称加密在握手阶段安全地协商出一把对称密钥,之后的数据通信全部用对称加密,兼顾安全与性能。
握手大致流程
- 客户端发送支持的加密套件列表(Client Hello);
- 服务器选定加密套件,并把自己的证书发给客户端(Server Hello);
- 客户端验证证书是否可信,然后协商出本次会话的对称密钥;
- 双方确认后,后续通信都用这把对称密钥加密。
证书链与 CA
客户端怎么知道服务器的证书是真的?这就靠证书链。服务器证书由中间 CA 签发,中间 CA 又由根 CA 签发,而根 CA 的证书预装在操作系统/浏览器里、是默认受信任的。
验证过程就是从服务器证书一级一级往上追溯,直到遇到一个本地信任的根证书。任何一环对不上,浏览器就会报"证书不受信任"。
小结
理解了握手过程之后再回头看 Caddy 自动签发证书,就清楚它其实是替我们完成了向 CA 证明"我确实拥有这个域名"的过程(ACME 协议),然后拿到可信的证书。
← 返回首页