一、基础定义
1. HTTP
- HyperText Transfer Protocol 超文本传输协议
- 运行在 TCP 之上 ,默认端口 80
- 明文传输,数据不加密
- 无状态、无连接(HTTP/1.1 默认为长连接)
2. HTTPS
- HTTP + SSL/TLS
- 安全版 HTTP,默认端口 443
- 在 应用层与传输层之间加了一层 TLS/SSL 加密层
- 提供:加密 + 身份认证 + 数据完整性校验
二、HTTP 与 HTTPS 核心区别(必背)
表格
| 对比项 | HTTP | HTTPS |
|---|---|---|
| 端口 | 80 | 443 |
| 加密 | 明文传输 | 加密传输 |
| 安全性 | 低,易窃听、劫持、篡改 | 高,防窃听、防篡改、防冒充 |
| 性能 | 开销小,速度快 | 有加密 / 握手开销,稍慢 |
| 证书 | 不需要 | 需要 CA 颁发的数字证书 |
| SEO / 浏览器表现 | 显示 "不安全",不利于 SEO | 显示小锁,搜索引擎优先 |
| 协议层 | 直接基于 TCP | 基于 TCP + TLS/SSL |
三、HTTPS 为什么安全?三大核心保障
- 加密性:数据传输加密,第三方无法窃听
- 完整性:防止数据被篡改
- 身份认证:确认服务器真实身份,防中间人攻击
四、加密原理(面试核心)
HTTPS 采用 对称加密 + 非对称加密 + 数字证书 结合的方案。
1. 对称加密(AES)
- 加密解密用同一把密钥
- 速度快、效率高
- 问题:密钥传输不安全
2. 非对称加密(RSA/ECC)
- 一对密钥:公钥 + 私钥
- 公钥公开,任何人可用
- 私钥自己持有
- 公钥加密 → 只能私钥解密
- 私钥签名 → 公钥验签
- 问题:加解密速度慢
3. HTTPS 混合加密方案(最经典)
- 用非对称加密 安全传输 对称密钥
- 后续通信全部用对称加密 → 兼顾安全性 + 性能
五、数字证书与 CA(防止公钥被掉包)
1. 问题
单纯非对称加密无法防止中间人攻击:中间人把自己的公钥发给客户端 → 窃听所有数据。
2. 解决方案:数字证书
- 证书由 CA(数字证书认证机构) 颁发
- 证书包含:
- 服务器公钥
- 域名、公司信息
- 有效期
- CA 签名
3. 证书验证流程
- 浏览器 / 系统内置信任的 CA 根证书
- 拿到服务器证书后,用根证书公钥验证 CA 签名
- 签名合法 → 确认公钥真实有效
- 不合法 → 浏览器报 "证书不安全"
六、HTTPS 完整握手流程(TLS 1.2 经典版)
1. 客户端 → 服务器(Client Hello)
- 支持的 TLS 版本
- 支持的加密套件(Cipher Suite)
- 随机数 Client Random
2. 服务器 → 客户端(Server Hello)
- 确定 TLS 版本
- 确定加密套件
- 随机数 Server Random
- 发送服务器数字证书
3. 客户端验证证书
- 验证 CA 签名、域名、有效期
- 验证通过,生成 Pre-Master Secret
- 用服务器公钥加密 Pre-Master Secret 发给服务器
4. 双方生成会话密钥
客户端、服务器分别用:
- Client Random
- Server Random
- Pre-Master Secret
通过相同算法生成 Master Secret 最终得到对称加密密钥(Session Key)
5. 加密通信开始
- 之后所有 HTTP 数据都用对称密钥加密传输
七、TLS 1.3 优化(现代 HTTPS)
- 握手从 2-RTT 降到 0-RTT / 1-RTT
- 速度更快、安全性更强
- 删除弱加密算法
- 握手更简洁
八、HTTP 明文传输的风险
- 窃听:账号密码、隐私数据被抓包获取
- 篡改:网页被插入广告、恶意代码
- 冒充:钓鱼网站伪装成正规网站
九、HTTPS 工作层次
plaintext
应用层:HTTP
↓
安全层:TLS/SSL
↓
传输层:TCP
十、常见面试题(标准答案)
1. HTTPS 是如何加密的?
采用混合加密:
- 握手阶段用非对称加密 安全交换对称密钥
- 传输阶段用对称加密 传输实际数据
- 用数字证书 保证公钥可信,防中间人攻击
2. 为什么不直接只用非对称加密?
- 非对称加密速度慢、开销大
- 对称加密速度快,适合大量数据传输
3. 数字证书有什么用?
- 证明服务器公钥合法
- 防止公钥被中间人替换
- 实现服务器身份认证
4. HTTPS 完全绝对安全吗?
- 正常情况下非常安全
- 但如果:
- 证书被伪造
- 根证书被安装恶意证书
- 密钥泄露仍可能被破解。
5. HTTP/2、HTTP/3 与 HTTPS 的关系
- 主流浏览器 HTTP/2 强制要求 HTTPS
- HTTP/3 基于 QUIC(UDP),本身加密→ 现代互联网基本都是 HTTPS 优先
6. HTTPS 慢在哪里?如何优化?
慢在:
- TLS 握手耗时(1~2 RTT)
- 加解密开销
优化:
- 使用 TLS 1.3
- 开启 Session Ticket / 会话复用
- 使用 HSTS
- 服务器硬件优化(CPU 支持 AES 指令)
十一、实战:Nginx 配置 HTTPS 极简示例
nginx
server {
listen 80;
server_name example.com;
# 强制跳转 HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name example.com;
# 证书路径
ssl_certificate /etc/nginx/cert/example.com.pem;
ssl_certificate_key /etc/nginx/cert/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5;
}
十二、总结(极简背诵版)
- HTTP = 明文 80 端口 ,不安全;HTTPS = HTTP+TLS 443 端口,加密安全。
- HTTPS 用 对称加密 + 非对称加密 + 数字证书 实现安全通信。
- 非对称加密只用来传密钥,对称加密负责实际数据传输。
- 证书由 CA 签发,用于认证服务器身份、防止中间人攻击。
- HTTPS 有握手开销,但可通过 TLS1.3、会话复用优化。
需要我继续整理 「TCP 三次握手 / 四次挥手深度图文」 或者 「计算机网络全套面试 50 题」 吗?
HTTPS加密机制
HTTPS 加密机制 超详细笔记
(纯加密原理 + 混合加密流程 + 证书防中间人 + 密钥生成逻辑)
一、一句话总纲
HTTPS 不是一种新加密算法,而是一套组合方案:
非对称加密(RSA/ECC)负责安全交换密钥 对称加密(AES)负责实际传输数据 数字证书 + 签名 防止公钥被掉包
二、三种基础加密(必须先懂)
1. 对称加密(通信主体)
- 加密、解密用同一把密钥
- 代表:AES
- 优点:极快、适合大量数据
- 缺点:密钥不能在网络明文传,否则直接泄露
2. 非对称加密(密钥交换)
- 一对密钥:
- 公钥:公开给所有人
- 私钥:服务器自己保密
- 规则:
- 公钥加密 → 只能私钥解密
- 私钥签名 → 只能公钥验签
- 代表:RSA、ECC
- 优点:安全,不怕公钥公开
- 缺点:极慢,不能用来传大文件
3. 摘要算法(完整性)
- 作用:防篡改
- 代表:SHA256
- 对数据做哈希,传输时一起发;接收方重新计算比对
三、HTTPS 为什么用「混合加密」?
只用对称:→ 密钥没法安全传给对方
只用非对称:→ 速度太慢,页面卡成 PPT
最终方案:
- 先用非对称加密,把对称密钥安全传给服务器
- 之后全程用对称加密传输 HTTP 内容
四、完整加密流程(TLS 1.2 经典版)
阶段 1:客户端发起(ClientHello)
- 客户端生成:Client Random(随机数 C)
- 发给服务器:
- 支持的 TLS 版本
- 支持的加密套件(如
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) - 随机数 C
阶段 2:服务器回应(ServerHello)
- 服务器生成:Server Random(随机数 S)
- 确定加密套件
- 发送:
- 随机数 S
- 服务器数字证书(内含:公钥 + 域名 + CA 签名)
阶段 3:客户端验证证书(防中间人核心)
- 用操作系统 / 浏览器内置的 CA 根证书公钥
- 验证服务器证书上的CA 签名
- 验证通过 → 确认服务器公钥是真的
- 不通过 → 浏览器红警:不安全
阶段 4:客户端生成「预主密钥」
- 客户端生成 Pre-Master Secret(PMS)
- 用服务器公钥加密 PMS 发给服务器
- 只有服务器私钥能解开
阶段 5:双方生成「会话密钥」(真正加密密钥)
客户端 和 服务器 各自用三样东西:
- Client Random(C)
- Server Random(S)
- Pre-Master Secret(PMS)
通过标准密钥派生算法,算出:
- Master Secret
- 最终生成一组对称会话密钥 :
- 客户端加密密钥
- 服务端加密密钥
- 消息校验密钥
之后所有 HTTP 数据都用 AES 对称加密
阶段 6:加密通信
- 客户端发送「加密握手完成」
- 服务器发送「加密握手完成」
- 开始真正加密传输网页数据
五、密钥关系图(极简)
plaintext
ClientRandom + ServerRandom + PreMasterSecret
↓ (双方独立计算)
MasterSecret
↓
会话密钥(对称)
↓
AES 加密所有数据
六、为什么要证书?(防中间人攻击)
如果没有证书:
- 中间人拦截服务器公钥
- 把自己的公钥发给客户端
- 客户端用假公钥加密密钥
- 中间人解密 → 窃听 / 篡改 → 再加密发给服务器→ 完全透明劫持
证书解决:
- 证书由 CA 签名
- 浏览器只信任内置根证书签发的证书
- 中间人没有合法 CA 签名 → 证书验证失败
七、TLS 1.2 与 1.3 加密差异(面试高频)
TLS 1.2
- 完整握手 2 个 RTT
- 密钥交换:RSA / ECDHE
- 支持老算法
TLS 1.3
- 握手 0-RTT / 1-RTT ,更快
- 删掉弱加密算法
- 加密更早,更安全
- 密钥派生更简单高效
八、面试高频问答(标准答案)
1. HTTPS 用了哪些加密?
- 非对称加密:RSA/ECDHE → 交换密钥
- 对称加密:AES → 传输数据
- 摘要算法:SHA256 → 防篡改
- 数字签名:证书防中间人
2. 对称密钥是网络上传输的吗?
不是明文传。是:
- 客户端生成 PMS
- 用服务器公钥加密后传输
- 双方再本地计算出最终对称密钥
3. HTTPS 能被抓包破解吗?
- 正常不能
- 如果你手动安装了中间人证书 (如 Charles/Fiddler)浏览器认为它是合法 CA → 可以解密→ 这叫中间人代理,不是 HTTPS 漏洞
4. 公钥存在哪里?
在服务器数字证书里,随第一次握手发给客户端。
5. HTTPS 加密的是哪部分?
从 TLS 握手完成后:
- HTTP 头 + HTTP 体 全部加密
- 只有IP、端口、域名(SNI) 可能暴露(SNI 加密可解决)
九、极简背诵版
- HTTPS = 混合加密
- 非对称加密只用来传密钥
- 对称加密真正传数据
- 证书保证公钥不被掉包
- 三个随机数算出最终会话密钥
- 全程 AES 加密,安全且快