在centos服务器上为网站启用https需配置有效ssl证书并实现90天内自动续期,否则浏览器将显示不安全警告;须安装certbot及nginx插件、申请证书、验证有效性、配置每日自动续期任务。

在CentOS服务器上为网站启用HTTPS,必须配置有效SSL证书并确保90天内自动续期,否则浏览器将显示不安全警告,用户访问会中断。
安装Certbot及Nginx插件
先确认系统版本:运行 cat /etc/redhat-release,输出需含“CentOS Linux release 8”或“CentOS Stream 9”字样。
更新系统:sudo dnf update -y(CentOS 8/9均适用)。
安装EPEL仓库时若报GPG密钥错误,执行:rpm --import https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-8 → sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm -y。
安装Certbot主程序和Nginx插件:sudo dnf install certbot python3-certbot-nginx -y。
验证安装成功:certbot --version,输出应为 【certbot 2.10.0 或更高版本】;低版本可能无法兼容当前Let’s Encrypt ACME v2接口。
申请并自动配置HTTPS证书
方法一:全自动模式(推荐,适用于标准Nginx安装)
执行:sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com。
按提示输入邮箱(用于到期通知)→ 输入 A 同意条款 → 选择对应域名编号 → 选 2 强制HTTP跳转HTTPS。
方法二:离线编译Nginx专用路径适配(如Nginx装在 /usr/local/nginx)
创建配置文件:sudo tee /etc/letsencrypt/cli.ini nginx-ctl = /usr/local/nginx/sbin/nginx
nginx-server-root = /usr/local/nginx/conf
EOF。
再运行:sudo certbot --nginx -d yourdomain.com,Certbot即可正确调用你的Nginx二进制与配置目录。
注意:若Nginx未运行,此步会失败;请先执行 sudo systemctl start nginx 并确认端口80/443未被其他进程占用。
验证证书有效性
检查证书文件是否存在:sudo ls -l /etc/letsencrypt/live/yourdomain.com/。
应看到四个关键文件:cert.pem、privkey.pem、chain.pem、fullchain.pem。
测试HTTPS访问:curl -I https://yourdomain.com,返回状态码应为 HTTP/2 200 或 HTTP/1.1 200 OK,且无证书告警。
若返回 curl: (60) SSL certificate problem,说明Nginx未加载 fullchain.pem,而是误用了 cert.pem —— 请立即修正配置中 ssl_certificate 指向路径。
配置每日自动续期
第一步:测试续期流程是否通畅
运行:sudo certbot renew --dry-run,观察输出末尾是否出现 ** DRY RUN: simulating 'certbot renew' close to cert expiry 及 ** The dry run was successful.。
第二步:编辑root用户的crontab
执行:sudo crontab -e,在末尾新增一行:0 3 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"。
第三步:确认定时任务已生效
执行:sudo crontab -l,核对刚添加的行是否存在;若无输出,说明未保存退出,请重新编辑。
这行cron表示每天凌晨3点执行续期检查,仅当证书剩余有效期不足30天时才真正更新,并在更新后自动重载Nginx配置。使用 --quiet 可避免无变更时发送冗余邮件。
手动触发续期并验证结果
强制更新一次证书(用于调试或紧急场景):sudo certbot renew --force-renewal。
查看最新证书详情:sudo openssl x509 -in /etc/letsencrypt/live/yourdomain.com/fullchain.pem -text -noout | grep "Not After"。
输出应显示新日期,且比当前时间晚约90天。
检查Nginx是否已加载新证书:sudo nginx -t && sudo systemctl reload nginx,这一步必须执行,否则旧证书仍生效。











