HTTP 与 HTTPS

一、基础定义

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 为什么安全?三大核心保障

  1. 加密性:数据传输加密,第三方无法窃听
  2. 完整性:防止数据被篡改
  3. 身份认证:确认服务器真实身份,防中间人攻击

四、加密原理(面试核心)

HTTPS 采用 对称加密 + 非对称加密 + 数字证书 结合的方案。

1. 对称加密(AES)

  • 加密解密用同一把密钥
  • 速度快、效率高
  • 问题:密钥传输不安全

2. 非对称加密(RSA/ECC)

  • 一对密钥:公钥 + 私钥
    • 公钥公开,任何人可用
    • 私钥自己持有
  • 公钥加密 → 只能私钥解密
  • 私钥签名 → 公钥验签
  • 问题:加解密速度慢

3. HTTPS 混合加密方案(最经典)

  1. 用非对称加密 安全传输 对称密钥
  2. 后续通信全部用对称加密 → 兼顾安全性 + 性能

五、数字证书与 CA(防止公钥被掉包)

1. 问题

单纯非对称加密无法防止中间人攻击:中间人把自己的公钥发给客户端 → 窃听所有数据。

2. 解决方案:数字证书

  • 证书由 CA(数字证书认证机构) 颁发
  • 证书包含:
    • 服务器公钥
    • 域名、公司信息
    • 有效期
    • CA 签名

3. 证书验证流程

  1. 浏览器 / 系统内置信任的 CA 根证书
  2. 拿到服务器证书后,用根证书公钥验证 CA 签名
  3. 签名合法 → 确认公钥真实有效
  4. 不合法 → 浏览器报 "证书不安全"

六、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 明文传输的风险

  1. 窃听:账号密码、隐私数据被抓包获取
  2. 篡改:网页被插入广告、恶意代码
  3. 冒充:钓鱼网站伪装成正规网站

九、HTTPS 工作层次

plaintext

复制代码
应用层:HTTP
↓
安全层:TLS/SSL
↓
传输层:TCP

十、常见面试题(标准答案)

1. HTTPS 是如何加密的?

采用混合加密

  1. 握手阶段用非对称加密 安全交换对称密钥
  2. 传输阶段用对称加密 传输实际数据
  3. 数字证书 保证公钥可信,防中间人攻击

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;
}

十二、总结(极简背诵版)

  1. HTTP = 明文 80 端口 ,不安全;HTTPS = HTTP+TLS 443 端口,加密安全。
  2. HTTPS 用 对称加密 + 非对称加密 + 数字证书 实现安全通信。
  3. 非对称加密只用来传密钥,对称加密负责实际数据传输
  4. 证书由 CA 签发,用于认证服务器身份、防止中间人攻击
  5. HTTPS 有握手开销,但可通过 TLS1.3、会话复用优化。

需要我继续整理 「TCP 三次握手 / 四次挥手深度图文」 或者 「计算机网络全套面试 50 题」 吗?

HTTPS加密机制

HTTPS 加密机制 超详细笔记

(纯加密原理 + 混合加密流程 + 证书防中间人 + 密钥生成逻辑)


一、一句话总纲

HTTPS 不是一种新加密算法,而是一套组合方案:

非对称加密(RSA/ECC)负责安全交换密钥 对称加密(AES)负责实际传输数据 数字证书 + 签名 防止公钥被掉包


二、三种基础加密(必须先懂)

1. 对称加密(通信主体)

  • 加密、解密用同一把密钥
  • 代表:AES
  • 优点:极快、适合大量数据
  • 缺点:密钥不能在网络明文传,否则直接泄露

2. 非对称加密(密钥交换)

  • 一对密钥:
    • 公钥:公开给所有人
    • 私钥:服务器自己保密
  • 规则:
    • 公钥加密 → 只能私钥解密
    • 私钥签名 → 只能公钥验签
  • 代表:RSA、ECC
  • 优点:安全,不怕公钥公开
  • 缺点:极慢,不能用来传大文件

3. 摘要算法(完整性)

  • 作用:防篡改
  • 代表:SHA256
  • 对数据做哈希,传输时一起发;接收方重新计算比对

三、HTTPS 为什么用「混合加密」?

只用对称:→ 密钥没法安全传给对方

只用非对称:→ 速度太慢,页面卡成 PPT

