目录
[1. 两类核心加密算法](#1. 两类核心加密算法)
[2. 数字证书:服务器的"身份身份证"](#2. 数字证书:服务器的“身份身份证”)
[1. 客户端发起HTTPS请求(TCP三次握手后)](#1. 客户端发起HTTPS请求(TCP三次握手后))
[2. 服务器响应请求,发送数字证书与随机数](#2. 服务器响应请求,发送数字证书与随机数)
[3. 客户端验证数字证书合法性](#3. 客户端验证数字证书合法性)
[4. 客户端生成会话密钥,用服务器公钥加密传输](#4. 客户端生成会话密钥,用服务器公钥加密传输)
[5. 服务器解密获取会话密钥](#5. 服务器解密获取会话密钥)
[6. 双方用会话密钥传输加密数据](#6. 双方用会话密钥传输加密数据)
[7. 连接关闭(可选)](#7. 连接关闭(可选))
一、核心术语定义
在理解HTTPS加密流程前,需先明确以下核心术语,为后续内容铺垫基础:
-
明文:未经过加密处理的原始数据,肉眼可直接读取,如未加密的账号密码、网页内容等。HTTP传输的就是明文数据,存在被窃取、篡改的风险。
-
密文:明文经过加密算法处理后得到的加密数据,肉眼无法直接读取,仅能通过对应密钥解密后恢复为明文,是HTTPS传输的核心数据形式。
-
密钥:用于加密和解密数据的特殊字符串(或二进制数据),是加密算法的核心要素,相当于"锁"(加密)和"钥匙"(解密)的结合体,分为对称密钥和非对称密钥两类。
-
公钥:非对称加密算法中的"公开密钥",可对外公开传播(如包含在数字证书中供客户端获取),主要用于加密数据或验证数字签名,无法解密由对应私钥加密的数据。
-
私钥:非对称加密算法中的"私有密钥",需严格保管在服务器(或个人)手中,不可泄露,主要用于解密密文(由对应公钥加密)或生成数字签名,是身份认证和数据解密的核心。
-
对称密钥:加密和解密使用同一把密钥的密钥类型,对应对称加密算法,特点是效率高,HTTPS中用于海量数据的加密传输。
-
非对称密钥对:由公钥和私钥组成的密钥组合,两者一一对应、成对生成,仅能相互配合完成加密解密操作,是HTTPS身份认证和密钥安全传输的核心。
二、HTTPS核心前提:加密算法与数字证书
在梳理流程前,需先明确两个核心基础------加密算法和数字证书,这是HTTPS加密的"工具包"。
1. 两类核心加密算法
- 非对称加密算法 :像一把"公私钥对",公钥可公开传播,私钥仅服务器持有。特点是用公钥加密的数据,只能用对应私钥解密;用私钥加密的数据(签名),只能用对应公钥验证。优势是安全性高,劣势是加密解密速度慢,适合传输少量关键数据(如对称密钥)。常见算法:RSA、ECC。

- 对称加密算法:用同一把密钥进行加密和解密,特点是速度极快,适合加密大量数据(如网页内容、表单信息)。优势是效率高,劣势是密钥传输过程中若被拦截,数据会被破解。常见算法:AES、DES。

HTTPS并非单一算法,而是结合两者优势:用非对称加密安全传输对称密钥,再用对称加密传输海量数据,兼顾安全性和效率。
2. 数字证书:服务器的"身份身份证"
数字证书由权威第三方机构(CA,如Let's Encrypt、Verisign)颁发,核心作用是验证服务器身份,防止"中间人攻击"。证书中包含:服务器公钥、服务器域名、CA签名、证书有效期等信息。相当于CA为服务器做"实名认证",告诉客户端"这个服务器是合法的,你可以信任它的公钥"

二、HTTPS完整加密流程
HTTPS的加密流程本质是"身份认证→密钥协商→数据传输"的闭环,以下是基于TLS 1.2(目前主流版本)的详细步骤,搭配生活化类比帮助理解:
1. 客户端发起HTTPS请求(TCP三次握手后)
客户端(浏览器)与服务器建立TCP连接后,向服务器发送HTTPS请求,携带以下信息:
-
支持的TLS版本(如TLS 1.2、1.3)
-
支持的加密套件(如AES+RSA、AES+ECC,即对称算法+非对称算法组合)
-
一个随机数(Client Random),用于后续生成对称密钥
类比:你(客户端)到银行办理业务,先和银行(服务器)确认"办理规则"(TLS版本、加密套件),并给出一个随机密码片段(Client Random)。
2. 服务器响应请求,发送数字证书与随机数
服务器根据客户端请求,选择合适的TLS版本和加密套件,回复以下内容:
-
服务器的数字证书(含服务器公钥)
-
一个随机数(Server Random),与Client Random共同生成对称密钥
类比:银行(服务器)确认规则后,给你出示"营业执照+公章"(数字证书),证明自己的合法性,同时也给出一个随机密码片段(Server Random)。
3. 客户端验证数字证书合法性
这是防止中间人攻击的关键步骤,客户端(浏览器)会做三件事:
-
验证证书有效期:确认证书未过期。
-
验证证书签名:用CA的公钥解密证书中的CA签名,验证证书是否被篡改。
-
验证证书域名:确认证书中的域名与当前访问的域名一致。
若验证失败,浏览器会弹出"不安全连接"警告;若验证通过,客户端会提取证书中的服务器公钥。
类比:你(客户端)核对银行的营业执照(证书)是否在有效期内、公章是否真实(CA签名)、营业执照上的名称是否与银行一致(域名匹配),确认无误后,记下银行的"公钥"(用于后续传递信息)。
4. 客户端生成会话密钥,用服务器公钥加密传输
客户端基于之前的Client Random、Server Random,再生成一个新的随机数(Pre-Master Secret),三者通过特定算法(PRF)生成会话密钥(Session Key)------这就是后续数据传输用的对称密钥。
之后,客户端用服务器公钥加密Pre-Master Secret,发送给服务器。由于只有服务器的私钥能解密该数据,因此Pre-Master Secret不会被中间人窃取。
类比:你(客户端)结合自己的密码片段、银行的密码片段,再生成一个新片段,三者组合成"最终业务密码"(会话密钥),然后用银行给的"公钥锁"(服务器公钥)把新片段锁起来,发给银行,只有银行的"私钥钥匙"能打开。
5. 服务器解密获取会话密钥
服务器用自己的私钥解密客户端发送的加密数据,得到Pre-Master Secret,再结合之前的Client Random、Server Random,通过相同的PRF算法生成与客户端一致的会话密钥。
类比:银行(服务器)用自己的"私钥钥匙"打开锁,拿到新密码片段,再结合之前的两个片段,生成和你一致的"最终业务密码"(会话密钥)。
6. 双方用会话密钥传输加密数据
至此,密钥协商完成,后续客户端与服务器之间的所有数据传输,都使用会话密钥进行对称加密和解密。同时,为了保证数据完整性,每次传输都会附带"消息认证码"(MAC),验证数据是否被篡改。
类比:之后你和银行办理所有业务(数据传输),都用双方确认的"最终业务密码"加密,确保内容只有彼此能看懂,且内容不会被篡改。
7. 连接关闭(可选)
会话结束后,双方可发送关闭通知,销毁会话密钥,本次HTTPS连接终止。
三、HTTPS加密流程关键要点
-
混合加密的核心逻辑:非对称加密仅用于"身份认证"和"传输对称密钥",对称加密用于"海量数据传输",兼顾安全性和效率。若全程用非对称加密,会导致传输速度极慢;若全程用对称加密,密钥传输存在安全风险。
-
数字证书的作用:核心是解决"服务器身份认证"和"公钥可信传输"问题,防止中间人伪造服务器公钥窃取数据。没有数字证书,客户端无法确认收到的公钥是否来自合法服务器。
-
会话密钥的生成逻辑:由Client Random、Server Random、Pre-Master Secret三者共同生成,且仅在本次会话中有效。会话结束后密钥销毁,即使被窃取,也无法解密历史数据。
-
中间人攻击的防御:通过CA签名验证证书合法性,确保客户端拿到的是真实服务器公钥,中间人无法伪造证书(无CA私钥签名),也就无法窃取或篡改数据。
-
TLS与SSL的关系:HTTPS的加密核心是TLS(Transport Layer Security),SSL是TLS的前身(已淘汰,如SSL 3.0存在安全漏洞),目前主流使用TLS 1.2和TLS 1.3(TLS 1.3简化了流程,速度更快)。

四、常见误区澄清
-
误区1:HTTPS是"绝对安全"的。真相:HTTPS能防御大部分中间人攻击,但若CA证书被伪造(极端情况)、服务器私钥泄露,仍可能存在安全风险。
-
误区2:HTTPS的加密是"端到端加密"。真相:HTTPS是"传输层加密",仅保护客户端与服务器之间的传输过程,服务器端存储的数据仍需单独加密(如数据库加密)。
-
误区3:HTTPS比HTTP慢很多。真相:仅在首次握手时因证书验证、密钥协商增加少量延迟,后续数据传输速度与HTTP接近,且TLS 1.3已大幅简化握手流程。
总结
HTTPS 工作过程中涉及到的密钥有三组.
第一组(非对称加密): 用于校验证书是否被篡改. 服务器持有私钥(私钥在注册证书时获得), 客户端持有公钥(操作系统包含了可信任的 CA 认证机构有哪些, 同时持有对应的公钥). 服务器使用这个私钥对证书的签名进行加密. 客户端通过这个公钥解密获取到证书的签名, 从而校验证书内容是否是篡改过.
第二组(非对称加密): 用于协商生成对称加密的密钥. 服务器生成这组 私钥-公钥 对, 然后通过证书把公钥传递给客户端. 然后客户端用这个公钥给生成的对称加密的密钥加密, 传输给服务器, 服务器通过私钥解密获取到对称加密密钥.
第三组(对称加密): 客户端和服务器后续传输的数据都通过这个对称密钥加密解密.
其实一切的关键都是围绕这个对称加密的密钥. 其他的机制都是辅助这个密钥工作的.
第二组非对称加密的密钥是为了让客户端把这个对称密钥传给服务器.
第一组非对称加密的密钥是为了让客户端拿到第二组非对称加密的公钥.