HTTPS 的技术原理
HTTPS = HTTP + TLS/SSL。TLS协议在传输层对数据进行加密,确保通信的机密性、完整性和身份认证。
TLS握手过程:
- Client Hello:客户端发送支持的TLS版本和加密套件
- Server Hello:服务器选择加密算法,发送证书
- 密钥交换:双方协商生成会话密钥
- 加密通信:使用对称密钥加密数据传输
Let’s Encrypt 免费证书申请
安装 Certbot
# Ubuntu/Debian
apt install certbot python3-certbot-nginx
申请证书
# 自动配置Nginx
certbot --nginx -d example.com -d www.example.com
# 仅获取证书
certbot certonly --webroot -w /var/www/html -d example.com
# 申请通配符证书
certbot certonly --dns-standalone -d example.com -d *.example.com
Nginx HTTPS 配置优化
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 valid=300s;
# 安全响应头
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
}
HSTS 安全策略
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
- max-age=63072000:有效期2年
- includeSubDomains:子域名也强制HTTPS
- preload:加入浏览器预加载列表
证书自动续期
# 测试续期
certbot renew --dry-run
# cron定时任务
30 2 * * * certbot renew --quiet --deploy-hook "systemctl reload nginx"
Let’s Encrypt证书有效期90天,建议设置自动续期。
HTTP/2 配置
listen 443 ssl http2;
HTTP/2支持多路复用、头部压缩和服务器推送,性能显著优于HTTP/1.1。
总结
通过Let’s Encrypt免费证书 + 合理的TLS配置 + HSTS策略 + 自动续期机制,可以在零成本的前提下实现企业级的HTTPS安全部署。