HTTPS 工作原理——讲清 TLS 握手
HTTPS 如何工作,在一张交互式画布上讲清楚:浏览器与服务器之间的 TLS 握手、证书颁发机构的角色,以及随后建立的加密会话。
HTTPS 就是跑在加密会话里的 HTTP。在任何一个请求上路之前,浏览器与服务器先完成一次 TLS 握手——协商参数、验证服务器的证书,并商定一把只有它们两端共享的会话密钥。
HTTPS 工作原理——讲清 TLS 握手
The interactive FlowJam canvas for this explanation — every lane, row and arrow above is a real QueryChart diagram you can open and edit.
How to read this visual
- 先自上而下读“TLS 握手”这一列,再读“安全会话”这一列:先协商,后加密。
- “证书颁发机构”泳道不在报文路径上——它是浏览器借以判断服务器证书的那个信任方。
- “证书有效且在有效期内吗?”这个决策是唯一的分支:证书有效就继续走到密钥交换,无效则终止在阻断警告上。
握手
“浏览器连接到 HTTPS 站点”开启整个流程,而“浏览器发送 ClientHello,列出支持的加密套件”宣告了浏览器能用哪些协议版本与加密套件。“服务器回复自己的证书和一个 ServerHello”从这些选项里挑定一套,并出示自己的身份——一张签发给该域名的公钥证书。那张证书就是 HTTPS 全部信任的锚点。
是谁在为服务器背书
“浏览器对照 CA 校验证书签名”之所以放在“证书颁发机构”分组里,是因为证书由 CA 签名,而浏览器信任 CA 的公钥。随后“证书有效且在有效期内吗?”这个决策一次性检验三件真实的事:签名、证书上的域名,以及证书的有效期与吊销状态。“否”分支终止在“浏览器阻断连接并给出警告”——浏览器宁可失败关闭,也不去加载一个未经验证的站点。
加密会话
证书获得信任之后,“浏览器发送用服务器公钥加密的预主密钥”是唯一一条只有真正的服务器才能解密的报文。由它出发,“双方推导出相同的会话密钥”说明真正的数据根本不是用证书里的密钥加密的——证书保护的是密钥交换,而一把全新的对称密钥保护整段会话。“HTTP 报文用会话密钥加密”与“浏览器与服务器交换加密数据”,就是页面加载余下过程中 HTTPS 的样子。
Key relationships and takeaways
- HTTPS = 跑在加密的 TLS 会话之上的 HTTP;加密发生在任何一条 HTTP 报文之前。
- 信任来自证书颁发机构,而不是服务器:浏览器用一个自己已经信任的 CA 来判断服务器的证书。
- 证书里的密钥只用一次,用来保护密钥交换;真正的数据由一把全新的会话密钥加密。
- 证书无效或不受信任就会中断连接——HTTPS 宁可失败关闭,也不把数据明文发出去。
- HTTPS 所保护的一切,都跑在互联网图解所描绘的同一套数据包交换网络上。
When to use this visual
- 向团队解释那把小锁为什么会出现,以及一条证书警告到底意味着什么。
- 在工程师开始排查 TLS 问题、过期证书或混合内容警告之前,先让他们熟悉握手过程。
- 讲授信任模型:CA 层级与证书校验是如何防止冒充的。
运作方式
写上你实际使用的证书签发机构
把“证书颁发机构”分组改名为你用的服务商,并在证书方框上注明证书类型——DV、OV 还是 EV。
加上你运行的 TLS 版本
在 ClientHello 那一步注明你实际启用的协议版本与加密套件,让图反映你自己的配置,而不是一份通用配置。
画出你的失败分支
把你真正遇到过的结果加进来——证书过期、主机名不匹配、证书被吊销——每一条都以它所产生的那条明确警告或阻断收尾。
把握手拆到你需要的粒度
如果你要讲 TLS 1.3,就把密钥交换展开成它真实的报文(Key Share、Finished);画布打开之后,怎么扩展由你决定。
常见问题
HTTP 与 HTTPS 有什么区别?
HTTPS 就是跑在加密的 TLS 连接里的 HTTP。请求与响应用的是完全相同的协议;变的是在发送任何一条 HTTP 报文之前,浏览器与服务器先完成一次握手,建立起加密会话。传输的一切——URL、请求头、Cookie、响应体——都只有两端能读懂。
TLS 握手期间发生了什么?
浏览器发送一个 ClientHello,列出它支持的协议与加密套件;服务器回复它的选择和自己的证书;浏览器对照一个受信任的证书颁发机构验证这张证书;然后双方交换一个秘密,各自由它推导出相同的会话密钥。此后 HTTP 报文就以加密方式流动。图解把这一整套交换压缩成了这四步。
浏览器为什么需要证书颁发机构?
因为任何一台服务器都可以自称是任何一个域名。证书颁发机构(CA)就是那个第三方:它在核实域名确实属于申请人之后,为服务器的证书签名。浏览器内置了受信任 CA 的公钥,所以它自己就能验证签名——正是这一点把一个自说自话的身份变成了有人背书的身份。
一条证书警告意味着什么?
它意味着“证书有效且在有效期内吗?”这个决策里的某一项检查没有通过——证书过期了、覆盖的是另一个域名、由不受信任的 CA 签名,或者已经被吊销。浏览器选择阻断连接而不是继续,因为站点的身份无法得到验证。
在 QueryChart(FlowJam)中编辑这张图解
把上面这张 TLS 握手画布原样打开成你自己的图表,标注你支持的加密套件,再把它改成你自己的证书配置。