课程笔记:HTTPS 原理 —— 数字签名
课程名称:计算机网络应用 核心摘要:本讲围绕 HTTPS 中的"数字签名"展开,讲解数字签名的两大作用(确认发送方身份、防篡改),梳理签名的生成流程(明文 → 哈希摘要 → 私钥加密 → 数字签名)与验签流程(公钥解密 → 对比摘要),并引出公钥分发难题与 CA 证书颁发机构的引入,为下一讲证书内容做铺垫。
一、 核心概念与原理
1.1 数字签名的定义
数字签名:发送方使用自身私钥对消息摘要加密后生成的密文,附加在原文之外一同发送,用于让接收方验证消息来源与完整性。
1.2 数字签名的两大作用
| 序号 | 作用 | 说明 |
|---|---|---|
| 1 | 防伪造(确认身份) | 由于私钥仅发送方(服务端)持有,他人无法假冒其签名,故接收方可确认消息确由声明方发出。例:浏览器访问拉勾教育,验签通过即可确认消息来自该 Web 应用。 |
| 2 | 防篡改(保证完整性) | 接收方通过对比摘要可判断原文是否被修改,确保消息原模原样到达。 |
1.3 关键术语对照
| 术语 | 英文/缩写 | 含义 |
|---|---|---|
| 明文 | Plaintext | 未加密的原始信息 |
| 哈希/散列算法 | Hash / Digest Algorithm | 将任意长数据映射为定长摘要 |
| 消息摘要 | Digest | 哈希算法输出,通常为 32 位十六进制串 |
| 私钥 | Private Key | 仅服务端持有,用于签名(加密摘要) |
| 公钥 | Public Key | 客户端持有,用于验签(解密签名) |
| 数字签名 | Digital Signature | 私钥加密摘要后的密文 |
| 证书颁发机构 | CA (Certificate Authority) | 权威第三方,签发数字证书 |
二、 技术细节与协议分析
2.1 数字签名的生成流程
明文 (Plaintext)
│
▼
[哈希/散列算法] ── 如 MD5 / SHA
│
▼
消息摘要 (Digest) ── 定长,如 32 位十六进制字符串
│
▼
[发送方私钥加密]
│
▼
数字签名 (Digital Signature)
要点:
- 摘要由原文经哈希算法生成,原文不同则摘要几乎必然不同。
- 私钥只有服务端持有,因此签名不可被他人伪造。
- 最终发送给接收方的数据包 = 明文 + 数字签名(两部分一起传输)。
2.2 数字签名的验证(验签)流程
接收方收到:{ 明文, 数字签名 }
│
├──► [用本地公钥解密 数字签名] ──► 得到摘要①(发送方计算)
│
└──► [用与服务端相同的哈希算法 对明文做摘要] ──► 得到摘要②(接收方计算)
比较摘要① 与 摘要②
│
┌────────┴────────┐
▼ ▼
两者一致 两者不一致
验签通过 数据被篡改
来源可信 / 完整 或 来源可疑
| 步骤 | 操作 | 结果 |
|---|---|---|
| 1 | 用公钥解密数字签名 | 还原出服务端生成的消息摘要① |
| 2 | 用相同的哈希算法对收到的明文重新计算 | 得到接收方本地摘要② |
| 3 | 对比摘要①与摘要② | 一致→未被篡改且来源可信;不一致→遭篡改 |
2.3 公钥分发难题(HTTPS 的核心痛点)
验签的前提是客户端必须持有服务端的公钥,但公钥本身面临两个问题:
- 公钥不能在不安全的网络中直接明文发送——否则可被中间人截获/替换。
- 如何证明公钥确实属于该服务器——即"如何证明你是你",防止黑客伪装。
解决思路:引入权威第三方 CA(证书颁发机构),由 CA 为服务器签发数字证书,证书中包含并担保服务器的公钥。
2.4 证书颁发机构 CA
- CA(Certificate Authority):全球数量不多的权威第三方机构,专门负责签发证书并以此盈利。
- CA 能够自证权威,其自身根证书已被浏览器 / 操作系统内置为受信任证书。
- 客户端(浏览器、操作系统)出厂时已预装受信任的 CA 证书列表。
- ⚠️ 安全提示:若安装盗版/篡改过的操作系统,可能将不受信任的 CA 证书伪装为受信任证书内置,导致中间人攻击风险。务必使用正版操作系统。
2.5 常见消息摘要算法
| 系列 | 全称 | 说明 |
|---|---|---|
| MD 系列 | Message Digest | MD4、MD5 等,生成定长摘要 |
| SHA 系列 | Secure Hash Algorithm(安全散列算法) | 如 SHA-1、SHA-256 |
| MAC | Message Authentication Code(消息认证码) | 带密钥的摘要算法 |
本讲聚焦 HTTPS 加密原理,上述算法仅作名称了解,不展开细节。
2.6 MD5 的安全性与加盐
- 网络上存在大量 MD5 摘要库(彩虹表),存储"原文 ↔ 摘要"对照,使 MD5 易被反查破解。
- 应对手段:加盐(Salt)——在原文中混入随机串后再做摘要,提高破解难度。
三、 实践应用与配置命令
本讲为原理讲解,无具体配置命令。验签逻辑可伪代码表示如下:
# === 服务端:生成数字签名 ===
digest_server = HASH(plaintext) # 1. 对明文做摘要
signature = ENCRYPT(digest_server, server_private_key) # 2. 私钥加密摘要
# 发送:plaintext + signature 一起发给客户端
# === 客户端:验证数字签名 ===
digest_from_sig = DECRYPT(signature, server_public_key) # 1. 公钥解密签名得摘要①
digest_local = HASH(plaintext) # 2. 用相同算法对明文做摘要得摘要②
if digest_from_sig == digest_local: # 3. 对比两个摘要
print("验签通过:来源可信、数据完整")
else:
print("验签失败:数据被篡改或来源可疑")
四、 重点与难点提示
- 重点①:数字签名的两大作用 = 防伪造(身份认证)+ 防篡改(完整性校验)。
- 重点②:签名用私钥加密摘要,验签用公钥解密签名——与常规"公钥加密、私钥解密"的方向相反,易混淆,务必区分。
- 重点③:验签的本质 = 对比两个摘要(解密得到的 vs 本地重算的)。
- 难点:公钥分发问题——验签依赖公钥,但公钥本身如何安全可信地交付给客户端,是 HTTPS 必须解决的核心问题,引出 CA 与数字证书。
- 易错点:私钥仅服务端持有;公钥可公开。切勿记反。
- 考点/面试题:
- 简述数字签名的生成与验证过程。
- 数字签名如何保证消息的完整性与不可伪造性?
- 为什么 HTTPS 需要引入 CA 证书?不能直接发送公钥吗?
- MD5 为什么不安全?如何缓解?
五、 课后疑问 / 遗留问题
- CA 如何自证权威? 根证书的信任链是如何建立的?
- 数字证书的具体结构是什么? 证书中包含哪些字段(公钥、持有者、有效期、CA 签名等)?
- 浏览器如何校验一张证书的合法性? 证书被吊销(CRL/OCSP)时如何处理?
- TLS 握手过程中,数字签名与证书分别在哪一步使用?
- 预告:下一讲将深入讲解证书颁发机构 CA 与数字证书的细节。