一个老问题但每天都有人踩坑。SSL证书过期导致网站打不开,用户看到的是「您的连接不是私密连接」,不管内容多好,第一印象已经毁了。
为什么证书会过期
Lets Encrypt的免费证书有效期只有90天。很多人第一次配好以后就忘了,三个月后网站突然挂了才想起来。手动续签不是不行,但人总会忘。
方案一:Certbot自动续签(最常用)
安装certbot以后,它会自动添加一个cron任务或systemd timer,每天检查两次证书状态,到期前30天自动续签。如果你用的是Nginx或Apache,certbot会自动重载配置。
安装命令:apt install certbot python3-certbot-nginx,然后certbot --nginx -d yourdomain.com。装完以后可以用certbot renew --dry-run测试一下。
注意:证书所在的目录权限要正确。遇到过续签失败的情况,排查下来是/home目录权限改成了700导致certbot读不到验证文件。
方案二:宝塔面板的自动续签
如果你用宝塔面板,SSL页面有个「自动续签」的开关,打开就行。宝塔会在证书到期前自动续签并部署。但有个坑:如果你的站点用了CDN,续签时的域名验证可能会失败,因为Let'''s Encrypt的验证请求被CDN拦截了。解决办法是续签前临时暂停CDN,或者改用DNS验证方式。
方案三:acme.sh(最灵活)
acme.sh是纯shell实现的ACME客户端,比certbot轻量,而且支持更多DNS服务商的API自动验证。如果你有几十个域名需要管理,acme.sh的批量操作更好用。
安装:curl https://get.acme.sh | sh。支持阿里云、Cloudflare、腾讯云等几十个DNS服务商的API,一条命令搞定泛域名证书。
方案四:Caddy自动HTTPS
如果你还没选Web服务器,Caddy是一个自带自动HTTPS的选项。配置Caddyfile写上域名,Caddy会自动申请和续签证书,完全不需要任何手动操作。缺点是需要换掉现有的Nginx或Apache。
最终建议
已经用Nginx或Apache的,装certbot并确认cron任务在跑。用宝塔的,打开自动续签开关。域名多的,上acme.sh。别等到用户投诉「网站打不开」才想起来证书过期了——那时候已经丢了很多流量。
标签: SSL证书 https Let's Encrypt 网站安全 问题解答
还木有评论哦,快来抢沙发吧~