HTTPS 握手过程与加密算法详解
一、思维导图:HTTPS 握手与加密算法
arduino
HTTPS 握手与加密算法
├── HTTPS 概述
│ ├── 定义:HTTP over SSL/TLS
│ ├── 作用:数据加密、身份验证、数据完整性
│ └── 与 HTTP 的区别
├── TLS/SSL 协议
│ ├── 协议层级:记录层、握手层、密钥交换层
│ ├── 版本:SSLv2、SSLv3、TLS 1.0、TLS 1.1、TLS 1.2、TLS 1.3
│ └── 核心功能:加密、认证、完整性
├── HTTPS 握手过程
│ ├── 阶段 1:Client Hello
│ │ ├── 客户端支持的 TLS 版本
│ │ ├── 随机数(Client Random)
│ │ ├── 支持的加密套件(Cipher Suites)
│ │ └── 扩展字段(SNI、ALPN 等)
│ ├── 阶段 2:Server Hello
│ │ ├── 服务器选择的 TLS 版本
│ │ ├── 随机数(Server Random)
│ │ ├── 选定的加密套件
│ │ └── 服务器证书(含公钥)
│ ├── 阶段 3:证书验证
│ │ ├── 客户端验证服务器证书
│ │ ├── CA 签名验证
│ │ └── 证书链完整性
│ ├── 阶段 4:密钥交换
│ │ ├── 方式:RSA、DH、ECDH
│ │ ├── 预主密钥(Pre-Master Secret)
│ │ ├── 主密钥(Master Secret)
│ │ └── 会话密钥(Session Key)
│ ├── 阶段 5:加密通信
│ │ ├── 对称加密开始
│ │ ├── 数据加密与完整性校验
│ │ └── 握手完成(Finished 消息)
├── 加密算法详解
│ ├── 对称加密
│ │ ├── 定义:同一密钥加密解密
│ │ ├── 常见算法
│ │ │ ├── AES(高级加密标准)
│ │ │ │ ├── 模式:CBC、GCM
│ │ │ │ ├── 密钥长度:128、192、256 位
│ │ │ │ └── 应用场景
│ │ │ ├── DES(数据加密标准)
│ │ │ │ ├── 56 位密钥
│ │ │ │ └── 已废弃
│ │ │ └── 3DES
│ │ │ ├── 三次 DES 加密
│ │ │ └── 性能较低
│ │ └── 优缺点
│ ├── 非对称加密
│ │ ├── 定义:公钥加密,私钥解密
│ │ ├── 常见算法
│ │ │ ├── RSA
│ │ │ │ ├── 基于大整数分解
│ │ │ │ ├── 密钥长度:2048、4096 位
│ │ │ │ └── 性能较慢
│ │ │ ├── ECC(椭圆曲线加密)
│ │ │ │ ├── 基于椭圆曲线离散对数
│ │ │ │ ├── 密钥长度:256 位
│ │ │ │ └── 性能高效
│ │ │ └── DSA(数字签名算法)
│ │ │ ├── 仅用于签名
│ │ │ └── 不用于加密
│ │ └── 优缺点
│ ├── 密钥交换算法
│ │ ├── DH(Diffie-Hellman)
│ │ │ ├── 基于离散对数
│ │ │ └── 不传递密钥
│ │ ├── ECDH(椭圆曲线 DH)
│ │ │ ├── 更高效
│ │ │ └── 现代 TLS 主流
│ │ └── 前向保密(PFS)
│ ├── 哈希算法
│ │ ├── 定义:数据完整性校验
│ │ ├── 常见算法
│ │ │ ├── MD5(已废弃)
│ │ │ ├── SHA-1(已不安全)
│ │ │ ├── SHA-256
│ │ │ └── SHA-3
│ │ └── HMAC(基于哈希的消息认证码)
│ └── 混合加密
│ ├── 对称 + 非对称结合
│ ├── TLS 中的应用
│ └── 性能与安全平衡
├── 常见问题与优化
│ ├── 握手性能优化
│ │ ├── 会话复用(Session Resumption)
│ │ ├── TLS 1.3 零往返(0-RTT)
│ │ └── 加密算法选择
│ ├── 安全问题
│ │ ├── 中间人攻击(MITM)
│ │ ├── 证书伪造
│ │ └── 弱加密算法风险
│ └── 调试工具
│ ├── Wireshark
│ ├── OpenSSL
│ └── ssllabs.com
└── 总结
├── HTTPS 的重要性
├── 加密算法的选择
└── 未来趋势:TLS 1.3 普及
二、HTTPS 概述
HTTPS(Hypertext Transfer Protocol Secure)是 HTTP 协议的安全版本,通过在 HTTP 和 TCP 之间引入 TLS/SSL 协议(Transport Layer Security / Secure Sockets Layer)实现数据加密、身份验证和数据完整性保护。与 HTTP 不同,HTTPS 确保数据在客户端(如浏览器)和服务器之间传输时不被窃听、篡改,并验证通信双方的身份。
HTTPS 的核心功能
- 数据加密:防止第三方窃听通信内容。
- 身份验证:通过数字证书验证服务器身份,防止中间人攻击。
- 数据完整性:通过消息完整性校验(如 HMAC)确保数据未被篡改。
TLS/SSL 协议
TLS 是 SSL 的升级版,目前主流版本为 TLS 1.2 和 TLS 1.3。TLS 协议分为记录层(负责数据分片、加密、完整性校验)和握手层(负责协商加密参数、密钥交换)。
三、HTTPS 握手过程详解
HTTPS 握手是 TLS 协议的核心,用于在客户端和服务器之间协商加密参数、交换密钥,并建立安全通信通道。以下是详细的握手过程,基于 TLS 1.2(TLS 1.3 稍有不同,后续会补充)。
1. Client Hello
客户端(如浏览器)发起握手,向服务器发送 Client Hello 消息,包含:
- TLS 版本:客户端支持的最高 TLS 版本(如 TLS 1.2 或 1.3)。
- 随机数(Client Random):32 字节随机数,用于后续密钥生成。
- 加密套件(Cipher Suites) :客户端支持的加密算法组合,例如
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
,其中:ECDHE
:密钥交换算法(椭圆曲线 Diffie-Hellman)。RSA
:认证算法。AES_256_GCM
:对称加密算法(256 位 AES,GCM 模式)。SHA384
:哈希算法。
- 扩展字段 :
- SNI(Server Name Indication):指定目标域名,便于服务器选择正确证书。
- ALPN(Application-Layer Protocol Negotiation):协商应用层协议(如 HTTP/2)。
2. Server Hello
服务器响应 Server Hello 消息,选择双方支持的加密参数:
- TLS 版本:确认使用的 TLS 版本。
- 随机数(Server Random):服务器生成的 32 字节随机数。
- 加密套件:从客户端提供的套件中选择一个。
- 服务器证书:包含服务器的公钥和 CA(证书颁发机构)签名。
3. 证书验证
客户端收到服务器证书后,执行以下验证:
- 证书链完整性:检查证书是否由受信任的 CA 签名,追溯至根 CA。
- 域名匹配:验证证书中的域名与请求的域名一致。
- 有效期:检查证书是否在有效期内。
- 吊销状态:通过 CRL(证书吊销列表)或 OCSP(在线证书状态协议)确认证书未被吊销。
如果验证失败,客户端会终止连接并提示用户(如"证书不受信任")。
4. 密钥交换
密钥交换是 HTTPS 握手的核心,用于生成安全的会话密钥。以下是两种常见方式:
(1)RSA 密钥交换(较老,已被淘汰)
- 客户端生成一个 预主密钥(Pre-Master Secret),用服务器的公钥加密后发送。
- 服务器用私钥解密得到预主密钥。
- 双方使用 Client Random、Server Random 和预主密钥,通过伪随机函数(PRF)生成 主密钥(Master Secret)。
- 主密钥再派生出 会话密钥(Session Key),用于后续的对称加密。
问题:RSA 密钥交换不支持前向保密(PFS)。如果服务器私钥泄露,历史通信可被解密。
(2)DH/ECDH 密钥交换(现代主流)
- DH(Diffie-Hellman):基于离散对数问题,客户端和服务器各生成一对公钥和私钥,交换公钥后计算共享密钥。
- ECDH(椭圆曲线 DH):基于椭圆曲线离散对数问题,效率更高,现代 TLS 主流。
- 过程:
- 客户端生成 ECDH 公钥(基于椭圆曲线参数),发送给服务器。
- 服务器生成自己的 ECDH 公钥,发送给客户端。
- 双方使用各自的私钥和对方的公钥,计算相同的 预主密钥。
- 结合 Client Random 和 Server Random,生成主密钥和会话密钥。
优点:支持前向保密。即使服务器私钥泄露,历史会话密钥无法被破解。
5. 加密通信
握手完成后,双方使用协商好的会话密钥进行对称加密通信:
- 对称加密:通常使用 AES(高级加密标准)算法。
- 完整性校验:通过 HMAC(基于 SHA-256 等哈希算法)验证数据未被篡改。
- Finished 消息:双方发送握手完成消息,确认握手成功。
TLS 1.3 的改进
TLS 1.3 优化了握手过程,提高了性能和安全性:
- 减少往返:支持 1-RTT(一次往返)握手,甚至 0-RTT(零往返,基于会话复用)。
- 强制前向保密:移除 RSA 密钥交换,仅支持 DH/ECDH。
- 简化加密套件:移除不安全的算法(如 MD5、SHA-1)。
- 加密所有握手消息:除初始 Client Hello 外,所有消息均加密。
四、加密算法详解
HTTPS 使用混合加密机制,结合对称加密、非对称加密、密钥交换算法和哈希算法,以平衡安全性和性能。以下是对各种加密算法的详细讲解,特别针对您提到的"对加密算法没有认知"的情况,我会从基础开始,逐步深入。
1. 对称加密
定义:使用同一密钥进行加密和解密,速度快,适合加密大量数据。
常见算法
-
AES(Advanced Encryption Standard)
- 概述:2001 年成为 NIST 标准,取代 DES,是目前最广泛使用的对称加密算法。
- 密钥长度:128 位、192 位、256 位(AES-128、AES-192、AES-256)。
- 模式 :
- CBC(Cipher Block Chaining):将明文分块,每块与前一块密文异或后加密,需初始化向量(IV)。
- GCM(Galois/Counter Mode):结合加密和完整性校验,现代 TLS 主流。
- 优点:高效、安全,硬件加速支持广泛。
- 应用:TLS 数据加密、磁盘加密(如 BitLocker)。
-
DES(Data Encryption Standard)
- 概述:1977 年发布,56 位密钥,块大小 64 位。
- 问题:密钥太短,易被暴力破解,已被淘汰。
- 应用:仅在遗留系统中使用。
-
3DES(Triple DES)
- 概述:对 DES 进行三次加密,密钥长度 168 位(实际安全强度约 112 位)。
- 问题:性能差,安全性低于 AES,已逐渐淘汰。
- 应用:银行系统中的过渡方案。
优缺点
- 优点:速度快,适合加密大数据量。
- 缺点:密钥分发困难,需安全通道传输密钥。
2. 非对称加密
定义:使用一对密钥(公钥和私钥),公钥加密,私钥解密,或反之用于签名。安全性高,但速度慢。
常见算法
-
RSA(Rivest-Shamir-Adleman)
- 原理:基于大整数分解难题,公钥和私钥由两个大素数的乘积生成。
- 密钥长度:现代推荐 2048 位或 4096 位。
- 用途:密钥交换(老版本 TLS)、数字签名。
- 缺点:计算复杂度高,性能较差。
- 应用:证书签名、早期 TLS 密钥交换。
-
ECC(Elliptic Curve Cryptography)
- 原理:基于椭圆曲线上的离散对数难题。
- 密钥长度:256 位 ECC 安全性相当于 3072 位 RSA。
- 优点:计算效率高,密钥短,适合移动设备。
- 应用:TLS 1.3 的 ECDH 密钥交换、ECDSA 签名。
-
DSA(Digital Signature Algorithm)
- 原理:基于离散对数问题,仅用于数字签名,不支持加密。
- 应用:证书签名(较少使用)。
- 缺点:性能低于 ECC。
优缺点
- 优点:无需安全通道分发密钥,适合身份验证和密钥交换。
- 缺点:计算复杂,速度慢,不适合加密大数据。
3. 密钥交换算法
定义:用于安全地协商会话密钥,解决对称加密的密钥分发问题。
常见算法
-
DH(Diffie-Hellman)
- 原理:基于离散对数问题,双方交换公钥,计算共享密钥。
- 过程 :
- 双方约定公开参数(素数 p 和生成元 g)。
- 各生成私钥(a、b)和公钥(g^a mod p、g^b mod p)。
- 交换公钥,计算共享密钥(g^(ab) mod p)。
- 优点:支持前向保密。
- 缺点:计算复杂度较高。
-
ECDH(Elliptic Curve Diffie-Hellman)
- 原理:DH 的椭圆曲线版本,使用椭圆曲线点运算。
- 优点:效率高,密钥短,TLS 1.3 主流。
- 应用:现代 HTTPS 握手中的密钥交换。
前向保密(PFS)
- 定义:即使长期私钥泄露,历史会话密钥仍安全。
- 实现:通过临时密钥(如 DH/ECDH)生成会话密钥,每次握手独立。
- 重要性:TLS 1.3 强制要求 PFS。
4. 哈希算法
定义:将任意长度的数据映射为固定长度的值,用于完整性校验和消息认证。
常见算法
-
MD5
- 概述:128 位输出,1992 年发布。
- 问题:存在碰撞漏洞,已被淘汰。
- 应用:仅用于非安全场景(如校验和)。
-
SHA-1
- 概述:160 位输出,1995 年发布。
- 问题:碰撞攻击可行,已不安全。
- 应用:遗留系统,逐渐被禁用。
-
SHA-256
- 概述:SHA-2 家族,256 位输出,安全性高。
- 应用:TLS 1.2/1.3 的 HMAC、证书签名。
- 优点:抗碰撞,广泛支持。
-
SHA-3
- 概述:基于 Keccak 算法,2015 年发布。
- 优点:与 SHA-2 不同原理,备用方案。
- 应用:新兴场景,尚未广泛普及。
HMAC(Hash-based Message Authentication Code)
- 定义:结合哈希算法和密钥,生成消息认证码。
- 应用:TLS 中的数据完整性校验。
5. 混合加密
定义:结合对称加密和非对称加密,兼顾安全性和性能。
- 过程 :
- 使用非对称加密(如 RSA 或 ECDH)协商对称加密的会话密钥。
- 使用对称加密(如 AES)加密通信数据。
- TLS 中的应用 :
- 握手阶段:非对称加密用于密钥交换和认证。
- 数据传输阶段:对称加密用于加密通信内容。
- 优点:非对称加密解决密钥分发问题,对称加密保证高效传输。
五、常见问题与优化
1. 握手性能优化
- 会话复用 :
- Session ID:客户端和服务器缓存会话参数,复用主密钥。
- Session Ticket:服务器加密会话状态发送给客户端,客户端下次连接时携带。
- TLS 1.3 0-RTT:客户端在初次握手后缓存密钥,首次连接即可发送加密数据。
- 选择高效算法:优先使用 ECDH 和 AES-GCM。
2. 安全问题
- 中间人攻击(MITM) :通过伪造证书或弱加密算法实施。
- 防御:使用强加密套件、HSTS(HTTP 严格传输安全)、证书透明度(CT)。
- 证书伪造 :攻击者伪造 CA 签名。
- 防御:严格验证证书链,启用 OCSP Stapling。
- 弱加密算法 :如 MD5、SHA-1、DES。
- 防御:禁用不安全算法,强制 TLS 1.2/1.3。
3. 调试工具
- Wireshark:捕获和分析 TLS 握手流量。
- OpenSSL:测试 TLS 配置,生成证书。
- SSL Labs:在线扫描服务器 TLS 配置,评估安全性。
六、总结
HTTPS 通过 TLS/SSL 协议实现了安全的网络通信,其握手过程确保了密钥的安全协商和身份验证。加密算法是 HTTPS 的核心,包括对称加密(AES)、非对称加密(RSA、ECC)、密钥交换(DH/ECDH)和哈希算法(SHA-256)。随着 TLS 1.3 的普及,HTTPS 在性能和安全性上进一步提升。理解这些机制有助于开发人员构建更安全的应用,同时应对潜在的攻击和优化通信效率。
未来,量子计算可能对传统加密算法(如 RSA)构成威胁,量子安全算法(如基于格的加密)将成为研究热点。