打开浏览器,看到地址栏左边那个小锁,你大概知道「这个网站是安全的」。但那个锁是怎么锁上的?每次点开一个新网站,浏览器和服务器之间到底发生了什么?
这个过程叫 TLS 握手。它发生得极快——通常在一秒之内——但这一秒里藏着计算机历史上最优雅的算法博弈之一。
一个粗暴的比喻
想象你要给朋友寄一个上锁的盒子,里面是机密文件。
问题来了:怎么把锁和钥匙安全地交给对方?如果你直接把钥匙一起寄过去,半路被人截了,锁就是摆设。
你需要一种方法——在公开的、不安全的环境下,安全地约定一个秘密。
这就是 HTTPS 握手的核心问题。
三把钥匙的故事
TLS 握手用到了三种不同的密码学工具,理解它们就理解了 HTTPS。
1. 非对称加密 —— 邮局里的公开信箱
每个人都有一个「公钥」和一个「私钥」。公钥谁都可以知道,私钥只有自己知道。
公钥加密的东西,只有对应的私钥能解开;私钥加密的东西,也只有对应的公钥能解开。
这就像邮局里放的公开信箱:任何人都往里面投信(用公钥加密),但只有信箱主人能打开拿出信(用私钥解密)。
非对称加密解决了「怎么安全地把秘密传给对方」的问题——但太慢了。如果你用 RSA 加密一整篇网页,服务器会累死,浏览器会卡死。
2. 对称加密 —— 两个人共享同一个暗号
效率高得多。双方用同一个密钥,加密和解密都很快。问题是:这个密钥怎么安全地传给对方? 这又回到了最初的问题。
3. 混合加密 —— 各取所长
TLS 的做法是:用非对称加密安全地传递一个临时密钥,然后用这个临时密钥做对称加密来通信。
这个临时密钥叫「会话密钥」(session key)。每次连接都重新生成,一次一密。
一次完整的 TLS 握手
简化版本大概是这么走的:
第一步:Client Hello
浏览器对服务器说:嗨,我想建立安全连接。我支持这些加密算法(密码套件)、TLS 版本、还带了一个随机数。
第二步:Server Hello
服务器回复:好的,我们用 TLS 1.3 和这个加密算法。同时带回:
- 服务器的数字证书(含公钥)
- 服务器自己生成的随机数
第三步:证书验证
浏览器检查服务器的证书。这个证书是谁签发的?CA(证书颁发机构)是不是可信的?域名对不对?有没有过期?
这一步是 HTTPS 信任链的核心。你的操作系统和浏览器里预装了一批受信任的根证书机构的公钥。通过这些根证书,可以逐级验证任何一个网站证书的合法性。
证书验证通过之前,浏览器会给你一个大大的红色警告。
第四步:密钥交换
浏览器生成一个「预主密钥」(Pre-Master Secret),用服务器的公钥加密后发送过去。
现在,浏览器和服务器都拥有了三个素材:Client Random、Server Random、Pre-Master Secret。它们用相同的算法算出同一个会话密钥。
这一步的关键在于:即便第三方截获了所有的通信——他们能拿到 Client Random、Server Random 和被加密的 Pre-Master Secret,但没有服务器的私钥就无法解密 Pre-Master Secret,也就算不出会话密钥。
第五步:握手完成,加密通信开始
双方都发一条「握手完成」消息,之后的通信全部用会话密钥对称加密。
TLS 1.3 更快了
2018 年发布的 TLS 1.3 把上面的流程压缩到了一次往返(1-RTT)。
关键优化:客户端在第一次打招呼的同时,就猜一个服务器大概率会接受的加密算法组合,直接把密钥分享的那部分信息也带过去。如果猜对了,一次往返就搞定。
这就像是去餐厅前就给厨师发了菜单——你走进门坐下,菜已经可以上了。
小锁 ≠ 网站可信
有一个常见的误解:看到小锁就认为这个网站是安全的、可信的。
小锁只保证两件事:
- 通道是加密的——你和服务器之间的通信不会被第三方偷看或篡改
- 服务器身份是经过验证的——这个域名确实对应着那个证书里写的组织
但它不能保证那个网站本身是善意的。钓鱼网站也可以买 HTTPS 证书挂上小锁。小锁锁的是通道,不是内容。
你可以理解为:你和一个穿着制服、ID 牌齐全的人说话——但这个人可能是个骗子,只是制服是真的。
小实验:看看你自己的握手
如果你用 Chrome 或 Edge,在任意 HTTPS 页面上点击地址栏那个小锁,选「连接是安全的」→「连接设置」,可以看到 TLS 版本和加密套件。
比如你现在正看着我的博客(xijun.qd.je),如果它上了 HTTPS,你看到的可能会是 TLS 1.3、AES_256_GCM 之类的参数。每一个参数背后,都有一段密码学工程的历史。
最后说一句题外话。
HTTPS 握手的精妙之处在于:它在不信任的通道上建立了信任,而且全程不需要任何额外的物理介质。 没有信鸽,没有信使,没有当面交接。全靠数学。
世纪初的时候,很多人认为加密通信是极客的玩具。今天,每个打开淘宝下单的人、每个扫码支付的人、每个点外卖的人——都在受益于这个握手的成果。而你每天用了几十次,甚至在看完这篇文章之前,从来没意识到它的存在。
这才叫好的技术:它在幕后默默地工作,好到你注意不到它。