部分客户端SSL验证失败,寻求证书追踪排查工具
SSL证书链验证排查工具推荐
我们有多台SSL Web服务器,绝大多数客户端可正常访问,但少数客户端无法完成SSL证书链验证,部分失败案例涉及代理服务器,且未使用客户端证书。需要能同时完成追踪服务器返回证书链、查看本地可用证书及加载来源、分析证书链结构、检测多条有效验证路径的排查工具。
结合你遇到的具体场景,以下是针对性的工具及用法:
核心工具与用法
1. OpenSSL(进阶扩展)
基础的openssl s_client可查看服务器返回证书,配合参数可实现更多排查功能:
- 查看服务器返回的完整证书链:
openssl s_client -connect example.com:443 -showcerts - 指定本地证书存储验证结果:
openssl s_client -connect example.com:443 -CApath /path/to/cert-directory -CAfile /path/to/ca-bundle.crt - 配合流量转发工具(如socat)模拟代理环境,验证代理后的证书链
- 适用场景:同一机器验证结果差异、验证问题客户端所见证书链
2. Java专属工具(keytool + jcmd)
针对Java应用验证失败的场景:
- 查看Java默认信任存储的所有证书:
keytool -list -v -keystore $JAVA_HOME/jre/lib/security/cacerts(默认密码changeit) - 检查特定证书是否在信任存储内:
keytool -list -v -keystore cacerts -alias "amazonrootca" - 查看运行中Java应用实际加载的证书存储路径:
jcmd <进程PID> VM.system_properties(查找javax.net.ssl.trustStore相关属性) - 适用场景:Java与其他应用验证结果不一致、Java部分场景失败排查
3. Windows平台:certutil
针对Windows系统中不同证书存储的排查:
- 列出系统根CA证书:
certutil -store Root - 列出当前用户的中间CA证书:
certutil -store CA - 验证证书链并输出详细过程:
certutil -verify -urlfetch example.crt - 适用场景:访问难查看的系统证书存储、验证PowerShell等Windows应用的证书环境
4. Certipy(证书链分析)
用于分析证书链结构、对比差异:
- 解析证书链并展示层级关系:
certipy chain analyze example_chain.pem - 对比同一根CA下不同中间证书的证书链差异:传入两个证书链文件,直接输出结构差异点
- 适用场景:多个端点证书相似但中间证书不同、检测多条有效验证路径
场景对应排查方案
- 同一机器验证结果不一致:针对不同应用使用对应专属工具验证(Java用keytool,PowerShell用certutil,自定义应用配合openssl指定其证书存储)
- 同一根CA不同中间证书:用Certipy对比证书链结构,结合openssl确认服务器返回的中间证书是否完整
- Java部分场景失败:用jcmd确认应用实际加载的信任存储,对比成功/失败场景的证书差异,检查代理证书是否加载到对应存储
内容的提问来源于stack exchange,提问作者Jason Hiatt
相关产品推荐
相关产品推荐

