最直接可靠的方式是用openssl x509 -in cert.crt -noout -dates查看生效与过期时间;仅验是否过期可用-checkend参数;远程证书需结合s_client -showcerts提取后解析;证书链顺序必须为叶→中间→根,否则验证失败。

直接看证书是否生效、有没有过期,是运维中最常做的两件事。不用打开浏览器点来点去,也不用等用户投诉,几条命令就能快速确认。
用 OpenSSL 命令查有效期
这是最常用、最可靠的方式,适用于所有 Linux/Unix 系统:
- 执行 openssl x509 -in /path/to/certificate.crt -noout -dates,会输出类似:
notBefore=May 10 08:23:45 2025 GMT<br>notAfter=Aug 08 08:23:44 2026 GMT
- 如果只关心是否已过期,可加
-check_date参数验证某一天: openssl x509 -in /etc/ssl/certs/example.com.crt -check_date 20260612234400Z -noout -text(当前时间格式为 YYYYMMDDHHMMSSZ) - 想算还剩多少天?用这条一行命令:
expr $(($(date -d "$(openssl x509 -in /etc/ssl/certs/example.com.crt -noout -enddate | cut -d= -f2)" +%s) - $(date +%s))) / 86400
检查 Apache 是否加载了该证书
光有证书文件还不够,得确认 Apache 正在用它:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 运行 sudo apache2ctl -S(Ubuntu/Debian)或 sudo httpd -S(CentOS/RHEL),查看输出中 SSL 虚拟主机的
SSLCertificateFile路径是否指向你预期的文件 - 检查配置里是否启用了 HTTPS:
确认SSLEngine on已启用,且SSLCertificateFile和SSLCertificateKeyFile路径存在、权限正确(私钥通常需 root 可读,其他用户不可读) - 重载后测试语法:
sudo apachectl configtest 或 sudo apache2ctl configtest,无报错才说明配置被 Apache 正确识别
验证安装是否真正生效
配置没问题 ≠ 浏览器能访问。要模拟真实连接:
- 用 openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 连接,看返回的证书信息是否与本地文件一致(注意比对
Subject和Issuer字段) - 加
-showcerts参数可打印完整证书链,确认中间证书没缺失 - 如果返回空或报错
unable to get local issuer certificate,大概率是没配SSLCertificateChainFile或证书链顺序不对
自动化监控建议
人工查容易漏,尤其多站点时:
- 写个简单脚本,每天用
openssl x509 -in ... -noout -enddate提取过期时间,对比当前日期,剩余 ≤30 天就发邮件或写入日志 - 配合 cron 定时执行,例如每周一凌晨两点检查:
0 2 * * 1 /usr/local/bin/check-ssl-expiry.sh >> /var/log/ssl-check.log 2>&1 - 更进一步可用 Prometheus + Blackbox Exporter,把证书剩余天数暴露为指标,接入 Grafana 做可视化告警

















