温馨提示×

nginx ssl证书如何在centos更新

小樊
45
2025-12-09 14:37:25
栏目: 云计算

在 CentOS 上更新 Nginx 的 SSL 证书

一、准备与检查

  • 备份现有证书与私钥(可选但强烈建议):
    • sudo cp /etc/pki/tls/certs/your_domain.crt /etc/pki/tls/certs/your_domain.crt.bak
    • sudo cp /etc/pki/tls/private/your_domain.key /etc/pki/tls/private/your_domain.key.bak
  • 确认 Nginx 配置中证书路径,常见为:
    • ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem;
    • ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem;
  • 测试配置与证书链:
    • 配置语法:sudo nginx -t
    • 证书链与到期:echo | openssl s_client -connect your_domain:443 -servername your_domain 2>/dev/null | openssl x509 -noout -issuer -enddate

二、使用 Let’s Encrypt 的更新方式

  • 安装或更新 Certbot(CentOS 7/8 常见做法):
    • sudo yum install epel-release -y
    • 建议优先:sudo yum install python3-certbot-nginx -y
    • 如未提供 python3 包,可:sudo yum install certbot python2-certbot-nginx -y
  • 自动识别并更新证书(会修改 Nginx 配置以启用 HTTPS 与自动重定向):
    • sudo certbot --nginx -d your_domain
  • 仅获取/续期证书但不改动 Nginx 配置:
    • sudo certbot certonly --nginx -d your_domain
  • 无 Nginx 插件或二进制不在 PATH 时的替代验证方式:
    • Webroot:先确保 Nginx 对 /.well-known/acme-challenge/ 可访问,然后
      • sudo certbot certonly --webroot -w /var/www/html -d your_domain
    • 手动 DNS 或文件挑战:sudo certbot certonly --manual -d your_domain(适合无 Web 服务或复杂验证场景)

三、手动替换证书的步骤

  • 将新证书与私钥复制到目标路径(路径以你的 Nginx 配置为准):
    • sudo cp new_certificate.crt /etc/pki/tls/certs/your_domain.crt
    • sudo cp new_private_key.key /etc/pki/tls/private/your_domain.key
  • 设置私钥权限(仅 root 可读):
    • sudo chmod 600 /etc/pki/tls/private/your_domain.key
  • 测试并重载 Nginx:
    • sudo nginx -t && sudo systemctl reload nginx
  • 验证是否已生效(查看新证书的颁发者与到期时间):
    • echo | openssl s_client -connect your_domain:443 -servername your_domain 2>/dev/null | openssl x509 -noout -issuer -enddate

四、设置自动续期与常见问题

  • 测试自动续期(不真正写盘,验证能否成功):
    • sudo certbot renew --dry-run
  • 加入定时任务(证书有效期为90 天,建议每周或每月尝试续期):
    • 示例(每周日凌晨 2 点续期,3 点重载 Nginx):
      • 0 2 * * 0 /usr/bin/certbot renew >> /var/log/letsencrypt/renew.log 2>&1
      • 0 3 * * 0 /usr/bin/systemctl reload nginx >> /var/log/letsencrypt/nginx-reload.log 2>&1
  • 常见问题与排查
    • Nginx 插件不可用或找不到 Nginx 二进制:安装对应插件(如 python3-certbot-nginx),或改用 --webroot/–manual 方式;确保 PATH 包含 nginx。
    • 续期成功但浏览器仍显示旧证书:清理浏览器缓存/CDN 缓存;如使用 CDN/反向代理/负载均衡,需在各节点或控制台同步更新证书并刷新缓存。
    • 端口与防火墙:确保 443/tcp 已放行(如 firewalld:firewall-cmd --zone=public --add-port=443/tcp --permanent && firewall-cmd --reload)。
    • 权限错误:私钥必须为 600,证书文件建议 644

0