SSL证书过期怎么解决
a
admin
作者
2026-07-14
发布日期
约 7 分钟
阅读时间
SSL 证书过期是个高频问题,处理起来其实不复杂,但速度很关键——证书一过期,用户看到”不安全”警告,流量和转化立刻受影响。
第一步:确认证书是否真的过期
打开浏览器访问你的网站,点地址栏的小锁图标 → “证书”,查看有效期。
或者用命令行查:
echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null | openssl x509 -noout -dates
输出会显示 notAfter(失效时间),能明确判断是否过期。
第二步:立即重新申请证书
用本站免费申请:填写域名 → 选验证方式 → 完成验证 → 下载证书,全程 3 分钟。
或者用 acme.sh 命令行申请:
acme.sh --issue -d example.com --webroot /var/www/html
申请成功后拿到两个文件:
- •证书文件(
.crt或.pem) - •私钥文件(
.key)
第三步:替换服务器证书文件
把新证书上传到服务器,替换旧的证书文件。路径以你的 Web 服务配置为准。
Nginx 配置示例
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt; # 新证书
ssl_certificate_key /etc/nginx/ssl/example.com.key; # 新私钥
# 其他配置...
}
Apache 配置示例
<VirtualHost *:443>
ServerName example.com
SSLCertificateFile /etc/apache2/ssl/example.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/example.com.key
# 其他配置...
</VirtualHost>
第四步:测试配置并重启服务
先测试配置是否正确:
# Nginx
nginx -t
# Apache
apachectl configtest
测试通过后重载服务:
# Nginx
nginx -s reload
# 或
systemctl reload nginx
# Apache
systemctl reload apache2
# IIS(Windows)
iisreset
第五步:验证证书已更新
浏览器访问网站,强制刷新(Ctrl+F5),点小锁查看证书有效期——应该显示新的过期时间。
或者命令行验证:
echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null | openssl x509 -noout -dates
常见问题排查
替换后还是显示旧证书
原因:浏览器缓存或 CDN 缓存。
解决:
- •浏览器强制刷新(Ctrl+F5)或清除缓存
- •如果用了 CDN(如 Cloudflare、宝塔 CDN),进入 CDN 后台清除缓存
- •等几分钟让缓存自然过期
Nginx 重载失败
原因:证书路径错误或证书格式不对。
排查:
# 检查证书文件是否存在
ls -l /etc/nginx/ssl/example.com.crt
# 检查证书内容
openssl x509 -in /etc/nginx/ssl/example.com.crt -noout -text | head -20
# 检查私钥是否匹配证书
openssl x509 -noout -modulus -in example.com.crt | openssl md5
openssl rsa -noout -modulus -in example.com.key | openssl md5
两个 md5 值相同说明证书和私钥匹配。
证书链不完整
浏览器提示”证书无效”但证书确实没过期,可能是中间证书缺失。
解决:把中间证书拼接到证书文件后面:
cat your_domain.crt intermediate.crt > fullchain.crt
Nginx 配置用 fullchain.crt 而不是单独的 your_domain.crt。
如何预防证书过期
方案一:acme.sh 自动续签(推荐)
配置一次,永久免维护:
acme.sh --install-cert -d example.com \
--key-file /etc/nginx/ssl/example.com.key \
--fullchain-file /etc/nginx/ssl/example.com.crt \
--reloadcmd "systemctl reload nginx"
acme.sh 会自动在到期前 30 天续签并重载 Nginx。
方案二:监控提醒
- •ZeroSSL 邮件提醒:证书到期前 30 天和 7 天自动发邮件
- •Uptime Robot:免费监控证书状态,过期前提醒
- •宝塔面板:面板首页能看到证书到期时间
方案三:日历提醒
在手机日历或待办工具里设置提醒,证书到期前 15 天通知。
结论
证书过期处理流程:确认过期 → 重新申请 → 替换文件 → 重启服务 → 验证。
长期方案是配 acme.sh 自动续签,彻底告别手动维护。
—
本文到此结束
—