首页/安全/渗透测试与安全评估速查/证书链与有效期检查
常见漏洞验证121 条

证书链与有效期检查

证书问题影响可用性与信任:检查有效期、链完整性、域名覆盖与吊销状态(OCSP/CRL 配置)。

证书检查看三件事

TLS 证书检查回答三个问题:信任链能不能建立、什么时候到期、覆盖了哪些域名。链不完整时部分客户端(多为移动端与老旧 Java 运行时)会直接握手失败,而浏览器因缓存中间证书往往看不出问题;过期则是典型的可用性事故,属于必须在评估阶段先排掉的项。

基本信息

适用平台所有 HTTPS/TLS 服务:Web、API、邮件、控制台
常用工具openssl s_client、sslscan、浏览器证书面板
关键参数-servername 指定 SNI,否则拿到默认站点证书
记录项主体、SAN、签发者、有效期、链顺序

典型使用场景

  • 上线前验证证书链完整,避免部分客户端无法访问
  • 整理证书到期台账,防止过期事故
  • 检查多域名与泛域名覆盖是否与业务域名一致
  • 排查“浏览器正常、App 报错”这类信任链差异问题
  • 核查内部自建 CA 场景下的信任链与吊销配置

检查示例

检查示例
echo | openssl s_client -connect app.example.com:443 -servername app.example.com -showcerts 2>/dev/null | openssl x509 -noout -dates -subject -issuer   # 看有效期与主体
echo | openssl s_client -connect app.example.com:443 -servername app.example.com -showcerts 2>/dev/null | openssl x509 -noout -ext subjectAltName        # 看域名覆盖
echo | openssl s_client -connect app.example.com:443 -servername app.example.com -CAfile chain.pem 2>&1 | grep -i 'verify'   # 验证链是否可构建

输出逐项读法

输出项含义异常表现
notBefore/notAfter证书生效与到期时间剩余天数过少即需列入续期排期
subject证书主体(CN)与访问域名不一致
subjectAltName实际覆盖域名列表缺少 API 域、静态资源域或旧域名
issuer签发证书的 CA自签证书出现在对外服务上
Verify return code链校验结果非 0 即链不完整或信任缺失
CA/Browser Forum 已通过决议分阶段缩短证书最长有效期,签发周期越来越短:续期流程要尽早自动化,具体时间表以官方公告为准。
只测主域名是常见遗漏:API 域、静态资源域、移动端接口域、邮件与内网控制台都要纳入台账,并记录责任人与到期日。
吊销状态(OCSP/CRL)同样在检查范围内:客户端在 OCSP 响应器不可达时的行为随实现而异,自建 CA 场景要把响应器可用性与超时策略一并核查,否则吊销证书可能仍被接受。

易错点

  • 不带 -servername 检查,取到的是默认站点证书,结论与真实站点不符
  • 只看主域名,漏掉 API 与静态资源域,上线后由第三方客户端先暴露问题
  • 链中缺中间证书:浏览器正常但移动端与部分运行时失败,排查成本极高
  • 本地 openssl 版本过旧,导致协议或扩展支持被误判为服务端问题
  • 证书到期只靠人工记忆,没有台账与提醒,最终以事故形式发现
  • 在对外服务上使用自签或内部 CA 证书,浏览器与移动端直接拒绝连接,表现为整站不可用

数据来源与参考

  • RFC 5280(证书与 CRL)
  • CA/Browser Forum 基线要求
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