使用 OpenSSL 通过 HTTP 代理检查网站证书
通过 HTTP CONNECT 代理使用 OpenSSL s_client,并保持目标名称、SNI 与证书验证一致。
使用支持 s_client 的已安装 OpenSSL -proxy。对于获准使用的 HTTP CONNECT 端点:
openssl s_client -proxy proxy.example:3128 -connect example.com:443 -servername example.com -verify_hostname example.com -verify_return_error -showcerts替换代理地址,并始终使用预期的目标名称。要通过可选代理测试公共目标,从HTTP 代理列表中选择候选项。-connect选择目标,-servername为目标的 TLS 虚拟主机发送 SNI,-verify_hostname检查身份。仅有 SNI 并不等于主机名验证。调整选项时,请查看已安装版本的手册。
-showcerts显示服务器发送的内容,但不表示证书链受到信任。-verify_return_error会让验证错误终止握手;否则诊断客户端可能在错误后继续。对于私有服务,应使用获准的 CA 材料,不要信任随意下载的证书。
| 结果 | 阶段 |
|---|---|
| 407 | 目标 TLS 之前的代理认证。 |
| CONNECT 目标被拒绝 | 代理目标策略。 |
| 收到证书并尝试验证 | 通过已接受隧道进行的目标 TLS 交换。 |
使用 OpenSSL 3.x 和采用 Basic 认证的 HTTP 代理时,在保留目标验证的同时使用s_client 代理账户选项。
仅支持 SOCKS 的端点不提供此命令使用的 HTTP 代理接口。在获准的 TLS 拦截中,显示的证书可能由该中间方签发。将差异归因于网站故障前,请比较其签发者和预期的信任安排。