检查证书链时,最好分别回答两个问题:服务器发送了什么,当前电脑又信任什么。浏览器图形界面适合快速浏览,命令行更适合保留证据、比较节点和加入自动化检查。下面的命令都以www.example.com 为示例,使用时应替换为真实域名。
Windows用浏览器查看证书层级
在Edge或Chrome中打开目标网站,进入连接信息并查看证书。证书路径或证书层级通常会显示服务器证书、中间CA和根CA。依次打开每一级,记录主题、签发者、序列号、指纹和有效期。
图形界面显示的是Windows或浏览器最终构建出的路径,可能包含本地缓存补齐的中间证书。它适合判断当前电脑能否建立信任,但不一定完整反映服务器在TLS握手中实际发送的证书。
Windows使用certutil验证证书文件
先从浏览器或服务器导出待检查的服务器证书,例如保存为 server.cer,然后在命令提示符中执行:
certutil -dump server.cer
certutil -verify server.cer
certutil -verify -urlfetchserver.cer
dump用于查看证书字段;verify会构建并验证证书链;加入-urlfetch后,Windows会尝试访问证书中声明的相关URL,以获取中间证书或吊销信息。企业环境可能限制外部访问,因此网络失败与证书签名失败应分别记录。微软文档说明,在没有额外指定CA文件时,certutil会为证书构建完整链并进行验证。
Windows查看本机信任库
运行 certmgr.msc 可以查看当前用户证书存储;运行 mmc 后添加“证书”管理单元,可以选择当前用户或本地计算机。重点检查“受信任的根证书颁发机构”和“中间证书颁发机构”。服务器程序通常使用本地计算机存储,而普通用户应用可能同时受到用户存储影响。
排查时不要随意删除或导入根证书。根证书决定系统信任边界,企业设备上的变更应由管理员通过组策略或设备管理平台完成。
Linux查看服务器发送的证书
OpenSSL的s_client可以直接观察TLS握手。servername参数用于发送SNI;同一IP托管多个站点时,如果缺少它,服务器可能返回默认站点证书。
openssl s_client -connectwww.example.com:443 -servername www.example.com -showcerts </dev/null
openssl s_client -connectwww.example.com:443 -servername www.example.com -verify_return_error</dev/null
输出中的Certificate chain列出服务器发送的证书。数字0通常对应服务器证书,后续条目是服务器提供的中间证书。Verifyreturn code为0通常表示在当前OpenSSL信任环境中验证成功,但仍要核对连接域名和验证参数。
s_client默认是诊断工具,即使出现验证错误也可能继续连接。自动化脚本应使用-verify_return_error,并检查进程退出状态,不能只搜索“CONNECTED”字样。
Linux拆分和查看PEM证书
如果已经取得PEM格式证书,可以逐张查看主题、签发者、有效期、序列号和指纹:
openssl x509 -in server.pem-noout -subject -issuer -dates -serial -fingerprint -sha256
openssl x509 -inintermediate.pem -noout -subject -issuer -text
服务器证书的Issuer应能对应中间证书的Subject。随后继续向上检查,直到能够连接到本机信任库中的根。仅凭证书文件名无法确认关系,复制文件时也不要依赖“root”“ca-bundle”等名字猜测内容。
Linux验证服务器证书和中间证书
准备服务器证书、中间证书和可信根文件后,可以显式验证路径:
openssl verify -CAfileroot.pem -untrusted intermediate.pem server.pem
CAfile放置信任锚,untrusted参数提供构建路径所需但不直接作为信任锚的中间证书。输出OK说明这组文件能够构成有效路径;如果提示unableto get local issuer certificate,应检查是否缺少中间证书或使用了不匹配的链。生产环境还应结合系统信任库、主机名验证和吊销策略完成检查。
为什么Windows正常而Linux失败
Windows可能通过系统更新、企业策略或证书扩展自动取得中间证书;Linux容器往往只带精简的CA包,也可能长期没有更新。两边使用的信任库和路径构建策略不同,结果自然可能不同。
遇到差异时,应同时保存服务器实际发送的证书链、两个系统的根证书库版本和完整错误信息。不要因为某个平台验证成功,就把另一个平台的失败简单归因于“系统兼容性”。很多时候,服务器补齐中间证书后,所有客户端都会恢复。
把检查结果留给下一次续期
证书替换完成后,记录域名、测试时间、解析IP、服务器证书SHA-256指纹、链中各证书主题和最终验证结果。下次续期出现异常时,这份记录可以快速判断是证书换错、节点未同步,还是信任库发生了变化。