我正在尝试执行以下命令:
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_proxy
、http_proxy
或变量。而是不使用代理。HTTPS_PROXY
HTTP_PROXY
openssl s_client