外观
浏览器左上角的小绿锁:它到底如何保证你的银行密码不被偷看?
在早期的明文 HTTP 时代,网络通信就像是在明信片上写信: 当你在公共 Wi-Fi 下向网站输入账号密码时,坐在咖啡馆隔壁桌的黑客只要在电脑上点一下 Wireshark 抓包,就能毫不费力地在屏幕上看到你的明文密码;途中的恶意运营商也可以随时随地在你的网页代码里注入弹窗小广告。
为了捍卫信息安全,互联网工程界在传统的 HTTP 与 TCP 传输层之间,插入了一层坚不可摧的“加密与身份防伪护盾”——传输层安全协议(TLS / HTTPS)(Transport Layer Security,传输层安全协议)。
当 HTTP 穿上这件 TLS 铠甲后,就诞生了我们今天随处可见的 HTTPS(默认端口 443)。
学完本课后,你将能够:
- 辨析 信息安全的三大金科玉律(CIA 三要素:Confidentiality 机密性、Integrity 完整性、Availability 可用性,依据 NIST FIPS 199 / ISO 27000 标准)。
- 解释 为什么 HTTPS 必须采用“混合体制”:用 ECDHE 密钥协商推导共享秘密,用数字签名与 CA 证书认证身份,用对称加密高速传输业务数据。
- 推演 中间人攻击(MITM)如何被 CA 数字证书 与数字签名 彻底化解。
- 画出 TLS 1.3 的 1-RTT 极速握手时序,并说出相比陈旧的 TLS 1.2 它做出的关键优化。
1. 密码学基础兵器库:三大核心构件
HTTPS 之所以固若金汤,是因为它巧妙地熔铸了现代密码学的三大发明:
1. 对称加密(Symmetric Encryption)
- 特点:加密和解密使用同一把密钥(Secret Key)。
- 代表算法:AES-GCM、ChaCha20-Poly1305。
- 优点:计算速度极快,CPU 硬件原生支持,吞吐量可达每秒数吉比特。
- 缺点:“密钥配送难题”——在素未谋面的互联网两端,通信开始前双方怎么把这把绝密的密钥安全送给对方?如果直接在网线上传递密钥,黑客一旦截获,后续全盘皆输!
2. 非对称密码学与密钥协商(Asymmetric Cryptography & Key Agreement)
很多初学者容易将“非对称加密”与“密钥协商”混为一谈,我们需要严谨区分两者的不同分工:
- 非对称加密与数字签名(如 RSA、ECDSA):
- 钥匙成双成对——公钥(Public Key) 所有人皆可公开查阅;私钥(Private Key) 仅有持有者自己一人死守保密。
- 用公钥加密的内容,只有对应的私钥才能解开;用私钥签名的内容,所有人都可以用公钥验证真伪。
- 在 TLS 1.3 中的核心定位:已不再用于协商密钥,而是专门用于服务器身份认证与数字签名(验证服务器确实持有证书对应的私钥)。
- 密钥协商 / 交换协议(Key Agreement,如 ECDHE):
- ECDHE(基于椭圆曲线的临时 Diffie-Hellman) 本质上是密钥协商机制,而非数据加密算法!
- 通信双方各自在本地生成临时公私钥对,并在网线上交换公开的
key_share参数。 - 双方凭借对方的公开参数与自己的私钥,通过椭圆曲线数学推导在本地独立算出完全相同的共享秘密。
- 核心优势:即使黑客截获了网线上的所有公开参数,甚至日后盗取了服务器长期私钥,在数学上也绝不可能逆推出会话密钥(完美前向安全性,Forward Secrecy)。
3. 单向散列与数字签名(Hash & Digital Signature)
- 散列函数(Hash):如 SHA-256,能将任意长度的数据计算出固定长度的“指纹”。单向不可逆、微小的改动会导致指纹雪崩巨变。
- 数字签名:发送方用自己的私钥对数据的散列指纹进行加密签名。接收方用发送方的公钥解密并比对本地算出的指纹。
- 若一致:100% 证明数据在路上没有被任何黑客篡改(完整性),且确凿出自持有私钥的本人之手,无法抵赖(真实性)!
2. 混合加密体制:鱼和熊掌兼得的精妙设计
如果全程使用非对称加密,全球所有的服务器 CPU 都会因为算数学题而瞬间爆炸;如果全程使用对称加密,又无法安全协商密钥。
HTTPS 的设计哲学堪称神来之笔——“混合加密(Hybrid Cryptosystem)”:
- 握手建约阶段:双方利用 ECDHE 算法在不可信网线上安全协商出会话密钥材料,同时服务端出示 CA 证书并通过私钥生成数字签名完成身份验真。在此阶段中,TLS 1.3 创新性地采用分层密钥派生:
- 握手流量密钥(Handshake Traffic Keys):密钥协商初步完成后立即派生,专门用于加密保护握手后续的证书与签名信息,避免明文泄露;
- 应用数据流量密钥(Application Traffic Keys):双方互相完成 Finished 完整性确认后最终派生,移交后续业务。
- 数据传输阶段:一旦握手圆满闭环,双方立即启用应用数据流量密钥,换用轻盈如燕的 AES-GCM 或 ChaCha20 对称算法对实际的 HTTP 网页请求与响应进行高速加解密!
3. 中间人危机与 CA 数字证书信任链
很多初学者会想:“既然有了非对称公钥,客户端直接问服务器要公钥,然后把对称密钥用公钥加密发回去不就万无一失了吗?”
大错特错!这里存在一个致命的死穴——中间人攻击(Man-in-the-Middle Attack, MITM)!
恐怖的中间人劫持推演:
- 客户端向服务器索取公钥。
- 蹲在路由器上的黑客半路拦截了服务器的真实公钥,藏进自己的口袋;
- 黑客顺手把自己伪造的假公钥回复给了客户端;
- 客户端毫不知情,拿假公钥加密了自己的对称密钥发出去;
- 黑客拦截后用自己的假私钥轻松解密,不仅拿到了对称密钥,还能肆意篡改里面的银行账户,再用刚才扣下的服务器真实公钥重新加密送给服务器!
CA 登场:谁来给公钥发身份证?
中间人之所以能得逞,根本原因在于:客户端无法证明“手里拿到的公钥到底是不是真正的华为官方公钥”!
这就必须引入全世界共同信任的第三方公正权威机构——CA 数字证书 机构(Certificate Authority, CA):
- 华为在上线网站前,把自己的域名和真实公钥提交给全球权威 CA(如 DigiCert、Let's Encrypt)。
- CA 审核通过后,用 CA 自己的绝密私钥 对华为的域名、公钥以及有效期进行计算,生成一份盖着防伪戳印的数字证书(Digital Certificate)。
- 全球所有主流操作系统(Windows、macOS、Linux、iOS、Android)在出厂安装时,已经在系统根目录中预装了这些顶级权威 CA 机构的根证书与公钥。
- 当客户端连上网站收到证书时,直接调用操作系统内自带的 CA 公钥对证书上的签名进行验真。
- 黑客若想作恶:他无法伪造证书,因为他根本拿不到权威 CA 的私钥;如果他用自己的私钥瞎签,客户端操作系统会立即弹出一连串鲜红刺眼的惊天大告警:“您的连接不是私密连接!证书无效!”
4. TLS 1.3 极速握手全推演
传统的 TLS 1.2 在 TCP 三次握手之后,还需要走整整 2 个 RTT 的复杂四步往返。
为了实现极致的网页秒开体验,IETF 在 2018 年推出了划时代的 TLS 1.3:不仅砍掉了所有不安全的过时加密算法(彻底淘汰 RSA 密钥交换),更将握手时延腰斩为仅仅 1 个 RTT!
第一步:Client Hello(携带密钥前置推导参数)
- 客户端向服务端发送
Client Hello(明文)。 - 报文中不仅列出了自己支持的 TLS 版本和密码套件,而且前置预测并执行 ECDHE 密钥协商,附带上了客户端生成的临时公钥参数(
key_share扩展)与随机数! - 把传统 TLS 1.2 中第二步才做的事情,在第一步一股脑全塞了进去。
第二步:Server Hello 与服务器加密身份证明
- 服务端收到后,选定密码套件,生成服务端的临时公钥参数(
key_share)。 - 双方凭借对方的
key_share公开参数与自己的临时私钥,通过 ECDHE 算法在本地独立推导出握手流量密钥(Handshake Traffic Keys)! - 服务端紧接着发送如下关键报文:
Server Hello(明文):回送服务端选定的密码套件与服务端key_share参数;- 从此处起,后续所有握手报文全被握手流量密钥加密(花括号表示密文保护):
{EncryptedExtensions}:加密扩展参数;{Certificate}:服务器向客户端出示 CA 数字证书链;{CertificateVerify}(核心身份认证签名):服务端使用证书对应的真实私钥,对截至当前的所有握手消息的哈希转录值进行数字签名!这是证明“我真正拥有这张证书对应私钥”的绝对铁证,彻底粉碎了中间人冒充服务器的企图;{Finished}(服务端握手结束标记):服务端计算全量握手记录的 HMAC 摘要,向客户端证明服务端侧密钥已就绪且握手无篡改。
第三步:客户端 Finished 与应用数据直接起飞
- 客户端收到
Server Hello,将服务端的key_share与自己的私钥结合,同样推导出完全相同的握手流量密钥; - 客户端解密并校验服务器的 CA 证书合法,并使用证书公钥校验
CertificateVerify签名有效; - 客户端向服务端回送加密的
{Finished}报文,证明客户端侧握手数据一致无误; - 双方立即派生出最终的应用数据流量密钥(Application Traffic Keys);
- 全流程在 1 个往返时延(1-RTT)内完整闭环!客户端紧接着可以直接倾泻使用应用数据流量密钥加密的
HTTP GET等真实业务数据(甚至在开启 0-RTT PSK 会话恢复时实现首包直接附带数据)。
5. 课后核心测验
6. 下一步学习
从物理层的电光脉冲,到数据链路层的 MAC 帧,到网络层的 IP 路由,到传输层的 TCP 与 UDP,再到应用层的 DNS、DHCP、HTTP 与 TLS 加密——
现在,你手中的七层拼图已经严丝合缝、完整合璧!
是时候将你所学的一切,串联成计算机网络世界中最恢弘、最壮阔的史诗乐章了!
下一课,让我们共同迎接阶段 5 的巅峰收官之作:第 31 课 · 全栈串讲:从输入 URL 到页面呈现经历了什么?!