Nginx 通过 Let‘s Encrypt 实现 HTTPS 访问全流程指南

打印 上一主题 下一主题

主题 1866|帖子 1866|积分 5598

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一、Let’s Encrypt 与 Certbot 简介

Let’s Encrypt 是由非营利构造 ISRG 运营的免费证书颁发机构(CA),旨在推动 HTTPS 的普及。其核心工具 Certbot 能主动化完成证书申请、部署与续期,大幅降低 HTTPS 的配置复杂度。通过 Certbot 与 Nginx 的集成,用户可在 5 分钟内完玉成流程配置 。

二、环境准备

1. 系统要求



  • 操作系统:支持 CentOS 7+Ubuntu 18.04+ 等主流 Linux 发行版
  • 已安装 Nginx 并配置至少一个假造主机
  • 域名解析:需将域名(如 example.com)的 A 记载指向服务器公网 IP
  • 防火墙放行:确保 80(HTTP)443(HTTPS) 端口开放
2. 安装 Certbot 与依赖

  1. # CentOS 7
  2. sudo yum install epel-release -y
  3. sudo yum install certbot python3-certbot-nginx -y
  4. # Ubuntu/Debian
  5. sudo apt update
  6. sudo apt install certbot python3-certbot-nginx -y
复制代码
注:python3-certbot-nginx 插件使 Certbot 能直接修改 Nginx 配置

三、证书申请与主动配置

1. 单域名证书申请

  1. sudo certbot --nginx -d example.com -d www.example.com
复制代码
流程说明

  • 输入邮箱用于吸收证书到期提醒
  • 同意服务条款(输入 A 确认)
  • 选择是否将 HTTP 流量重定向至 HTTPS(保举选 2)
  • Certbot 主动验证域名所有权并更新 Nginx 配置
2. 泛域名证书申请

  1. sudo certbot certonly --manual --preferred-challenges=dns -d *.example.com
复制代码
操作要点


  • 需手动在 DNS 解析中添加 _acme-challenge 的 TXT 记载
  • 验证乐成后证书路径:/etc/letsencrypt/live/example.com/

四、Nginx 手动配置 HTTPS

若需自定义配置,可手动修改 Nginx 假造主机文件(如 /etc/nginx/conf.d/example.conf):
  1. server {
  2.     listen 443 ssl http2;
  3.     server_name example.com www.example.com;
  4.     # 证书路径
  5.     ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  6.     ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
  7.     # 协议与加密套件
  8.     ssl_protocols TLSv1.2 TLSv1.3;
  9.     ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
  10.     ssl_prefer_server_ciphers on;
  11.     # 强制 HTTP 重定向
  12.     if ($scheme != "https") {
  13.         return 301 https://$host$request_uri;
  14.     }
  15.     # 其他配置(如静态资源路径、反向代理等)
  16.     root /var/www/html;
  17.     index index.html;
  18. }
复制代码
配置完成后执行 sudo nginx -t 验证语法,再 systemctl reload nginx 见效

五、证书主动续期

Let’s Encrypt 证书有用期为 90 天,需定期续期。通过 crontab 设置主动任务:
  1. # 编辑定时任务
  2. sudo crontab -e
  3. # 添加以下行(每天 3 点检查续期)
  4. 0 3 * * * /usr/bin/certbot renew --quiet
复制代码
注:--quiet 参数抑制非错误输出,适合生产环境

六、高级配置优化

1. OCSP 装订(提升 SSL 握手速度)

  1. ssl_stapling on;
  2. ssl_stapling_verify on;
  3. ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
  4. resolver 8.8.8.8 valid=300s;
复制代码
2. 安全加强



  • HSTS 头:强制浏览器使用 HTTPS
    1. add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
    复制代码
  • 禁用弱加密算法
    1. ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
    复制代码
3. 性能优化



  • 启用 HTTP/2:listen 443 ssl http2;
  • 会话复用:ssl_session_cache shared:SSL:10m;

七、常见问题排查

1. 证书申请失败



  • DNS 未见效:通过 dig example.com 验证解析
  • Nginx 配置错误:确保 server_name 与域名一致,且 80 端口开放
2. HTTPS 无法访问



  • 检查防火墙规则:sudo firewall-cmd --list-ports
  • 验证证书路径权限:确保 Nginx 用户有读取权限
3. 续期失败



  • 手动测试:sudo certbot renew --dry-run
  • 检查日志:tail -f /var/log/letsencrypt/letsencrypt.log

总结

通过 Let’s Encrypt 与 Nginx 的集成,开发者可快速实现 HTTPS 部署并享受以下优势:

  • 零成本:免费证书节省企业开支
  • 主动化:Certbot 简化申请与续期流程
  • 安全性:支持 TLS 1.3 等最新协议
  • 高性能:通过 OCSP 装订和 HTTP/2 提升访问速度
发起定期检查证书状态,并参考 Mozilla SSL Configuration Generator 获取最新安全配置模板。如需深度定制(如多域名负载均衡),可结合 Kubernetes 等容器编排工具实现 。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

怀念夏天

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表