Apache不内置证书巡检功能,需用openssl解析本地证书文件(如openssl x509 -in cert.pem -noout -dates)或通过openssl s_client实时获取线上证书信息,再计算剩余天数并预警。

在 Apache 环境中,SSL 证书本身是独立于 Apache 运行的文件,Apache 只是读取并使用它们。因此查看证书过期时间与详情,核心是用 openssl 解析证书文件(或实时抓取线上证书),而不是通过 Apache 自身命令。以下方法均适用于 macOS 和 Linux 服务器,无需重启 Apache。
查看本地证书文件的过期时间和完整详情
这是最常用、最可靠的方式,适用于你已知证书路径(如 /etc/ssl/certs/example.com.crt 或 Let’s Encrypt 的 fullchain.pem)的情况。
- 查完整详情(含域名、颁发者、有效期、SAN 列表等):
openssl x509 -in /path/to/cert.pem -text -noout - 只看有效期(简洁输出):
openssl x509 -in /path/to/cert.pem -noout -dates - 单独提取“过期时间”字段(方便脚本处理):
openssl x509 -in /path/to/cert.pem -noout -enddate | cut -d= -f2-
查看 Apache 实际使用的线上证书(带 SNI)
该方式模拟真实浏览器访问,能验证当前服务端是否正确返回了证书(尤其适合排查配置错误、中间证书缺失等问题)。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 获取并解析证书文本:
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -text -noout - 仅显示有效期(推荐日常快速检查):
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates - 计算剩余天数(终端直接显示数字):
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -enddate | awk -F= '{print $2}' | xargs -I{} date -d "{}" +%s 2>/dev/null | xargs -I{} echo $(( ({} - $(date +%s)) / 86400 ))
确认证书链是否完整可信
即使证书没过期,若中间证书缺失或顺序错误,浏览器仍会报“不安全”。可用以下命令验证信任链:
- 验证本地证书文件是否被系统信任:
openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt /path/to/fullchain.pem
输出OK表示链完整;若报unable to get issuer certificate,说明缺中间证书。 - 模拟客户端握手并验证(更贴近真实场景):
openssl s_client -connect example.com:443 -servername example.com -showcerts 2>/dev/null | openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt
看到多行verify return:1即表示各级证书均验证通过。
小贴士:Apache 配置中常见证书路径参考
检查你的虚拟主机配置(如 /etc/apache2/sites-enabled/ 或 /etc/httpd/conf.d/ssl.conf),重点关注这几行,它们指向实际使用的证书文件:
-
SSLCertificateFile—— 域名证书(.crt 或 .pem) -
SSLCertificateKeyFile—— 私钥文件(.key) -
SSLCACertificateFile或合并到SSLCertificateFile中 —— 中间证书链
找到路径后,把对应文件传给上面任一 openssl 命令即可精准检查。

















