mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4
394 字
1 分钟
TLS 与 HTTPS 协议:加密传输
2023-04-18

前言#

HTTPS 已成为 Web 安全的基石。本章详解 TLS 1.2/1.3 协议、握手流程、证书验证与 PKI 系统。

相关章节

一、TLS 协议概述#

1.1 协议版本演进#

版本年份主要改进
SSL 3.01996初始版本,已废弃
TLS 1.01999废弃
TLS 1.12006废弃
TLS 1.22008AEAD 支持
TLS 1.32018简化握手、0-RTT 支持

1.2 协议分层#

graph TB A["应用层 HTTP"] --> B["TLS Record Protocol"] B --> C["TLS Handshake Protocol"] B --> D["TLS Alert Protocol"] B --> E["TLS App Data Protocol"]

二、TLS 1.3 握手详解#

2.1 TLS 1.2 vs 1.3 握手对比#

flowchart LR subgraph TLS12["TLS 1.2 (2-RTT)"] direction TB C1["ClientHello"] --> S1["ServerHello + Certificate"] S1 --> C2["ServerKeyExchange"] C2 --> S2["ClientKeyExchange"] S2 --> C3["ChangeCipherSpec + Finished"] C3 --> S3["ChangeCipherSpec + Finished"] end subgraph TLS13["TLS 1.3 (1-RTT)"] direction TB D1["ClientHello + KeyShare"] --> E1["ServerHello + KeyShare"] E1 --> E2["Certificate + Finished"] E2 --> D2["Finished + AppData"] end

2.2 TLS 1.3 完整握手流程#

sequenceDiagram participant C as Client participant S as Server Note over C,S: 1-RTT 握手 C->>S: ClientHello<br/>+ Supported Groups<br/>+ Key Share<br/>+ Signature Algorithms S->>C: ServerHello<br/>+ Key Share S->>C: EncryptedExtensions S->>C: Certificate S->>C: CertificateVerify S->>C: Finished C->>S: Finished Note over C,S: 握手完成,开始加密通信 C->>S: Application Data (加密) S->>C: Application Data (加密)

2.3 0-RTT 握手#

# TLS 1.3 0-RTT 早期数据
# 用于 HTTP/3 QUIC 场景
early_data = tls_session.early_data # 加密应用数据

三、TLS 1.3 vs 1.2#

特性TLS 1.2TLS 1.3
握手RTT2-RTT1-RTT
0-RTT不支持支持
RSA 密钥交换支持废弃
CBC 模式支持废弃
AEAD可选必须

四、证书与 PKI#

4.1 证书链验证流程#

flowchart TB subgraph Browser["浏览器证书验证"] direction TB A["收到服务器证书"] --> B{"检查证书有效期"} B -->|过期| C1["证书过期错误"] B -->|有效| D{"检查域名匹配"} D -->|不匹配| C2["域名不匹配"] D -->|匹配| E{"检查证书吊销<br/>CRL/OCSP"} E -->|已吊销| C3["证书已吊销"] E -->|有效| F{"验证签名链"} F --> G["Intermediate CA 签名验证"] G --> H{"Root CA 在信任库?"} H -->|否| C4["未知颁发者"] H -->|是| I["证书有效"] end

4.2 证书链结构#

graph TB subgraph TrustStore["操作系统/浏览器信任库"] Root["Root CA<br/>DigiCert/Let's Encrypt<br/>自签名, 预置信任"] end subgraph PKI["PKI 层级"] Root --> Int1["Intermediate CA 1"] Root --> Int2["Intermediate CA 2"] Int1 --> Leaf1["Server Certificate<br/>example.com"] Int2 --> Leaf2["Server Certificate<br/>api.example.com"] end style Root fill:#90EE90 style TrustStore fill:#E8E8E8

4.3 证书验证代码#

# OpenSSL 证书验证示例
import ssl
context = ssl.create_default_context()
context.check_hostname = True
context.verify_mode = ssl.CERT_REQUIRED
# 自定义 CA 证书
context.load_verify_locations("ca-bundle.crt")

五、HSTS 与安全头#

5.1 HSTS 配置#

# Nginx 配置 Strict-Transport-Security
add_header Strict-Transport-Security
"max-age=31536000; includeSubDomains; preload";

5.2 安全响应头#

说明
Strict-Transport-Security强制 HTTPS
Content-Security-PolicyXSS 防护
X-Frame-Options点击劫持防护
X-Content-Type-OptionsMIME 类型嗅探防护

六、证书固定 (Certificate Pinning)#

6.1 HPKP 固定#

# 证书指纹固定
PINNED_CERT = "sha256/xxxxxxxxxx=="

七、TLS 常见问题#

问题解决方案
证书过期自动化续期 (Let’s Encrypt)
中间人攻击证书链验证
协议降级禁用 TLS 1.0/1.1
弱密码套件强制 TLS 1.3

八、总结#

TLS 1.3 是现代 HTTPS 的标准,提供更强的安全性和简化的握手流程。

参考资料#

支持与分享

如果这篇文章对你有帮助,欢迎支持作者或分享给更多人

TLS 与 HTTPS 协议:加密传输
https://blog.souloss.com/posts/web/tls-and-https-protocols/
作者
Souloss
发布于
2023-04-18
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时