免费SSL证书申请与自动续期,CMS站点适用
免费SSL证书申请与自动续期:CMS站点实操指南
给 CMS 站点启用 HTTPS 并不复杂,用 acme.sh 配合 Let's Encrypt 即可申请免费证书,再通过计划任务实现自动续期。
本文面向零基础站长,从准备条件到验证结果逐步说明,完成后面板或命令行都能量化检查证书状态。
开始前确认三个条件: 域名已解析到服务器 IP;
80 或 443 端口可被外网访问;
服务器已安装 Nginx 或 Apache(宝塔面板用户默认已装)。
验证解析是否生效:
dig +short yourdomain.com
# 或
ping yourdomain.com
返回的 IP 与服务器公网 IP 一致即可继续。
方式一:宝塔面板申请(适合不熟悉命令行的用户)
登录宝塔面板,进入「网站」→ 点击目标站点「设置」→「SSL」→「Let's Encrypt」。
勾选需要签发的域名,文件验证方式保持默认,点击「申请」。
申请成功后,
面板会提示证书有效期。宝塔默认会为 Let's Encrypt 证书添加续期计划任务,
可在「计划任务」列表中查看名为 续签Let's Encrypt证书 的任务,
确认其状态为正常。
验证证书是否生效:
curl -I https://yourdomain.com
# 返回 HTTP/2 200 且无证书警告即表示成功
方式二:acme.sh 命令行申请(适合自建环境)
安装 acme.sh(普通用户即可,无需 root):
curl https://get.acme.sh | sh -s email=you@example.com
source ~/.bashrc
使用 webroot 模式签发证书,假设站点根目录为 /www/wwwroot/yourdomain:
acme.sh --issue -d yourdomain.com -d www.yourdomain.com \
--webroot /www/wwwroot/yourdomain
签发成功后,用 --install-cert 将证书部署到 Nginx 目录并设置重载命令:
acme.sh --install-cert -d yourdomain.com \
--key-file /etc/nginx/ssl/yourdomain.key \
--fullchain-file /etc/nginx/ssl/yourdomain.pem \
--reloadcmd "nginx -s reload"
在 Nginx 站点配置中加入 HTTPS 监听:
server {
listen 443 ssl http2;
server_name yourdomain.com www.yourdomain.com;
ssl_certificate /etc/nginx/ssl/yourdomain.pem;
ssl_certificate_key /etc/nginx/ssl/yourdomain.key;
# 其余 CMS 伪静态和 PHP 配置保持原样
}
执行 nginx -t 检查语法,无误后 nginx -s reload 重载。
自动续期是怎么工作的
acme.sh 安装时会自动创建 cron 任务,默认每天检查一次证书有效期,剩余不足 30 天时自动续签。
查看任务是否写入:
crontab -l | grep acme
手动测试续期流程(不会真正签发,只验证配置):
acme.sh --renew -d yourdomain.com --force --dry-run
如果输出 Cert success 之类信息且无报错,说明自动续期链路正常。
宝塔面板用户则无需手动操作,默认任务已覆盖续期。
容易踩的几个坑
验证失败多半是解析或端口问题。 签发时提示 Timeout during connect,先确认域名解析正确、80 端口未被防火墙拦截。
云服务器安全组需放行 80 和 443。
证书路径写错导致 Nginx 启动失败。 修改配置后务必先 nginx -t,通过后再 reload,避免站点直接中断。
续期后未重载服务。 命令行方式必须通过 --install-cert 的 --reloadcmd 指定重载命令,否则证书更新了但 Nginx 仍加载旧证书。
CMS 后台仍显示 HTTP。 部分 CMS 需要手动把站点地址改为 https://,并检查主题或插件中是否有硬编码的 http 链接,否则会出现混合内容警告。
如何确认一切正常
浏览器访问站点,地址栏显示锁图标且无警告;
点击锁图标查看证书有效期和签发机构。
命令行可用 openssl 直接检查:
echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -dates
输出的 notAfter 即证书到期时间,正常应为当前日期后约 90 天。
等到临近到期时再执行一次检查,确认自动续期已生效即可。
常见疑问
免费证书能用多久? Let's Encrypt 证书有效期通常为 90 天,因此自动续期是必要环节,不是可选项。
自动续期失败怎么办? 先看 acme.sh --cron 的输出日志,再确认 80 端口是否仍可访问、webroot 目录是否变化。
修复后手动执行一次 --renew 即可恢复。
可以同时给多个 CMS 站点申请吗? 可以。
每个域名单独执行一次 --issue,证书路径和重载命令分别配置,互不影响。
完成以上步骤后,你的 CMS 站点就具备免费 SSL 证书和自动续期能力。
后续如果更换服务器或迁移站点,记得把 acme.sh 的 cron 任务和证书目录一并迁移,避免续期中断。