公开密钥加密和数字签名再漂亮,都有一个命门:你手里的公钥,真是对方的吗?窃听者玩"掉包计"——半路把老墨的公钥换成自己的假公钥,小波用假公钥加密的密码,窃听者用自己的私钥轻松解开。加密本身毫无破绽,输在"公钥是谁的"。解法是请一位大家都信的第三方——认证机构(CA):CA 核实"这把公钥确实属于老墨"后,用自己的私钥对"身份 + 公钥"整体做数字签名(7.6 刚学的手艺),打包成数字证书。验证时用 CA 的公钥验章——而 CA 的公钥不用网上传,出厂就预装在你的操作系统和浏览器里。浏览器敢对 https 网站显示小锁,就是因为这条"信任链"走通了:根 CA 背书中间 CA、中间 CA 背书网站,一级签一级,最后落到你信的预装根上。
这条线其实从第一天就埋下了:7.1 讲数字证书时留了悬念"CA 凭什么能盖信任章";7.4 说"公钥不怕泄露、就怕掉包";7.6 两次提醒"验签通过 ≠ 发信人可信,公钥得先是真的"——本节把所有伏笔一次收拢。
技术上本节几乎没有新零件:证书 = 7.6 的数字签名 + 一份"身份声明",验证 = 7.6 的两路指纹比对,只是签名的主角换成了 CA。真正的新东西只有两个:信任链(根 CA 预装、逐级背书)和吊销(钥匙丢了怎么办)。至此 7.1~7.7 七节连成完整闭环:认证 → 加密 → 两种密钥 → 两个方向 → 签名 → 给钥匙发身份证。
一、掉包计:没有公证人的世界(第一张配图)
先看公钥裸奔会发生什么:
- 小波向"老墨"索要公钥;
- 窃听者半路截下老墨的真公钥,把自己伪造的公钥冒充老墨的发给小波;
- 小波信以为真,用这把假公钥加密了银行密码发出去;
- 窃听者截获密文,用自己的私钥(和假公钥正好配对)轻松解开。
注意这个攻击的可怕之处:加密算法、密钥长度、数学难度全都无可挑剔,破绽只有一个——"这把公钥是谁的"没有任何人担保。7.5 说"ECC-256 强度 ≈ RSA-3072"再漂亮,锁在假挂锁上也白搭。
这个问题叫中间人攻击,是公开密钥体系的死穴,也是 7.1 埋的"信任第三方"悬念的正题。
二、解法思路:请一位大家都信的公证人
思路朴素得像现实社会:不认识卖方,就找认识的中间人担保。
- 认证机构(CA):公认的可信第三方,职责就是核实身份后给公钥"作证";
- 老墨先把公钥和身份材料交给 CA,CA 核实"这把公钥确实属于老墨";
- 核实通过后,CA 用自己的私钥对"老墨的身份 + 老墨的公钥 + 有效期等"整体做数字签名——7.6 的手艺原样上岗;
- 这份"身份 + 公钥 + CA 签名"的打包件,就是数字证书。
一句话:证书不是加密工具,是一份"公钥的公证书"——它本身不保密任何东西,作用是让人敢信"这把公钥是真的"。
三、证书里装了什么
打开任何一张 https 网站证书,里面的字段大同小异:
- 主体身份:域名(如 www.example.com)、组织名、所在地——证书担保的对象;
- 主体的公钥:正主的钥匙,连同算法(RSA 或 ECDSA);
- 有效期:起止日期,过了期浏览器照样报警;
- 序列号、签发者(CA)名称:每张证书的身份证号;
- CA 的数字签名:对以上所有内容算哈希、再用 CA 私钥盖章——证书防篡改的根基。
重点体会:证书把"公钥"和"身份"焊死在一起——签名盖的是两者的组合,改公钥或改身份,指纹就变,验章必败。掉包计从此玩不下去。
四、验证流程与信任链(第二张配图)
小波拿到证书后,跑一遍 7.6 的验签流程:
- 对证书的"身份 + 公钥 + 有效期"部分算哈希指纹(路A);
- 用 CA 的公钥解开证书末尾的 CA 签名,取出 CA 当年盖的指纹(路B);
- 两路比对——相等 = 这份证书确由这家 CA 签发、内容一字未改。
但立刻冒出新问题:CA 的公钥又是哪来的?它不会也被掉包吗?
答案是这一节最漂亮的设计——不给,预装:根 CA 的公钥(做成根证书)在操作系统和浏览器出厂时就塞进你的"受信任的根证书存储区",根本不走网络,掉包无从谈起。
现实中证书常常是链条式的:根 CA 平时离线锁保险柜,由它签发中间 CA,中间 CA 再给网站签发证书——浏览器从"网站证书"一路验上去,直到踩到预装的根为止,这就是信任链。任何一环验不过,浏览器就弹出红色警告。
五、钥匙丢了怎么办:吊销机制
证书的有效期通常一年,但私钥可能中途泄露。于是证书还有"作废"机制:
- CA 定期发布吊销列表(CRL)或提供在线状态查询(OCSP);
- 浏览器验签之外还会查状态:被吊销的证书即使签名合法、未过期,也照样拒绝;
- 这就是"身份证挂失"——号码没变,效力没了。
顺带理解两个日常现象:网站换了新证书(续期)、或某 CA 出事故被浏览器集体拉黑(信任链断根),本质上都是这套机制在运转。
六、动手 Demo(Demo95)
亲眼看两样东西:你电脑里预装的"根 CA"们、以及一张真网站的证书链。
第一步:看看系统里预装了多少根证书
按 Win 键 → 输入 powershell → 回车,粘贴运行:
(Get-ChildItem Cert:\LocalMachine\Root).Count
Get-ChildItem Cert:\LocalMachine\Root | Select-Object -First 5 -ExpandProperty Subject
看什么算成功:先打印一个一百上下的数字(你的 Windows 出厂预装的根 CA 数量),再列出几家 CA 的名字——它们就是全互联网信任链的起点,从来不走网络,所以没法被掉包。
第二步:沿着真网站的信任链爬一遍
打开任意 https 网站 → 地址栏锁图标 → 「连接安全」→「证书有效」:
- 常规页:颁发给(网站域名)、颁发者(CA 名字)、有效期;
- 详细信息页:公钥算法(RSA 还是 ECDSA——7.5 的两位主角);
- 证书路径(或"层次结构"):能看到"根 CA → 中间 CA → 网站"的三级链条——第二张配图的信任链,就活在这个小窗口里。
第三步(可选):看一次"验不过"长什么样
在浏览器地址栏输入一个自签名或过期的 https 站点(搜索"self-signed certificate test"能找到教学用站点),观察浏览器的红色警告——那就是"信任链断掉"的现场。
30 秒实验:Get-ChildItem Cert:\LocalMachine\Root | Where-Object Subject -match 'CN=' | Measure-Object 换个关键词数一数,体会"预装信任"是整个体系的地基——预装的根被攻破,全链崩塌,所以操作系统更新才会郑重其事地更新根证书库。
七、常见误区
- "数字证书是用来加密数据的":不是。证书是一份公钥的公证书,只证明"这把公钥属于这个身份";加密靠证书里的公钥去干,证书本身不加密任何东西。
- "CA 能看到我的通信内容":不能。CA 只在发证时担保身份,之后的通信走"服务器公钥加密 + 会话密钥",CA 全程不在场——公证人不拆信。
- "浏览器显示小锁 = 网站是正经网站":小锁只证明"证书合法、域名匹配、链路加密"——骗子网站也能买到合法证书。锁保证"你看的是这个域名的真服务器",不保证"这个域名是好人"。
- "证书过期无所谓,反正加密还在":过期证书浏览器会硬警告——有效期是担保的期限,过了期 CA 就不再作保,"加密还在"和"身份还有人担保"是两回事。
- "根证书越多越危险 / 随便装一个没关系":每装一个根,等于请进一位"你无条件信任的公证人"——预装根被攻破,全链崩塌。来历不明的根证书绝不能随手导入。
八、动手自测
点开自测(先自己答,再展开对答案)
1. 掉包计是怎么骗过小波的?加密算法本身有毛病吗? 2. 数字证书里装了什么?靠什么保证这些内容不被篡改? 3. 验证证书的三个步骤是什么?CA 的公钥从哪来、为什么不担心它被掉包? 4. 什么是信任链?为什么根 CA 平时要离线锁起来? 5. 私钥泄露后,已签发的证书怎么作废? 6. "浏览器显示小锁"能担保什么、不能担保什么?答案
1. 半路截下老墨的真公钥、把自己的假公钥冒充老墨的发过去;小波用假公钥加密,窃听者用配对的私钥解密。**加密算法毫无毛病**,输在"公钥是谁的"无人担保——中间人攻击。 2. 主体身份、主体公钥、有效期、序列号、签发者、**CA 对以上全部内容的数字签名**;防篡改靠签名:改任何一项,哈希指纹就变,验章必败。 3. ①对证书内容算指纹;②用 CA 公钥解签名取 CA 盖的指纹;③两路比对。CA 的公钥**出厂预装**在操作系统/浏览器的受信任根存储区,不走网络,无从掉包。 4. 根 CA 背书中间 CA、中间 CA 背书网站,一级签一级,终点落在预装的根上。根 CA 离线是因为它是**全链信任的源头**——它的私钥一旦泄露,所有下游证书的担保全部作废。 5. 靠**吊销**:CA 发布吊销列表(CRL)或提供在线查询(OCSP),浏览器验签之外查状态,被吊销的即使签名合法、未过期也拒绝。 6. 能担保:证书合法、域名匹配、链路加密(你看的是该域名的真服务器)。不能担保:**网站本身是不是好人**——骗子也能买到合法证书。九、下一步学什么
- ☑ 7.8(按教材顺序)
相关笔记
- 确保网络购物的安全性(SSL、混合加密) —— 第七章总装上岗:握手七步里,本节的证书与信任链是第一步关卡
- 识别数据的创建者(数字签名) —— 证书的全部技术底座:CA 用它给"身份+公钥"盖信任章,验证就是原样的两路指纹比对
- 使用两个密钥管理数据(公开密钥加密方式) —— "公钥不怕泄露、就怕掉包"在本节正式开药方
- 限制访问用户和设备的方法(身份认证) —— 当年预告的"数字证书"与"信任第三方"悬念在此揭晓全貌
- 通过密钥加密的数据确认加密者身份(私钥、RSA加密、椭圆曲线加密) —— Demo95 证书详细信息里的 RSA/ECDSA,就是本节的两位主角
- 浏览Web网站时执行的处理(DNS的域名解析、HTTP请求与HTTP响应) —— HTTPS 握手第一步"递证书、验信任链"由此得以完整讲清