想象你是一位身负重任的信使,要把一份绝密宝藏从 A 城护送到 B 城的合作方手中。可这条邮路并不太平:沿途的每一个中转站都可能拆开包裹偷看,甚至在掉包之后又原样封好——这正是早期 HTTP 的处境:所有请求与响应都以明文在网络上“裸奔”,任何途经的路由器、代理、运营商都能一览无余。 为了让这趟快递安全抵达,你和收件人约定了一套“保险箱交接仪式”:先互相验明正身,确认对方真的是合作方而非骗子;再翻开目录商定用哪种锁、哪种钥匙;接着在公开邮路上安全地交换钥匙;最后才把宝藏锁进保险箱发运。这套仪式,就是 TLS 握手;而套上保险箱的 HTTP,就是 HTTPS。 这篇文章,我们就跟着这趟跨国快递走完全程:从 HTTP 为什么要加密,到证书如何验明正身、钥匙如何悄悄交换,再到 TLS 1.3 如何把两趟往返压缩成一趟甚至零趟。
掌握 TLS 握手细节,是 Web 开发者排查加密问题、运维工程师配置 SSL 证书、安全工程师评估加密方案的共同基本功,也是技术面试中最常被深挖的考点之一。
可视化演示
展示TLS握手消息流、证书链验证过程及TLS 1.2与1.3性能对比。
本节配有交互动效(进入视口后自动加载,约 3KB)。
TLS握手流程 ClientHello发送支持的加密套件 服务器返回证书和密钥交换参数 双方协商出对称密钥加密通信
HTTPS 诞生背景
在保险箱被发明之前,人类寄贵重物品只能靠“信任”。你把一叠现金塞进牛皮纸信封交给邮递员,他沿途每个中转站都可以拆开看看、抽走几张,再原样封好。你甚至不知道这笔钱最后到的是真合作方还是冒牌货。这正是 HTTP 的处境:它寄出的每封“信”都是裸奔的明信片。
HTTP 建立在 TCP 之上,数据以明文方式传输。客户端发出的每个请求、服务器返回的每个响应,在网络链路上的任何一跳——路由器、代理、运营商——都可以完整读取。更要命的是,中间人不仅能偷看,还能篡改:替换下载文件、插入广告甚至钓鱼链接,而收发双方都毫无察觉。
于是 HTTPS 为 HTTP 加上了 TLS 这层安全壳,提供三个核心目标:机密性——数据只有收发双方能读懂;完整性——数据被改动时接收方能立刻发现;身份认证——客户端能确认服务器的真实身份。这三者缺一不可,就像保险箱必须具备锁、封条和验明正身三道工序。
所以 HTTPS 并不是什么魔法,它只是给 HTTP 这封“裸奔的明信片”套上了一层保险箱。接下来的握手,就是为了敲定“锁、封条、身份证”这三件套而进行的交接仪式。
- 机密性 C数据在传输中被加密,中间人即使截获也只能看到乱码,就像宝藏被锁进了保险箱。
- 完整性 I收发双方用校验值检查数据是否被改动,一旦被篡改就立即丢弃,如同保险箱上的防拆封条。
- 身份认证 A客户端通过证书确认服务器身份,防止连接到冒牌的“假合作方”。
TLS 协议分层
如果快递公司要在每个环节都检查一遍贵重物品,效率会是灾难。聪明的做法是:在包装车间里加一道“保险箱工序”,其余运输、分拣、派送照旧。TLS 就扮演了这个“打包车间”。
在 TCP/IP 协议栈里,TLS 位于 HTTP 与 TCP 之间:HTTP 照常生成请求,TLS 负责把请求加密后再交给 TCP 传输;接收端则由 TLS 解密后交给 HTTP。对上层应用来说,它就像一条“透明加密隧道”——应用不需要关心加解密细节,只管收发普通 HTTP 报文。
TLS 由两阶段构成:握手阶段(Handshake)协商参数、交换密钥;记录阶段(Record)用协商好的对称密钥加密实际数据。TLS 的前身是 Netscape 1995 年推出的 SSL,历经 2.0、3.0 后由 IETF 接管改名为 TLS,至今有 1.0、1.1、1.2、1.3 四个正式版本,其中 1.2 与 1.3 是当前主流。
这套打包车间的核心使命,可以概括为三件事:验明对方身份、商定加密算法、安全交换钥匙。后面几个小节,就是逐车间参观这三道工序。
- 握手阶段双方交换问候、证书、密钥材料,完成身份认证与密钥协商,耗时约一到两个网络往返。
- 记录阶段使用握手生成的会话密钥,对 HTTP 数据进行对称加密与完整性保护后逐块发送。
- 外壳关系HTTPS 的 443 端口承载的仍是普通 HTTP 报文,只是外面多了 TLS 封装。
证书链验证
合作方说“我是 B 城的小红”,你不能就这么信了。她掏出一本护照,上面有公安局的钢印——但你怎么知道这本护照不是伪造的?你对照“公安局”这个信任源头来验证钢印。在 TLS 世界里,这个“公安局”就是证书权威机构 CA。
服务器在握手时呈上的不是一张裸公钥,而是一份数字证书:包含域名、公钥、颁发者、有效期等信息,并由 CA 用私钥签名。客户端(浏览器)内置了一批“信任的根证书”——相当于预装了各国公安局的钢印样本——以此作为验证的锚点。
现实中,服务器证书很少由根 CA 直接签发,而是由“根 CA → 中间 CA → 服务器”逐级签发,形成证书链。验证时客户端自底向上:用中间 CA 的公钥验证服务器证书的签名,再用根 CA 的公钥验证中间 CA 的签名,直到找到本地信任的根证书。除了验签,还要检查有效期与吊销状态(通过 CRL 或 OCSP 查询),确保证书没有被提前作废。
整个验证过程就像海关查验护照:你不需要认识每一位旅客,只需要一路向上追溯到那个你信任的签发机关。只要链上任何一个环节对不上——签名失败、过期、被吊销——浏览器就会亮出“不安全”的红牌,绝不收货。
- 根 CA浏览器内置信任的顶级权威,相当于公安总局的钢印样本,是验证链的终点。
- 中间 CA根 CA 不直接给海量网站签名,而是授权中间 CA 分担签发,证书链因此多出一到两层。
- ServerCert最终包含服务器公钥和域名信息的“身份证”,必须与访问的域名匹配。
密码套件协商
保险箱交接仪式开始,双方要做的第一件事不是锁箱子,而是坐在一起翻目录:你手里有挂锁、密码锁、指纹锁、电子锁,对方装锁的手艺和你能互相匹配的其实只有其中几种。谁也不能用自己独门的语言谈买卖。
TLS 握手的第一步是双方发送 Hello 消息。客户端在 ClientHello 里带上自己支持的 TLS 版本、密码套件列表(Cipher Suites);服务器在 ServerHello 里挑选一套双方都支持的最优组合返回。这个“互相匹配”的算法组合,决定了整个会话怎么交换密钥、怎么认证、怎么加密。
一套密码套件由四个要素拼成,名称形如 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:密钥交换算法(ECDHE)、证书认证算法(RSA)、对称加密算法(AES-128-GCM)、完整性校验哈希(SHA256)。选择哪套套件不是随意的:它决定了握手的安全性与性能;如果客户端与服务器没有交集(如客户端只支持旧算法、服务器已禁用),握手会直接失败。
当服务器在“目录”上勾下 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 这一行,就相当于写死了一张交接工单:用什么锁、验什么证件、挂什么封条、配几把钥匙——全在这一串字符里。接下来,真正的钥匙交换开始了。
- TLS协议家族名,标明这是 TLS 体系的密码套件。
- ECDHE密钥交换算法,握手阶段负责安全地协商出会话密钥。
- RSA证书认证算法,负责验证服务器证书的真实性。
- AES_128_GCM对称加密算法,记录阶段用它加密实际数据,GCM 模式同时提供完整性。
- SHA256密钥派生与完整性校验所用的哈希算法。
密钥交换机制
这是整个仪式最精妙的一步。双方已经决定了锁具(对称加密),但问题是:这把锁只有一把钥匙,而钥匙必须同时出现在两端才能开锁。可邮路是不安全的——如果直接寄钥匙,坏人看一眼就能配一把。怎么办?
老式的 RSA 密钥交换思路是“保险箱寄钥匙”:服务器把公钥放在证书里,客户端生成一个随机数作为预主密钥(pre-master secret),用服务器公钥加密后寄过去,服务器用私钥解开——双方就此共享同一份秘密。隐患在于:一旦服务器私钥泄露,历史上所有被截获的流量都能被解开。
现代方案是 ECDHE(临时椭圆曲线 Diffie-Hellman),思路是“各自出颜料、公开混合、私算共享色”。双方各自选一个随机私钥 d,乘以椭圆曲线上的公开基点 G,得到公钥 Q=d×G 并公开交换;随后用对方的公钥乘自己的私钥,算出同一个共享点 K。窃听者只知道 Q 而不知道 d,无法反推出 K。每次握手都临时生成新的 d,私钥泄露也解不开过去的会话——这就是“前向保密”。
颜料混合的妙处在于:每个人都知道最终混合色,但谁也没见过对方的那管秘密颜料。快递路上即使所有公开颜料都被截获,窃听者也无法算出双方共享的那一色——这就是现代 TLS 只收 ECDHE 这一种寄钥匙方式的原因。
- G椭圆曲线上公开约定的基点,所有人都知道,相当于公共颜料。
- d_client 与 d_server双方各自随机生成、绝不出网的秘密数,相当于各自的秘密颜料。
- Q 交换双方把 Q = d×G 公开传给对方,但从公开值无法反推出 d。
- K 收敛各自用对方的 Q 乘自己的 d,得到同一个共享密钥。
对称加密通信
握手完成后,真正的“宝藏”——HTTP 请求和响应——开始装进保险箱发运了。与握手阶段那些耗时的验身份、换钥匙不同,运输阶段只有一个要求:又快又稳。于是双方用同一把钥匙锁箱、开箱,不再有复杂的公钥运算。
双方通过密钥派生函数(KDF),从共享密钥加上双方 Hello 消息中的随机数,派生出记录阶段使用的会话密钥。TLS 1.2 中这个流程叫 PRF(伪随机函数),TLS 1.3 改用 HKDF。会话密钥通常有多个:客户端写、服务器写、初始化向量 IV 都分开,避免双向数据互相推断。
数据加密采用对称加密算法,TLS 1.2 主流是 AES-GCM(Galois 计数器模式),TLS 1.3 只保留 AEAD(认证加密)族算法。AEAD 在加密的同时输出认证标签(MAC),接收方解不开或标签对不上就立即丢弃——机密性和完整性一次搞定,不再像老的 CBC 模式那样“先加密再单独算 MAC”,繁琐且易错。
至此,保险箱已经上锁,钥匙在两端的保险柜里各放一把,封条一贴。邮路上一路狂奔的每个包裹都是封死的,任何中转站都看不到里面装的宝贝——HTTPS 的每一次页面加载、每一笔支付,走的都是这条高速密道。
- 会话密钥 K由共享密钥派生而来,双方各自持有同一份,不随数据在网络上传输。
- 加密 C = E_K(M)AES 等对称算法用 K 加密数据,速度快到能扛住高并发 HTTPS 流量。
- 认证标签 TGCM 等 AEAD 模式同时输出标签,接收方验证标签即可发现任何比特的篡改。
- 解密 M = D_K(C)接收方用同一把 K 解开,若标签不匹配则直接丢弃。
TLS 1.3 性能飞跃
老式交接仪式(TLS 1.2)讲究排场:双方先碰面寒暄(Hello),再验护照、换钥匙,最后还要往返一次确认“收到收到”,前后两个来回才能开始干活。对于远隔重洋(高延迟网络)的合作,每一趟往返都是真金白银的时间成本。
TLS 1.2 完整握手需要 2-RTT(两个网络往返)才能发送第一条应用数据;TLS 1.3 对握手流程做了手术式精简:把密钥协商合并进 Hello 阶段,服务器收到 ClientHello 后,一次同时返回 ServerHello、证书、密钥参数和 Finished,客户端只需一个往返(1-RTT)就能开始发送数据。
TLS 1.3 还引入了 0-RTT 会话恢复:如果客户端之前访问过该站点,可以记住会话票据(ticket),下次直接在 ClientHello 里带上加密的提前数据(early data),服务器立刻解密处理——但 0-RTT 有被重放(replay)的风险,通常只用于幂等请求。此外,1.3 删除了 RSA 密钥交换、CBC 模式等一整套不安全算法,只保留前向保密的 ECDHE,并把所有握手消息加密,安全性不是妥协而是加强。
如今,这趟跨国快递把繁杂的认亲、换锁仪式压缩成了一趟“一站式”交接:你掏出旧票据,合作方连寒暄都省了,直接收下你带来的第一箱货。快递效率因此提升,而安全等级不降反升——这正是 TLS 1.3 成为现代 HTTPS 默认标配的原因。
- TLS 1.2 = 2 RTT完整握手要两趟往返:第一趟 Hello、证书与密钥交换,第二趟 Finished 确认。
- TLS 1.3 = 1 RTT密钥交换融入第一趟,服务器把证书和密钥参数一次性带回。
- 0-RTT 恢复复用会话票据,客户端首包即可携带加密数据,省去整个握手。
AI 应用场景
电商大促前的全站证书巡检
阶段:工程实施与运维观测
解决的问题:证书过期是 HTTPS 站点最常被忽略的故障源。传统方式是人工盯日历,要么提前一个月手动检查,要么等浏览器报错、业务中断才应急。利用脚本自动拉取证书链、解析有效期与吊销状态,可以在大促前把全站证书体检一遍并提前预警,把“事故”变成“未遂事件”。
具体案例:某电商平台在双十一前运行巡检脚本,遍历所有域名与 CDN 节点,发现 3 张证书 7 天内过期、1 个中间证书链不完整导致部分老设备握手失败,自动生成工单并在 2 小时内完成替换;同时日志显示 TLS 1.3 握手占比 89%,确认 0-RTT 恢复策略没有影响支付接口的幂等性。
安全团队的加密配置体检报告
阶段:安全审计与合规
解决的问题:公司对外服务是否还支持 TLS 1.0/1.1?是否有服务在用没有前向保密的 RSA 密钥交换?逐个用 OpenSSL 手工探测效率低且易漏。用脚本批量扫描资产清单,输出每台服务器的协议版本、密码套件与证书链详情,对照安全基线自动打分,是安全团队的重要日常工作。
具体案例:安全工程师编写扫描器对公司 200 个子域发起握手探测,发现 12 个老系统仍支持 TLS 1.0,8 个服务没有启用前向保密,出具报告推动升级;半年后复扫全部达标,顺利通过等保测评中的“传输安全”检查项。
前端定位“混合内容”被拦截问题
阶段:应用开发调试
解决的问题:页面升级 HTTPS 后,部分图片或脚本仍走 HTTP,浏览器默认拦截造成功能异常。理解 HTTPS 的握手与证书机制后,开发者能快速区分问题是出在证书、密码套件兼容,还是混合内容上,而不是盲目改代码。
具体案例:开发者用浏览器开发者工具观察到握手成功但请求被标记为 blocked:mixed-content,排查发现页面中第三方统计脚本仍引用 http:// 地址,改为 https:// 后恢复;另一处小程序 WebView 因老设备不支持 TLS 1.3 握手失败,配置兼容套件后解决。
Python 演示
"""用极简 Diffie-Hellman 演示 TLS 密钥交换的核心思想"""import os P = 23 # 公开的大素数(真实场景是几百位的大数)G = 5 # 公开的生成元 def generate_keypair(): """生成 (私钥, 公钥)。私钥保密,公钥公开。""" private = int.from_bytes(os.urandom(4), "big") % (P - 2) + 1 public = pow(G, private, P) return private, public def compute_shared(private, peer_public): """用自己私钥和对方公钥算出共享密钥。""" return pow(peer_public, private, P) def run_handshake(): """模拟一次密钥交换:双方算出的共享密钥必须一致。""" d_c, q_c = generate_keypair() # 客户端生成公私钥对 d_s, q_s = generate_keypair() # 服务器生成公私钥对 k_c = compute_shared(d_c, q_s) # 客户端:d_c * q_s k_s = compute_shared(d_s, q_c) # 服务器:d_s * q_c assert k_c == k_s, "共享密钥不一致,握手失败!" return q_c, q_s, k_c if __name__ == "__main__": q_c, q_s, k = run_handshake() print("客户端公钥 Q_c =", q_c) print("服务器公钥 Q_s =", q_s) print("窃听者能看到 Q_c 和 Q_s,却算不出私钥") print("双方共享会话密钥 K =", k)
public = pow(G, private, P)对应椭圆曲线上的“公钥 = 私钥 × 基点”,这里用模幂模拟private = int.from_bytes(os.urandom(4), "big") % (P - 2) + 1用系统熵源生成秘密随机数,绝不出网k_c = compute_shared(d_c, q_s)客户端用自己的私钥乘对方的公钥,得到共享密钥assert k_c == k_s, "共享密钥不一致,握手失败!"双方算出同一个 K 才能继续握手,否则失败print("窃听者能看到 Q_c 和 Q_s,却算不出私钥")公开信道上只有公钥,没有私钥,这是 DH 系列算法的安全根基
常见误区
误区“HTTPS 加密不就是浏览器拿证书里的公钥把数据加密,服务器用私钥解密嘛?非对称加密那么安全,为什么还要提对称加密?”
正解非对称加密太慢,扛不住海量数据。真实流程里,公钥只用在握手阶段做身份认证和密钥交换(如 RSA 方式加密预主密钥),一旦双方协商出会话密钥,实际 HTTP 数据全部走 AES 这类对称加密。这就像快递只用“验身份证 + 换钥匙”的高级流程开一次保险箱,之后搬货全靠又快又方便的同一把钥匙。
为何常见:教材常以“公钥加密、私钥解密”作为非对称加密的孤例演示,读者容易把“握手阶段的密钥交换”误当成“数据加密本身”。
误区“浏览器报'证书过期',是不是网站被黑了?这网站还能不能放心用?”
正解证书过期只是“身份证到期了”,需要向 CA 续费并重新部署,与网站被黑没有必然联系。真正要警惕的是“证书无效”且伴随域名不匹配、签名验证失败等情况。反之,一个过期多时仍未处理的网站也说明运维纪律松懈,值得谨慎。就像合作方护照过期,可能只是忘续签,未必是骗子。
为何常见:浏览器对过期、吊销、域名不匹配统一显示“不安全”提示,用户难以区分具体原因。
误区“TLS 1.3 就是把 1.2 的握手从 2RTT 减到 1RTT,纯性能优化,安全性和 1.2 没什么区别。”
正解1.3 在提速的同时大幅收紧安全:删除 RSA 密钥交换(不再有非前向保密套件)、废除 CBC 模式老密码、移除 SHA-1、压缩与重协商等“历史包袱”,并把整个握手过程加密保护。可以说 1.3 是“更快且更安全”,而不是简单的降级优化。
为何常见:“1.3 性能更好”是最容易被记住的卖点,安全改进藏在 RFC 的删除清单里,不看细节很难感知。
误区“网站挂了 https,用户数据就是铜墙铁壁了,安全部门可以高枕无忧。”
正解HTTPS 只保护“传输链路”这一段:数据在客户端与服务器之间不被偷看和篡改。但服务器端被拖库、客户端被钓鱼或植入恶意代码、用户忽略证书警告被中间人利用等风险依然存在。HTTPS 是安全的地基,不是全部围墙。保险箱只保证运输安全,仓库本身还是要上锁。
为何常见:安全产品宣传常把“加密”等同于“安全”,容易让人产生一劳永逸的错觉。
面试题
Q1. HTTPS 相比 HTTP 增加的三大安全目标是什么?
- A.机密性、完整性、身份认证← 正确答案
- B.压缩性、缓存性、兼容性
- C.并发性、可扩展性、高可用
- D.签名性、哈希性、时间戳性
答案:A。HTTPS 通过 TLS 提供三个核心目标:机密性(数据加密成乱码)、完整性(封条防篡改)、身份认证(身份证验明正身),分别对应“锁箱子、贴封条、验护照”三件事。B、C 属于性能与功能属性,D 中哈希只是实现完整性的工具而非目标。
Q2. TLS 协议在 TCP/IP 协议栈中处于哪两层之间?
- A.HTTP 与 TCP 协议之间← 正确答案
- B.TCP 与 IP 协议之间
- C.IP 与以太网协议之间
- D.DNS 与 HTTP 协议之间
答案:A。TLS 是“加密打包车间”,夹在 HTTP 与 TCP 之间:HTTP 生成明文请求,TLS 加密后交给 TCP 传输,接收端由 TLS 解密还原。B 是 IP 层的位置,C 是数据链路层,D 的 DNS 与 HTTP 是平级应用协议,都不参与传输加密。
Q3. 证书链中服务器证书通常由谁直接签发?
- A.根 CA 机构直接签发
- B.中间 CA 机构直接签发← 正确答案
- C.浏览器厂商统一签发
- D.服务器运维人员自己签发
答案:B。现实中根 CA 不直接给海量网站签名,而是授权中间 CA 签发服务器证书,形成“根→中间→服务器”的证书链,客户端逐级向上验证。A 虽存在但少见,C 中浏览器厂商只预装根证书,D 自签名证书会触发不受信任警告。
Q4. 关于密码套件 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,下列说法正确的是?
- A.ECDHE 是其中的密钥交换算法← 正确答案
- B.AES 是其中的对称加密算法← 正确答案
- C.RSA 是其中的完整性校验算法
- D.SHA256 是其中的证书认证算法
答案:AB。套件四要素各司其职:ECDHE 做密钥交换、RSA 做证书认证、AES-128-GCM 做对称加密、SHA256 做完整性哈希。C 和 D 把 RSA 与 SHA256 的角色对调了——RSA 是“验身份证”的,SHA256 是“贴封条”的。
Q5. ECDHE 密钥交换相比 RSA 密钥交换最大的安全优势是什么?
- A.能够提供前向保密能力← 正确答案
- B.能够显著提升握手速度
- C.能够完全免除证书依赖
- D.能够增加密钥存储长度
答案:A。ECDHE 每次握手随机生成临时私钥,即使服务器长期私钥泄露,也无法解开历史会话,这就是前向保密。RSA 方式用服务器私钥加密预主密钥,私钥一泄、历史全灭。B 未必,C 仍需证书认证身份,D 与密钥长度无关。
Q6. 关于 TLS 1.3 相比 TLS 1.2 的改进,下列说法正确的有?
- A.完整握手从两次往返降为一次← 正确答案
- B.会话恢复支持 0RTT 提前数据← 正确答案
- C.废除 RSA 密钥交换并强制前向保密← 正确答案
- D.完全取消证书验证与签名环节
答案:ABC。TLS 1.3 把密钥协商并入第一趟往返(1-RTT),并用会话票据实现 0-RTT 提前数据;同时删除 RSA 密钥交换等非前向保密算法。但 D 错误——1.3 并未取消证书验证,服务器仍要在握手中呈上证书链,否则无法确认身份。
Q7. 浏览器提示“服务器证书已过期”,最合理的解读是什么?
- A.网站的身份证件过期未续期← 正确答案
- B.网站服务器必定遭遇了攻击
- C.网站的全部数据已经被泄露
- D.网站的域名已经停止解析了
答案:A。证书过期只表示该“数字身份证”超出了有效期,需要续费重新部署,不等于被攻击或数据泄露,也与域名解析无关。把过期等同于被黑,是初学者最常见的过度解读——就像护照过期未必说明持有人是骗子。
Q8. 关于“前向保密”(Forward Secrecy),下列说法正确的是?
- A.服务器长期私钥泄露不影响历史会话← 正确答案
- B.客户端私钥泄露不会影响当前会话
- C.对称加密密钥无法被任何人破解
- D.握手过程不再传输公钥和证书链
答案:A。前向保密指每个会话使用独立的临时密钥,会话结束即丢弃。即使服务器长期私钥日后泄露,攻击者只能解密“未来”使用该私钥的握手,无法解开过去截获的流量。B 混淆了范围,C 是加密强度的笼统说法,D 与事实相反——公钥和证书链仍然要传输。
Q9. 客户端验证服务器证书时通常需要检查哪些内容?
- A.证书签名是否由可信 CA 链验证← 正确答案
- B.证书当前是否在有效期限内← 正确答案
- C.证书域名是否与访问域名匹配← 正确答案
- D.检查服务器 CPU 负载是否过高
答案:ABC。证书验证三件事:沿证书链逐级验签直到信任的根 CA、检查有效期、核对 SAN 与访问域名匹配。D 是服务器性能指标,与证书验证无关——就像海关只看护照真伪和有效期,不查你行李箱的秤重记录。
Q10. TLS 1.3 的 0-RTT 会话恢复机制的主要风险是什么?
- A.容易被窃听者重放攻击利用← 正确答案
- B.会导致证书链无法完成验证
- C.会降低对称加密算法的强度
- D.会让服务器无法识别客户端
答案:A。0-RTT 的提前数据在握手完成前就到达服务器,攻击者可截获并原样重放,所以只适合 GET 等幂等请求。B 中证书链验证在首次握手已完成,C 与加密算法强度无关,D 中服务器能通过票据识别客户端——风险恰恰是“太快信任”,需要业务层做防重放设计。