HTTPS 协议
HTTPS (HyperText Transfer Protocol Secure) 是 HTTP 协议的安全版本,通过 SSL/TLS 协议来加密通信内容。
工作原理
SSL/TLS 握手过程
客户端发起请求
- 发送支持的加密算法列表
- 发送随机数(Client Random)
服务器响应
- 选择加密算法
- 发送数字证书(包含公钥)
- 发送随机数(Server Random)
客户端验证
- 验证数字证书的合法性
- 生成预主密钥(Pre-master Secret)
- 使用服务器公钥加密预主密钥
密钥生成
- 双方使用三个随机数生成会话密钥
- 后续通信使用会话密钥加密
主要特点
1. 安全性
- 加密通信:所有传输内容都经过加密
- 身份认证:通过证书确认服务器身份
- 数据完整性:防止数据被篡改
2. 数字证书
- 证书包含信息
- 网站信息
- 公钥
- 证书颁发机构(CA)信息
- 有效期
- 数字签名
3. 加密方式
对称加密
- 用于加密通信内容
- 速度快
- 常用算法:AES, DES
非对称加密
- 用于传输对称密钥
- 安全性高
- 常用算法:RSA
性能优化
1. TLS 会话恢复
- Session ID:服务器保存会话信息
- Session Ticket:客户端保存加密的会话信息
2. OCSP Stapling
- 服务器主动获取证书状态
- 减少客户端查询延迟
3. HTTP/2 支持
- 多路复用
- 头部压缩
- 服务器推送
最佳实践
1. 证书选择
- 选择合适的证书类型
- DV(域名验证)
- OV(组织验证)
- EV(扩展验证)
- 使用强密钥和算法
- 及时更新证书
2. 配置优化
nginx
# Nginx 配置示例
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
3. 安全加固
- 启用 HSTS
- 配置 CSP
- 启用 SSL Session 缓存
- 禁用不安全的 SSL/TLS 版本
常见问题
1. 证书相关
- 证书不信任:证书链不完整或证书无效
- 域名不匹配:证书域名与访问域名不符
- 证书过期:需要及时更新证书
2. 性能问题
- 首次握手延迟:TLS 握手需要额外往返
- CPU 开销:加解密操作消耗计算资源
- 带宽消耗:证书传输和加密数据增加流量
3. 调试方法
- 使用 OpenSSL 命令行工具
- 浏览器开发者工具
- 专业抓包工具(如 Wireshark)
检查工具
SSL Labs
- 全面的 SSL/TLS 配置检查
- 提供详细的评分报告
testssl.sh
- 命令行工具
- 检查 SSL/TLS 配置和漏洞
OpenSSL
bash
# 检查证书信息
openssl x509 -in certificate.crt -text -noout
# 测试 SSL 连接
openssl s_client -connect example.com:443