证书关键字段
X.509 证书本质上是一组带签名的字段,排查问题只需要看几个关键的:Subject 里的通用名、真正决定域名是否匹配的 SAN、有效期、用途限制,以及链上的签发者标识。现代校验一律以 SAN 为准,Subject CN 只是历史遗留字段;链的构建依赖签发者名称与 AKI/SKI 标识。
基本信息
| 主体 | Subject,含 CN(通用名)、O(组织)、OU(部门) |
|---|---|
| 生效域名 | subjectAltName,可包含多个 DNS 名与 IP 地址 |
| 有效期 | Not Before / Not After,时间以 UTC 记录 |
| 用途限制 | Key Usage 与 Extended Key Usage,如 serverAuth、clientAuth |
| 链标识 | Authority Key Identifier 与 Subject Key Identifier |
| 指纹 | SHA-256 fingerprint,用于比对部署的是哪一份证书 |
典型使用场景
- 线上报证书不受信任:先确认链是否完整、SAN 是否覆盖访问的域名
- 证书续签后核对指纹,避免灰度机器上仍挂着旧证书
- 排查「只在部分客户端报错」:EKU 或签名算法不被老客户端接受
- 做资产审计:批量导出到期时间与 SAN 列表,建立到期提醒
- 网关替换证书后握手失败,确认证书与私钥是否配套
- 合规检查:确认签名算法、密钥长度与曲线是否符合规范要求
最小示例
最小示例
openssl x509 -in cert.pem -noout -text | head -60 # 完整字段
openssl x509 -in cert.pem -noout -dates -subject -issuer # 有效期与主体、签发者
openssl x509 -in cert.pem -noout -ext subjectAltName # 只看生效域名
openssl x509 -in cert.pem -noout -fingerprint -sha256 # 指纹比对
openssl x509 -noout -modulus -in cert.pem | openssl md5 # 证书公钥模数
openssl rsa -noout -modulus -in key.pem | openssl md5 # 私钥模数,两者应一致字段怎么读
| 字段 | 含义 | 易错点 |
|---|---|---|
| Subject CN | 旧式域名字段 | 现代浏览器只看 SAN,CN 写对也可能不生效 |
| SAN | 生效域名列表 | 漏配域名即不匹配,IP 访问也要单独写进 SAN |
| Validity | 起止时间 | 时区与时钟偏差会造成过期误判 |
| EKU | 用途限制 | 缺 serverAuth 会被客户端拒绝握手 |
| AKI / SKI | 链匹配标识 | 缺失会导致链构建失败 |
| Signature Algorithm | 签名算法 | 老旧算法在合规场景会被判不合格 |
多域名与通配证书的正确性一律以 SAN 为准:*.example.com 不覆盖裸域 example.com,也不覆盖 a.b.example.com,通配符只匹配一级。
私钥与证书不配套时握手会在服务端直接失败,日志通常只给一句含糊的 key values mismatch,先用模数比对确认再排其他方向。