openssl s_client 向 github.com 返回 errono=54

openssl s_client 向 github.com 返回 errono=54

我正在尝试执行以下命令:

openssl s_client -connect github.com:443
openssl s_client -connect github.com:443 -servername github.com

但我都参加了:

CONNECTED(00000005)
write:errno=54
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 316 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---

我在 MacOS BigSur 中使用代理。有趣的是,使用curl可以正常工作:curl https://github.com返回 github html 页面。

另一件重要的事情是,如果我在 chrome 中输入 github.com,我会得到我的代理公司证书作为 github 公共证书的 CA。在我的 macos 中,我已经在 Keychan App 中安装了所有 CA 证书,但没有用。

答案1

errno=54表示连接被对等端 (ECONNRESET) 或某个自称对等端的设备重置。鉴于您的基础设施使用代理,因此代理很可能是导致问题的原因。

在我的 macos 中,我已经安装了 Keychan App 内的所有 CA 证书,但没有作用。

这没有帮助,因为不是本地代码在检查服务器证书时遇到了问题。它甚至没有获取服务器证书进行验证,这可以从以下输出中看到:

SSL 握手已读取 0 个字节并写入 316 个字节

这意味着 TCP 连接成功,已写入 ClientHello(316 字节),但未收到任何内容(0 字节),这意味着未收到任何服务器证书。这种行为在基于 DPI 的防火墙中很常见。

有趣的是,使用 curl 可以正常工作......

curl 和浏览器可能会使用显式代理,在这种情况下,它们将执行 CONNECT 请求以通过代理建立隧道,而不是直接连接到网站。请检查https_proxyhttp_proxy或变量。而是不使用代理。HTTPS_PROXYHTTP_PROXYopenssl s_client

相关内容