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


126

当我尝试使用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'  

出于某种原因,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  

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

Answers:


208
* Uses proxy env variable http_proxy == 'https://proxy.in.tum.de:8080'   
                                         ^^^^^

https://是错误的,它应该是http://。即使目标URL是HTTPS,也应通过HTTP而非HTTPS访问代理本身。尽管如此,代理仍将正确处理HTTPS连接并保持端到端加密。有关详细信息,请参见HTTP CONNECT方法


7
如果您在Docker中遇到此错误,请将端口443公开,以解决此问题
Dr.X

7

简单的答案

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

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


7

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

server {
    listen 443 ssl;
    ...
}

问题源于Nginx将HTTP服务器提供给客户端,而客户端希望在您正在监听的任何端口上都使用HTTPS。当您ssllisten指令中指定时,您需要在服务器端清除它。


2
thx,这导致我找到了解决方案,只是错过了提到的nginx配置行中的“ ssl”
规范

0

更简单地一行:

proxy = 192.168.2.1:8080; curl -v example.com

例如。$ proxy = 192.168.2.1:8080; curl -v example.com

xxxxxxxxx-ASUS:〜$ proxy = 192.168.2.1:8080; curl -v https://google.com | head -c 15%接收的总百分比%Xferd平均速度时间时间时间当前Dload上传的总剩余左速度0 0 0 0 0 0 0 0-:-:--:-:--:-:-0

  • 尝试172.217.163.46:443 ...
  • TCP_NODELAY设置
  • 已连接到google.com(172.217.163.46)端口443(#0)
  • ALPN,提供h2
  • ALPN,提供http / 1.1
  • 成功设置证书验证位置:
  • CAfile:/etc/ssl/certs/ca-certificates.crt CApath:/ etc / ssl / certs} [5字节数据]
  • TLSv1.3(OUT),TLS握手,客户端问候(1):} [512字节数据]
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.