当我尝试使用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
我认为这是与我安装程序有关的问题。 有人可以向我解释这个错误信息的含义吗?
答案 0 :(得分:46)
* Uses proxy env variable http_proxy == 'https://proxy.in.tum.de:8080' ^^^^^
https://
错误,应为http://
。即使目标URL是HTTPS,也应该通过HTTP而不是HTTPS访问代理本身。然而,代理将正确处理HTTPS连接并保持端到端加密。有关详细信息,请参阅HTTP CONNECT method。
答案 1 :(得分:7)
简单答案
如果您在代理服务器后面,请为curl设置代理。 curl无法连接到服务器,因此显示错误的版本号。 通过打开 subl〜/ .curlrc 设置代理,或使用任何其他文本编辑器。然后将以下行添加到文件: proxy =代理服务器:代理端口 例如代理= 10.8.0.1:8080
如果您不在代理后面,请确保curlrc文件不包含代理设置。
答案 2 :(得分:7)
如果有人使用Nginx遇到此错误,请尝试将以下内容添加到您的服务器配置中:
server {
listen 443 ssl;
...
}
问题源于Nginx为HTTP服务器提供服务,而客户端则希望在您正在监听的任何端口上都使用HTTPS。当您在ssl
指令中指定listen
时,需要在服务器端清除它。
答案 3 :(得分: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
答案 4 :(得分:0)
就我而言,此错误的原因是我的 Web 服务器未配置为在 SSL 端口 443 上侦听 IPv6。启用它后,错误消失了。
以下是您如何为 Apache 执行此操作:
<VirtualHost ip.v4.address:443 ip:v::6:address:443>
...
</VirtualHost>
对于 nginx:
listen 443 ssl http2;
listen [::]:443 ssl http2;