欢迎光临
我们一直在努力

深入浅出:HTTPS 加密过程全解析

💡 前言

当你看到浏览器地址栏那把小锁🔒时,你就知道当前连接是安全的(HTTPS)。

但 HTTPS 到底是怎么工作的?为什么它既安全又快?

很多人知道“公钥”和“私钥”,但容易混淆它们在握手过程中的具体作用。今天,我们不讲复杂的数学公式,只用最通俗的语言,拆解 HTTPS 的加密全流程。

1. 核心概念:为什么要“混合加密”? 🤔

在介绍流程前,先明确两个主角:

  • 对称加密(Symmetric Encryption)

    • 特点:加密和解密用同一把钥匙。
    • 优点:速度极快,适合传输大量数据。
    • 缺点:钥匙怎么给对方?如果通过网络传钥匙,被黑客截获就完了。
    • 类比:普通的门锁,钥匙复制一份给邻居,大家都能开。
  • 非对称加密(Asymmetric Encryption)

    • 特点:有一对钥匙——公钥(Public Key)和私钥(Private Key)。公钥加密的数据,只有私钥能解开;私钥签名的数据,公钥能验证。
    • 优点:安全,公钥可以公开分发。
    • 缺点:计算复杂,速度慢,不适合传输大文件。
    • 类比:一个特殊的保险箱。任何人都可以把东西放进去(用公钥锁上),但只有持有唯一钥匙的主人(私钥)才能打开。
  • 💡 HTTPS 的智慧:

    • 用非对称加密来安全地交换“对称加密的钥匙”。
    • 用对称加密来传输实际的网页数据。
    • 取长补短,既安全又高效!

    2. HTTPS 握手全过程图解 🔄

    HTTPS 的建立连接过程(TLS 握手)主要分为四个阶段:

    第一阶段:客户端说“你好” (Client Hello) 👋

    • 动作:浏览器向服务器发起请求。
    • 内容:
      • “我支持哪些加密算法?”(如 TLS 1.2, AES-256 等)
      • “这是我生成的随机数 Client Random。”
    • 目的:协商双方都支持的加密套件。

    第二阶段:服务器说“你好,这是我的身份证” (Server Hello) 🪪

    • 动作:服务器回应浏览器。
    • 内容:
      • “我们就用这套加密算法吧。”
      • “这是我生成的随机数 Server Random。”
      • 重点:“这是我的数字证书(包含服务器的公钥)。”
    • 目的:确认身份,传递公钥。

    第三阶段:客户端验证并生成“会话密钥” 🔑

    这是最关键的一步!

  • 验证证书:

    • 浏览器检查服务器的证书是否由可信的 CA(证书颁发机构)签发。
    • 检查证书是否过期、域名是否匹配。
    • 如果验证失败,浏览器会弹出红色警告⚠️。
  • 生成预主密钥(Pre-Master Secret):

    • 浏览器生成第三个随机数 Pre-Master Secret。
    • 关键操作:使用服务器的公钥对这个 Pre-Master Secret 进行加密。
    • 发送给服务器。
  • 生成会话密钥(Session Key):

    • 此时,客户端和服务器手里都有三个随机数:Client Random、Server Random、Pre-Master Secret。
    • 双方利用相同的算法,将这三个随机数混合,生成最终的对称密钥(Session Key)。
    • 注意:因为 Pre-Master Secret 是用公钥加密传输的,只有拥有私钥的服务器能解密拿到它,所以黑客即使截获了数据包,也无法算出 Session Key。
  • 第四阶段:开始加密通信 📦

    • 动作:
      • 客户端发送一条消息:“之后的数据都用 Session Key 加密啦!”(这条消息本身也用 Session Key 加密)。
      • 服务器回复:“收到!”(同样加密)。
    • 结果:握手结束,后续所有的 HTTP 请求和响应数据,都使用对称加密(Session Key) 进行传输。

    3. 图解流程 📊

    服务端 (Server)客户端 (Browser)服务端 (Server)客户端 (Browser)#mermaid-svg-5tSgJTJOsB8bdox6{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-5tSgJTJOsB8bdox6 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-5tSgJTJOsB8bdox6 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-5tSgJTJOsB8bdox6 .error-icon{fill:#552222;}#mermaid-svg-5tSgJTJOsB8bdox6 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-5tSgJTJOsB8bdox6 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-5tSgJTJOsB8bdox6 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-5tSgJTJOsB8bdox6 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-5tSgJTJOsB8bdox6 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-5tSgJTJOsB8bdox6 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-5tSgJTJOsB8bdox6 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-5tSgJTJOsB8bdox6 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-5tSgJTJOsB8bdox6 .marker.cross{stroke:#333333;}#mermaid-svg-5tSgJTJOsB8bdox6 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-5tSgJTJOsB8bdox6 p{margin:0;}#mermaid-svg-5tSgJTJOsB8bdox6 .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-5tSgJTJOsB8bdox6 text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-5tSgJTJOsB8bdox6 .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-5tSgJTJOsB8bdox6 .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-5tSgJTJOsB8bdox6 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-5tSgJTJOsB8bdox6 .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-5tSgJTJOsB8bdox6 #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-5tSgJTJOsB8bdox6 .sequenceNumber{fill:white;}#mermaid-svg-5tSgJTJOsB8bdox6 #sequencenumber{fill:#333;}#mermaid-svg-5tSgJTJOsB8bdox6 #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-5tSgJTJOsB8bdox6 .messageText{fill:#333;stroke:none;}#mermaid-svg-5tSgJTJOsB8bdox6 .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-5tSgJTJOsB8bdox6 .labelText,#mermaid-svg-5tSgJTJOsB8bdox6 .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-5tSgJTJOsB8bdox6 .loopText,#mermaid-svg-5tSgJTJOsB8bdox6 .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-5tSgJTJOsB8bdox6 .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-5tSgJTJOsB8bdox6 .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-5tSgJTJOsB8bdox6 .noteText,#mermaid-svg-5tSgJTJOsB8bdox6 .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-5tSgJTJOsB8bdox6 .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-5tSgJTJOsB8bdox6 .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-5tSgJTJOsB8bdox6 .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-5tSgJTJOsB8bdox6 .actorPopupMenu{position:absolute;}#mermaid-svg-5tSgJTJOsB8bdox6 .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-5tSgJTJOsB8bdox6 .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-5tSgJTJOsB8bdox6 .actor-man circle,#mermaid-svg-5tSgJTJOsB8bdox6 line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-5tSgJTJOsB8bdox6 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}1. Client Hello2. Server Hello3. 密钥交换4. 生成会话密钥5. 加密通信支持的加密套件 + Client Random选定的加密套件 + Server Random + 数字证书(含公钥)验证证书合法性生成 Pre-Master Secret用【公钥】加密 Pre-Master Secret 发送Client Random + Server Random + Pre-Master = Session Key用【私钥】解密得到 Pre-MasterClient Random + Server Random + Pre-Master = Session Key用【Session Key】加密数据用【Session Key】加密数据


    4. 灵魂拷问:为什么不能全程用非对称加密? 🤔

    既然非对称加密这么安全,为什么握手完成后还要切换成对称加密?

    • 性能问题:非对称加密(如 RSA)涉及大数运算,速度比对称加密(如 AES)慢 1000 倍以上。
    • 场景需求:网页通常包含大量的图片、JS、CSS 文件。如果用非对称加密,你的浏览器会卡死,服务器 CPU 也会爆满。
    • 结论:非对称加密只用于 “交换钥匙” 这一瞬间的高安全需求场景;对称加密用于 “传输数据” 这一高频、大数据量的场景。

    5. 总结记忆口诀 🧠

    HTTPS 握手四步走:
    一客发随机,二服回证书;
    三客验证书,公钥加密钥;
    四双算会话,对称传数据。

    • 公钥像信箱口:谁都能往里投信(加密),但只有主人有钥匙能取出来(解密)。
    • 会话密钥像房间钥匙:只有你和服务器知道,用来快速开关房门(加解密数据)。

    6. 常见面试题延伸 💡

  • 中间人攻击(MITM)是如何防止的?
    • 依靠数字证书和CA 机构。浏览器内置了受信任的 CA 根证书。如果黑客伪造证书,浏览器会发现签名不对或颁发机构不可信,从而拦截连接。
  • TLS 1.2 和 TLS 1.3 有什么区别?
    • TLS 1.3 简化了握手过程,减少了往返次数(从 2-RTT 变为 1-RTT 甚至 0-RTT),速度更快,安全性更高(废弃了不安全的加密算法)。

  • 希望这篇文档能帮你彻底理清 HTTPS 的加密逻辑!如果觉得有用,欢迎点赞收藏~ 🌟

    赞(0)
    未经允许不得转载:171主机测评 » 深入浅出:HTTPS 加密过程全解析
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址