curl:(35)错误:1408F10B:SSL例程:ssl3_get_record:版本号错误

Ber*_*ger 48 ssl curl

当我尝试使用curl(或libcurl)连接到任何服务器(例如google.com)时,我收到错误消息:

curl:(35)错误:1408F10B:SSL例程:ssl3_get_record:版本号错误

详细输出:

$ curl www.google.com --verbose  
* Rebuilt URL to: www.google.com/  
* Uses proxy env variable no_proxy == 'localhost,127.0.0.1,localaddress,.localdomain.com'  
* Uses proxy env variable http_proxy == 'https://proxy.in.tum.de:8080'  
*   Trying 131.159.0.2...  
* TCP_NODELAY set  
* Connected to proxy.in.tum.de (131.159.0.2) port 8080 (#0)  
* successfully set certificate verify locations:  
*   CAfile: /etc/ssl/certs/ca-certificates.crt  
  CApath: none  
* 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)

由于某种原因curl似乎使用TLSv1.3,即使我强制它使用TLSv1.2命令--tlsv1.2(它仍将打印TLSv1.3(OUT),..."我使用的是最新版本Curl和OpenSSL:

$ curl -V  
curl 7.61.0-DEV (x86_64-pc-linux-gnu) libcurl/7.61.0-DEV OpenSSL/1.1.1 zlib/1.2.8  
Release-Date: [unreleased]  
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp  
Features: AsynchDNS IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP UnixSockets HTTPS-proxy  
Run Code Online (Sandbox Code Playgroud)

我认为这是与我安装程序有关的问题.有人可以向我解释这个错误信息的含义吗?

Ste*_*ich 92

* Uses proxy env variable http_proxy == 'https://proxy.in.tum.de:8080'   
                                         ^^^^^
Run Code Online (Sandbox Code Playgroud)

https://是错的,应该是http://.即使目标URL是HTTPS,也应该通过HTTP而不是HTTPS访问代理本身.然而,代理将正确处理HTTPS连接并保持端到端加密.有关如何完成此操作的详细信息,请参阅HTTP CONNECT方法.

  • 如果您在 Docker 中遇到此错误,则将端口 443 公开可解决此问题 (9认同)
  • 有趣的事情。这帮助我了解到乌克兰的一个网站被屏蔽了。读完这个答案后,我做了“curl http://siteiwouldnotmention.com:443/”,然后我看到了该网站被故意阻止的消息。 (2认同)

Arc*_*tor 28

如果有人在使用 Nginx 时遇到此错误,请尝试将以下内容添加到您的服务器配置中:

server {
    listen 443 ssl;
    ...
}
Run Code Online (Sandbox Code Playgroud)

该问题源于 Nginx 为希望在您侦听的任何端口上使用 HTTPS 的客户端提供 HTTP 服务器。当您ssllisten指令中指定时,您在服务器端清除它。

  • 谢谢,这让我找到了解决方案,只是错过了提到的 nginx 配置行中的“ssl” (4认同)
  • ssl 对我来说也是一个问题 (2认同)

Bre*_*aub 24

这是一个明显的错误,表明您正在从 HTTPS 端口提供 HTTP 服务。

您可以轻松地使用telnet进行测试

telnet FQDN 443
GET / HTTP/1.0
[hit return twice]
Run Code Online (Sandbox Code Playgroud)

如果您在此处看到常规 HTTP 文档 [不是某种错误],则您知道您的配置不正确,并且响应服务器未对响应进行 SSL 加密。


小智 11

简单的回答

如果您在代理服务器后面,请为 curl 设置代理。curl 无法连接到服务器,因此显示错误的版本号。通过打开subl ~/.curlrc或使用任何其他文本编辑器来设置代理。然后将以下行添加到文件中:proxy= proxyserver:proxyport 例如,proxy = 10.8.0.1:8080

如果您不在代理后面,请确保 curlrc 文件不包含代理设置。