1. 首页
  2. 面试专题
  3. 文章列表
多家公司 后端开发 HTTPS 与 TLS 2026-06-14

HTTPS 为什么还要协商会话密钥:面试里最容易漏掉的一层

HTTPS 不是简单用公钥加密全部数据。证书解决身份,密钥交换建立会话密钥,对称加密负责后续传输,三者分工不能混。

HTTPS 面试题经常从“浏览器输入网址发生什么”一路追到 TLS。很多候选人会说“服务端发公钥,客户端用公钥加密数据”,这句话只抓住了一小部分,还容易让人误以为后续所有数据都靠非对称加密传输。

更准确的理解是:证书解决服务端身份可信问题,密钥交换解决双方如何安全得到共享秘密,真正大流量的数据传输主要靠对称加密完成。

为什么不直接用公钥加密全部数据

非对称加密适合身份认证、密钥交换和签名校验,但计算成本高,不适合把每个 HTTP 请求和响应正文都拿来做大规模加解密。对称加密效率更高,适合连接建立后的持续数据传输。

因此 TLS 的目标不是“用服务器公钥加密所有内容”,而是让客户端和服务端在不可信网络上协商出一个只有双方知道的会话密钥。后续数据用这个会话密钥加密,既保证效率,也保证窃听者无法读懂内容。

证书不是密钥本身,而是身份证明

服务器证书里包含公钥、域名信息、签发机构、有效期等内容。客户端要验证证书链是否能追溯到受信任的根证书,域名是否匹配,证书是否过期或被吊销。这个过程解决的是“我正在连接的服务是不是它声称的那个网站”。

如果没有证书校验,中间人可以自己生成一对公私钥,把自己的公钥发给客户端,再和真实服务器各自建立连接。客户端以为自己在和目标网站通信,实际所有数据都被中间人转发和查看。证书链就是为了阻止这种替换身份的攻击。

会话密钥怎么来

在现代 TLS 中,常见做法是通过 ECDHE 等密钥交换机制生成共享秘密,再派生出会话密钥。服务端的证书用于证明身份,密钥交换用于建立加密材料。两者有关联,但不是同一件事。

这也是前向安全经常被追问的原因。如果每次会话都使用临时密钥材料,即使未来服务器私钥泄露,攻击者也不能直接解开过去抓到的所有历史流量。这里不要把 TLS 1.2、TLS 1.3 的细节混成一团,面试里说清“身份认证”和“会话密钥协商”已经能避免大多数错误。

中间人攻击为什么被挡住

中间人可以拦截网络包,但很难伪造一个被客户端信任、域名匹配、未过期、证书链完整的服务器证书。客户端在握手阶段验证证书后,才继续进行密钥交换和加密通信。

如果用户忽略浏览器证书警告,或者系统信任了恶意根证书,保护就会被削弱。这也是企业代理、抓包工具能解 HTTPS 的原因:它们往往是在客户端信任链里安装了自己的根证书,而不是“破解了 HTTPS”。

后端项目里还要关注什么

后端开发不一定每天手写 TLS,但要知道部署时哪些点会影响可用性:证书是否覆盖主域名和 www,证书是否过期,私钥是否泄露,TLS 版本和加密套件是否过旧,反向代理到应用之间是否还需要内网加密,健康检查是否会被 HTTPS 配置影响。

把 HTTPS 讲清楚,不是为了背握手报文顺序,而是能解释身份、密钥和加密数据三者的分工。面试官听到这条线,通常会认为你不是只背了“公钥私钥”几个词。