🌐 第七章 网络安全技术
📄 一句话概括

公开密钥加密和数字签名再漂亮,都有一个命门:你手里的公钥,真是对方的吗?窃听者玩"掉包计"——半路把老墨的公钥换成自己的假公钥,小波用假公钥加密的密码,窃听者用自己的私钥轻松解开。加密本身毫无破绽,输在"公钥是谁的"。解法是请一位大家都信的第三方——认证机构(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 七节连成完整闭环:认证 → 加密 → 两种密钥 → 两个方向 → 签名 → 给钥匙发身份证。

一、掉包计:没有公证人的世界(第一张配图)

先看公钥裸奔会发生什么:

  1. 小波向"老墨"索要公钥;
  2. 窃听者半路截下老墨的真公钥,把自己伪造的公钥冒充老墨的发给小波;
  3. 小波信以为真,用这把假公钥加密了银行密码发出去;
  4. 窃听者截获密文,用自己的私钥(和假公钥正好配对)轻松解开。

注意这个攻击的可怕之处:加密算法、密钥长度、数学难度全都无可挑剔,破绽只有一个——"这把公钥是谁的"没有任何人担保。7.5 说"ECC-256 强度 ≈ RSA-3072"再漂亮,锁在假挂锁上也白搭。

这个问题叫中间人攻击,是公开密钥体系的死穴,也是 7.1 埋的"信任第三方"悬念的正题。

二、解法思路:请一位大家都信的公证人

思路朴素得像现实社会:不认识卖方,就找认识的中间人担保。

一句话:证书不是加密工具,是一份"公钥的公证书"——它本身不保密任何东西,作用是让人敢信"这把公钥是真的"。

三、证书里装了什么

打开任何一张 https 网站证书,里面的字段大同小异:

重点体会:证书把"公钥"和"身份"焊死在一起——签名盖的是两者的组合,改公钥或改身份,指纹就变,验章必败。掉包计从此玩不下去。

四、验证流程与信任链(第二张配图)

小波拿到证书后,跑一遍 7.6 的验签流程:

  1. 对证书的"身份 + 公钥 + 有效期"部分算哈希指纹(路A);
  2. 用 CA 的公钥解开证书末尾的 CA 签名,取出 CA 当年盖的指纹(路B);
  3. 两路比对——相等 = 这份证书确由这家 CA 签发、内容一字未改。

但立刻冒出新问题:CA 的公钥又是哪来的?它不会也被掉包吗?

答案是这一节最漂亮的设计——不给,预装:根 CA 的公钥(做成根证书)在操作系统和浏览器出厂时就塞进你的"受信任的根证书存储区",根本不走网络,掉包无从谈起。

现实中证书常常是链条式的:根 CA 平时离线锁保险柜,由它签发中间 CA,中间 CA 再给网站签发证书——浏览器从"网站证书"一路验上去,直到踩到预装的根为止,这就是信任链。任何一环验不过,浏览器就弹出红色警告。

五、钥匙丢了怎么办:吊销机制

证书的有效期通常一年,但私钥可能中途泄露。于是证书还有"作废"机制:

顺带理解两个日常现象:网站换了新证书(续期)、或某 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 网站 → 地址栏锁图标 → 「连接安全」→「证书有效」:

第三步(可选):看一次"验不过"长什么样

在浏览器地址栏输入一个自签名或过期的 https 站点(搜索"self-signed certificate test"能找到教学用站点),观察浏览器的红色警告——那就是"信任链断掉"的现场。

30 秒实验:Get-ChildItem Cert:\LocalMachine\Root | Where-Object Subject -match 'CN=' | Measure-Object 换个关键词数一数,体会"预装信任"是整个体系的地基——预装的根被攻破,全链崩塌,所以操作系统更新才会郑重其事地更新根证书库。

七、常见误区

八、动手自测

点开自测(先自己答,再展开对答案) 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. 能担保:证书合法、域名匹配、链路加密(你看的是该域名的真服务器)。不能担保:**网站本身是不是好人**——骗子也能买到合法证书。

九、下一步学什么

相关笔记