网络宝典
第二套高阶模板 · 更大气的阅读体验

HTTPS协议握手过程:浏览器和网站是怎么悄悄‘对暗号’的?

发布时间:2026-03-27 08:30:31 阅读:1 次

你点开一个网址,地址栏左上角出现一把小锁图标,写着“安全”——这背后,其实是浏览器网站在几毫秒内完成了一次精密配合。这个过程,就叫 HTTPS 协议握手。

为什么不能直接传密码?

想象一下,你在咖啡馆用手机登录网银。如果数据像明信片一样裸着发出去,旁边蹭网的人随手抓个包,就能看到你的账号、密码、转账金额。HTTP 就是这么干的。HTTPS 则给每张明信片套上只有收件人能拆的加密信封——而“怎么配钥匙、怎么确认对方身份”,全靠握手阶段完成。

四步走完一次标准握手(TLS 1.2)

第一步:Client Hello
浏览器先打招呼:“你好,我想连你,我支持这些加密算法(比如 RSA、AES)、这些签名方式、还有这些 TLS 版本(1.2、1.3),这是我的随机数(client_random)。”

第二步:Server Hello + 证书
服务器回一句:“行,咱用 TLS 1.2,加密套件选 RSA+AES-128-CBC,这是我的随机数(server_random),接着——给你我的身份证(SSL 证书)。”
这个证书里有网站域名、公钥、CA(证书颁发机构)的数字签名。浏览器会立刻查证:签发者是不是自己系统里信任的 CA?域名对不对?有没有过期?

第三步:密钥协商
浏览器确认证书没问题后,生成一个“预主密钥”(pre-master secret),用服务器证书里的公钥加密,发过去:

encrypted_pre_master = RSA_encrypt(server_public_key, random_48bytes)

服务器用自己的私钥解密,双方现在都手握 client_random、server_random 和 pre-master secret——三者一搅合,各自算出相同的“主密钥”(master secret),再派生出后续通信用的对称加密密钥(如 AES 密钥)和 MAC 密钥。

第四步:切换加密通道
双方各自发一条“Finished”消息,内容是之前所有握手数据的哈希值,再用刚生成的密钥加密。对方解密后比对哈希,一致就说明整套流程没被篡改,握手成功。之后所有 HTTP 请求/响应,都走 AES 加密通道。

那 TLS 1.3 呢?快多了

新版把四步压成两轮往返(1-RTT),甚至支持“0-RTT”——如果你上次访问过这个网站,这次打开首页时,第一个请求包里就能带上加密的应用数据,边握手边传内容。就像老顾客进店,老板已经把常点的咖啡备好了,你刚推门他就开始冲。

不过 0-RTT 有重放风险,所以只用于 GET 类无副作用请求,敏感操作(比如支付)仍走完整握手。

整个握手过程,用户毫无感知。但正是它默默拦下了钓鱼网站的假证书、挡住了公共 Wi-Fi 上的数据偷窥、让每一次输入密码都真正落在了目标服务器手里——不是靠运气,是靠数学和信任链。