HTTPS 与 TLS/SSL 完全指南
HTTPS 已成为互联网的标配。理解 TLS/SSL 的握手过程、证书体系和常见安全问题,是每位技术人必备的知识。
一、为什么需要 HTTPS?
HTTP 明文传输存在三大风险:
- 窃听:中间人可截获用户密码、银行卡号等敏感信息
- 篡改:运营商劫持注入广告,黑客修改页面内容
- 伪装:钓鱼网站伪装成合法网站欺骗用户
HTTPS = HTTP + TLS,通过加密、完整性校验和身份认证解决上述问题。
二、TLS 握手过程(TLS 1.3 简化版)
- ClientHello:客户端发送支持的 TLS 版本、加密套件、随机数
- ServerHello + 证书:服务端选择加密套件,发送证书(含公钥)
- 证书验证:客户端验证证书链(CA 签名、有效期、域名匹配)
- 密钥协商:基于 ECDHE 算法,双方各生成临时密钥对,协商出对称加密密钥
- Finished:双方用协商的对称密钥加密后续通信
三、证书体系与 CA
- 证书颁发机构(CA):受信任的第三方机构(DigiCert、Let’s Encrypt 等)
- 证书链:根证书 → 中间证书 → 服务器证书,形成信任链
- DV/OV/EV 证书:域名验证/企业验证/扩展验证,安全级别递增
- Let’s Encrypt:免费、自动化、开放的 CA,已成为中小网站首选
四、常见安全配置
# Nginx HTTPS 安全配置示例
server {
listen 443 ssl http2;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# 只允许 TLS 1.2/1.3
ssl_protocols TLSv1.2 TLSv1.3;
# 强制 HTTPS(HSTS)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# OCSP Stapling 提升握手速度
ssl_stapling on;
ssl_stapling_verify on;
}
总结
HTTPS 的部署成本已大幅降低,Let’s Encrypt 提供了免费证书。任何面向用户的网站都应启用 HTTPS,这是对用户安全的基本保障。
