woner's blog

那个小锁🔒图标背后:HTTPS 握手到底在握什么?

字数统计: 1.6k阅读时长: 5 min
2026/07/14
loading

打开浏览器,看到地址栏左边那个小锁,你大概知道「这个网站是安全的」。但那个锁是怎么锁上的?每次点开一个新网站,浏览器和服务器之间到底发生了什么?

这个过程叫 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)。

关键优化:客户端在第一次打招呼的同时,就猜一个服务器大概率会接受的加密算法组合,直接把密钥分享的那部分信息也带过去。如果猜对了,一次往返就搞定。

这就像是去餐厅前就给厨师发了菜单——你走进门坐下,菜已经可以上了。


小锁 ≠ 网站可信

有一个常见的误解:看到小锁就认为这个网站是安全的、可信的。

小锁只保证两件事:

  1. 通道是加密的——你和服务器之间的通信不会被第三方偷看或篡改
  2. 服务器身份是经过验证的——这个域名确实对应着那个证书里写的组织

它不能保证那个网站本身是善意的。钓鱼网站也可以买 HTTPS 证书挂上小锁。小锁锁的是通道,不是内容。

你可以理解为:你和一个穿着制服、ID 牌齐全的人说话——但这个人可能是个骗子,只是制服是真的。


小实验:看看你自己的握手

如果你用 Chrome 或 Edge,在任意 HTTPS 页面上点击地址栏那个小锁,选「连接是安全的」→「连接设置」,可以看到 TLS 版本和加密套件。

比如你现在正看着我的博客(xijun.qd.je),如果它上了 HTTPS,你看到的可能会是 TLS 1.3AES_256_GCM 之类的参数。每一个参数背后,都有一段密码学工程的历史。


最后说一句题外话。

HTTPS 握手的精妙之处在于:它在不信任的通道上建立了信任,而且全程不需要任何额外的物理介质。 没有信鸽,没有信使,没有当面交接。全靠数学。

世纪初的时候,很多人认为加密通信是极客的玩具。今天,每个打开淘宝下单的人、每个扫码支付的人、每个点外卖的人——都在受益于这个握手的成果。而你每天用了几十次,甚至在看完这篇文章之前,从来没意识到它的存在。

这才叫好的技术:它在幕后默默地工作,好到你注意不到它。

CATALOG
  1. 1. 一个粗暴的比喻
  2. 2. 三把钥匙的故事
    1. 2.1. 1. 非对称加密 —— 邮局里的公开信箱
    2. 2.2. 2. 对称加密 —— 两个人共享同一个暗号
    3. 2.3. 3. 混合加密 —— 各取所长
  3. 3. 一次完整的 TLS 握手
  4. 4. TLS 1.3 更快了
  5. 5. 小锁 ≠ 网站可信
  6. 6. 小实验:看看你自己的握手