网站 HTTPS 全面配置:Let’s Encrypt 证书申请与 HSTS 安全策略

HTTPS 的技术原理

HTTPS = HTTP + TLS/SSL。TLS协议在传输层对数据进行加密,确保通信的机密性完整性身份认证

TLS握手过程:

  1. Client Hello:客户端发送支持的TLS版本和加密套件
  2. Server Hello:服务器选择加密算法,发送证书
  3. 密钥交换:双方协商生成会话密钥
  4. 加密通信:使用对称密钥加密数据传输

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安全部署。