小布助手给我讲清楚了 https……

该文章讲述了作者因精神内耗休息,后对 HTTPS 原理产生兴趣并通过小布助手了解相关知识。HTTPS 加密流程分为“建立安全通道(TLS 握手)”和“加密传输数据”两大阶段建立安全通道和加密传输数据。文章还提到 HTTPS 采用混合加密(非对称加密传递密钥、对称加密加密数据)、证书防伪(SSL 证书由 CA 机构签名)、前向保密(每次会话“临时密码”不同)等关键技术点,并以淘宝为例说明 HTTPS 能保障用户信息加密传输。最后作者对传输数据时两边具体加解密方式存在疑问,小布助手解答是双方通过已传递信息计算出相同密钥进行加密传输避免网络攻击。

5 月份一篇文章都没有发,原因无他,就是太累了,精神上在不停地内耗,所以,想休息一阵子。

昨天突发奇想,对 https 的具体原理产生了兴趣,就在网上搜了一些文章来看。但这些文章水平比较层次,很多都存在不能自恰的地方,最终我不得不求助 AI。

我用了 oppo 自带的小布助手(本质上还是 deepseek),觉得它讲得还挺不错,就拿它当例子,给大家讲讲。

HTTPS 的加密流程可以比喻为「快递员送加密保险箱」,整个过程分为 建立安全通道加密传输数据 两大阶段。以下是通俗版的完整流程:

第一阶段:建立安全通道(TLS 握手)

目标:快递员(客户端)和收件方(服务器)协商出一个只有双方知道的「临时密码」,后续用它加密数据。

步骤 1:客户端打招呼

  • 客户端(比如浏览器)对服务器说:
    “你好,我想用 HTTPS 通信,支持这些加密算法(比如 AES、RSA),这是我的随机数 Client Random。”
    (浏览器发送支持的加密协议版本、加密算法列表、客户端随机数)

步骤 2:服务器回应并出示「身份证」

  • 服务器回应:
    “好的,我们选 AES_256 + RSA 加密,这是我的随机数 Server Random,还有我的 SSL 证书(含公钥)和证书签名。”
    (服务器发送选定的加密算法、服务器随机数、SSL 证书)

步骤 3:客户端验证证书

  • 关键点:客户端检查证书是否可信:
    • 证书是否由权威机构(如 Let’s Encrypt、DigiCert)颁发?
    • 证书是否过期?
    • 证书中的域名是否和访问的网站一致?
      (若证书有问题,浏览器会弹出警告⚠️)

步骤 4:生成「临时密码」

  • 客户端用服务器公钥加密一个 Pre-Master Secret(第三个随机数),发给服务器。
  • 服务器用私钥解密,得到 Pre-Master Secret。
  • 客户端和服务器各自用 Client Random + Server Random + Pre-Master Secret,生成相同的 Master Secret(主密钥)。
  • 最终:用 Master Secret 生成对称加密的「会话密钥」(Session Key),后续用它加密数据。

第二阶段:加密传输数据

目标:用协商好的「会话密钥」加密所有通信内容。

步骤 5:客户端通知加密就绪

  • 客户端说:“我这边准备好了,之后都用会话密钥加密!”
    (发送加密完成的提示,并附带校验码)

步骤 6:服务器确认加密就绪

  • 服务器回应:“我也准备好了,开始加密传输吧!”
    (同样发送加密完成的提示和校验码)

步骤 7:正式加密通信

  • 双方用「会话密钥」对称加密数据(如 AES 算法),传输内容全部变成乱码。
  • 对称加密优势:计算速度快,适合高频数据传输。

流程总结(快递员送保险箱版)

  1. 协商规则:客户端和服务器交换三个随机数,生成唯一「保险箱密码」。
  2. 验证身份:服务器出示 SSL 证书(类似营业执照),客户端验证真伪。
  3. 传递密码:客户端用服务器的公钥加密「保险箱密码」,传给服务器。
  4. 开箱加密:双方用同一密码锁住数据,快递员(中间人)即使截获也打不开。

关键技术点

  1. 混合加密
    • 非对称加密(RSA)传递密钥(安全但慢)
    • 对称加密(AES)加密数据(快但需共享密钥)
  2. 证书防伪
    SSL 证书由 CA 机构签名,伪造证书会被浏览器识别(如山寨银行网站)。
  3. 前向保密
    每次会话的「临时密码」不同,即使某次密码泄露,历史数据仍安全。

举个实际例子
当你在浏览器输入 https://www.taobao.com

  1. 淘宝服务器返回 SSL 证书,浏览器验证证书有效。
  2. 双方协商出本次会话的加密密钥
  3. 你输入的账号、密码、商品信息全部加密传输,即使被黑客截获也无法解密。

网络教程比较模糊的一点就是,传输数据的时候,两边具体是怎么加解密的?如果仅用公钥私钥的话,这两种密钥同样存在被截获的可能呀?

小布助手说,最终是客户端和服务端通过已经传递的信息计算出了相同的密钥,然后双方使用这个密钥进行加密传输,避免了网络上的攻击。

最终效果:HTTPS = HTTP 明文传输 + TLS 加密层,像给数据穿上了防弹衣!🔒

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计