最终方案:

  1. 先用非对称加密,把对称密钥安全传给服务器
  2. 之后全程用对称加密传输 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:客户端验证证书(防中间人核心)

  1. 用操作系统 / 浏览器内置的 CA 根证书公钥
  2. 验证服务器证书上的CA 签名
  3. 验证通过 → 确认服务器公钥是真的
  4. 不通过 → 浏览器红警:不安全

阶段 4:客户端生成「预主密钥」

  • 客户端生成 Pre-Master Secret(PMS)
  • 服务器公钥加密 PMS 发给服务器
  • 只有服务器私钥能解开

阶段 5:双方生成「会话密钥」(真正加密密钥)

客户端 和 服务器 各自用三样东西:

  1. Client Random(C)
  2. Server Random(S)
  3. Pre-Master Secret(PMS)

通过标准密钥派生算法,算出:

  • Master Secret
  • 最终生成一组对称会话密钥
    • 客户端加密密钥
    • 服务端加密密钥
    • 消息校验密钥

之后所有 HTTP 数据都用 AES 对称加密

阶段 6:加密通信

  • 客户端发送「加密握手完成」
  • 服务器发送「加密握手完成」
  • 开始真正加密传输网页数据

五、密钥关系图(极简)

plaintext

复制代码
ClientRandom + ServerRandom + PreMasterSecret
            ↓ (双方独立计算)
          MasterSecret
            ↓
      会话密钥(对称)
            ↓
      AES 加密所有数据

六、为什么要证书?(防中间人攻击)

如果没有证书:

  1. 中间人拦截服务器公钥
  2. 自己的公钥发给客户端
  3. 客户端用假公钥加密密钥
  4. 中间人解密 → 窃听 / 篡改 → 再加密发给服务器→ 完全透明劫持

证书解决:

  • 证书由 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. 对称密钥是网络上传输的吗?

不是明文传。是:

  1. 客户端生成 PMS
  2. 用服务器公钥加密后传输
  3. 双方再本地计算出最终对称密钥

3. HTTPS 能被抓包破解吗?

  • 正常不能
  • 如果你手动安装了中间人证书 (如 Charles/Fiddler)浏览器认为它是合法 CA → 可以解密→ 这叫中间人代理,不是 HTTPS 漏洞

4. 公钥存在哪里?

服务器数字证书里,随第一次握手发给客户端。

5. HTTPS 加密的是哪部分?

从 TLS 握手完成后:

  • HTTP 头 + HTTP 体 全部加密
  • 只有IP、端口、域名(SNI) 可能暴露(SNI 加密可解决)

九、极简背诵版

  1. HTTPS = 混合加密
  2. 非对称加密只用来传密钥
  3. 对称加密真正传数据
  4. 证书保证公钥不被掉包
  5. 三个随机数算出最终会话密钥
  6. 全程 AES 加密,安全且快
相关推荐
2501_916008891 小时前
Unity3D iOS 应用防篡改实战 资源校验、 IPA 二进制保护
android·ios·小程序·https·uni-app·iphone·webview
夜泉_ly2 小时前
泉面 TOP150 -HTTP和HTTPS协议的区别?
网络协议·http·https
钛态14 小时前
Flutter 三方库 http_mock_adapter — 赋能鸿蒙应用开发的高效率网络接口 Mock 与自动化测试注入引擎(适配鸿蒙 HarmonyOS Next ohos)
android·网络协议·flutter·http·华为·中间件·harmonyos
2501_9159184116 小时前
苹果App Store上架审核卡住原因分析与解决方案指南
android·ios·小程序·https·uni-app·iphone·webview
IT小白316 小时前
windows的VMware虚拟机上的Linux系统(CentOS)配置永久ip(关机重启ip不变)
网络·网络协议·tcp/ip
蛊明18 小时前
批量检测 IP 是否在线:CPing vs QuickPing
网络·网络协议·tcp/ip
路由侠内网穿透.18 小时前
本地部署开源书签管理工具 LinkAce 并实现外部访问( Linux 版本)
linux·运维·服务器·网络·网络协议·开源
2301_8059629321 小时前
ESP32远程OTA升级:从局域网到公网部署
网络·后端·http·esp32
爱吃生蚝的于勒1 天前
【Linux】网络之http协议
linux·运维·服务器·网络·数据结构·c++·http