尝试连接 github 时出现以下错误:
curl -vLk https://api.github.com/rate_limit
* Trying 140.82.121.6:443...
* Connected to api.github.com (140.82.121.6) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
* CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* error:1408F10B:SSL routines:ssl3_get_record:wrong version number
* Closing connection 0
curl: (35) error:1408F10B:SSL routines:ssl3_get_record:wrong version number
这是在运行 rasbian bullseye 的树莓派上。
在同一网络上的另一个运行 Ubuntu 22.04 的客户端上,一切运行正常。
我确实相信 openssl 版本足够好:
python -c 'import ssl; print(ssl.OPENSSL_VERSION)'
OpenSSL 1.1.1n 15 Mar 2022
有什么想法可以解决此问题吗?
答案1
curl -vLk https://api.github.com/rate_limit
...
* Connected to api.github.com (140.82.121.6) port 443 (#0)
IP地址正确。
...
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
这意味着使用了支持 TLS 1.3 的最新 TLS 堆栈。输出对于 curl 的 OpenSSL 后端来说是典型的。到目前为止看起来不错。
* error:1408F10B:SSL routines:ssl3_get_record:wrong version number
此错误消息在大多数情况下具有误导性。我怀疑您的网络中存在某种东西,它会拦截流量并以非 TLS 答案进行回复,然后将其解释为 TLS,因此在(非 TLS)回复中会发现意外的 TLS 版本。
造成这种情况的典型原因是错误的代理配置、网络中的强制门户或类似情况或防火墙阻止连接。不幸的是,我们对运行此 rasperry pi 的环境一无所知,因此很难给出更准确的原因。无论如何,问题很可能出在您的机器之外。
编辑:提供的数据包捕获反映了我的预期:
可以看出,对 TLS Client Hello 的回复是以下普通的 HTTP 响应:
HTTP/1.1 200 OK
Server: Jetty/4.2.x (Windows XP/5.1 x86 java/1.6.0_17)
Content-Type: text/html
Content-Length: 186
Accept-Ranges: bytes
<html>
<head>
<meta HTTP-EQUIV="REFRESH" content="0; url=http://192.168.68.1:80/shn_blocking.html?cat_id=56&mac=B827EBDA723E&domain=api.github.com">
</head>
<body></body>
</html>
这是基于刷新的重定向(可能)到路由器,路径为/shn_blocking.html
。在互联网上搜索此路径表明这是某些 TP-Link 路由器的一项功能,可以阻止网站进行家长控制 - 请参阅了解您的特定路由器 TP-Link Deco 的此功能。您可能需要在路由器中专门排除您的 rasperry pi,以便它获得未过滤的互联网访问。