OpenSSL s_client:代理返回的 403 发生在目标 TLS 之前
把 OpenSSL 代理上 CONNECT 的 403 理解为隧道阶段的失败,不要根据一次从未开始的握手去诊断目标证书。
如果 openssl s_client 在通过代理发出 CONNECT 请求后收到 HTTP 403,就先从这个拒绝着手。 所请求的隧道并未建立。
加上 -proxy 时,s_client 先请 HTTP 代理连接 -connect 指定的目标。只有 CONNECT 成功应答,这段交换才会转成通往目标 TLS 握手的隧道。
正是这个顺序解释了那些看似混乱的输出:代理报错之后仍出现 TLS 相关的标题、没有对端证书,或者出现一行看起来令人安心的校验信息。这些字段并不能证明已收到并验证了目标证书。操作在更早的阶段就停住了。
记录代理的应答以及请求的目标主机和端口。403 指向代理的访问决策;407 则要求代理认证。关闭目标证书校验不能修复其中任何一种情况。
在允许检查这段交换时,s_client 的 -debug 输出有助于暴露这次拒绝。任何代理凭据都不要留在共享的抓包记录里。隧道成功之后仍需单独评估 TLS 与证书,但在真正走到那一步之前,并没有可供诊断的目标证书链。