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 自动续签,彻底告别手动维护。

本文到此结束