SSL 错误:版本号错误

Rob*_*ert 1 ssl raspbian

尝试连接 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
Run Code Online (Sandbox Code Playgroud)

这是在运行 rasbian bullseye 的树莓派上。

在同一网络上运行 Ubuntu 22.04 的另一个客户端上,一切正常。

我确实相信 openssl 版本足够好:

python -c 'import ssl; print(ssl.OPENSSL_VERSION)'
OpenSSL 1.1.1n  15 Mar 2022
Run Code Online (Sandbox Code Playgroud)

有什么想法如何解决这个问题吗?

Ste*_*ich 7

curl -vLk https://api.github.com/rate_limit
...
* Connected to api.github.com (140.82.121.6) port 443 (#0)
Run Code Online (Sandbox Code Playgroud)

IP 地址正确。

...
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
Run Code Online (Sandbox Code Playgroud)

这意味着使用了支持 TLS 1.3 的最新 TLS 堆栈。该输出是curl 的OpenSSL 后端的典型输出。到目前为止看起来不错。

* error:1408F10B:SSL routines:ssl3_get_record:wrong version number
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,此错误消息具有误导性。我怀疑您的网络中存在某些东西会拦截流量并回复非 TLS 答案,然后该答案会被解释为 TLS,从而在(非 TLS)回复中发现意外的 TLS 版本。

造成这种情况的典型原因是错误的代理配置、强制门户或网络中的类似内容或防火墙阻止连接。不幸的是,我们对运行树莓派的环境一无所知,因此很难给出更准确的原因。无论如何,问题很可能出在您的机器之外。

编辑:提供的数据包捕获反映了我的预期:

抓包的wireshark显示

可以看出,对 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>
Run Code Online (Sandbox Code Playgroud)

这是基于刷新的重定向到(可能)路径为 的路由器/shn_blocking.html。在互联网上搜索此路径表明这是某些 TP-Link 路由器的功能,可以阻止网站进行家长控制 - 请参阅此处了解特定路由器 TP-Link Deco 的此功能。可能您需要在路由器中专门排除您的树莓派,以便它获得未经过滤的互联网访问。

  • @Robert:*“...它可以在我的另一台机器上运行,连接到同一网络。我很乐意分享有关环境的任何详细信息,”* - 这是家庭网络还是某些公司网络?您是否可以控制网络路由器/防火墙,并可以查看是否有针对工作计算机或非工作计算机的特殊设置?您能否提供 rasperry pi 上失败连接的数据包捕获,即“tcpdump -i any -s0 -w 443.pcap port 443”并提供文件 443.pcap,以便人们可以看到服务器内部的实际内容回复? (2认同)