Когда я пытаюсь подключиться к любому серверу (например, google.com) с помощью curl (или libcurl), я получаю сообщение об ошибке:

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  

Думаю, это проблема, связанная с моей установкой программ. Может кто-нибудь объяснить мне, что означает это сообщение об ошибке?

Bernhard Jaeger

Ответов: 6

Ответы (6)

* Использует переменную env прокси http_proxy == 'https://proxy.in.tum.de: 8080'
                                         ^^^^^

https: // неверно, это должно быть http: //. Доступ к самому прокси-серверу должен осуществляться по протоколу HTTP, а не HTTPS, даже если целевой URL-адрес - HTTPS. Тем не менее, прокси-сервер будет правильно обрабатывать HTTPS-соединение и поддерживать сквозное шифрование. См. Метод HTTP CONNECT для получения подробной информации о том, как это делается.

В моем случае причиной этой ошибки было то, что мой веб-сервер не был настроен для прослушивания IPv6 через SSL-порт 443. После его включения ошибка исчезла.

Вот как это сделать для Apache:


...

А для nginx:

listen 443 ssl http2;
listen [::]:443 ssl http2; 

Другая возможная причина этой проблемы - если вы не включили файл конфигурации виртуального хоста в Apache (или если у вас вообще нет этого виртуального хоста), а виртуальный хост по умолчанию в Apache настроен только для работы без SSL. соединения - то есть нет виртуального хоста по умолчанию, который может разговаривать по SSL. В этом случае, поскольку Apache прослушивает порт 443, запрос виртуального хоста, который не существует, будет доставлен на виртуальный хост по умолчанию, но этот виртуальный хост не поддерживает SSL.

Если кто-то получает эту ошибку при использовании Nginx, попробуйте добавить в конфигурацию вашего сервера следующее:

server {
    listen 443 ssl;
    ...
}

Проблема связана с тем, что Nginx обслуживает HTTP-сервер для клиента, ожидающего HTTPS на любом порту, который вы слушаете. Когда вы указываете ssl в директиве listen, вы очищаете это на стороне сервера.

Проще в одной строке:

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

например.$ прокси = 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  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
*   Trying 172.217.163.46:443...
* TCP_NODELAY set
* Connected to google.com (172.217.163.46) 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
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]

Простой ответ

Если вы находитесь за прокси-сервером, установите прокси для curl. Curl не может подключиться к серверу, поэтому он показывает неправильный номер версии. Установите прокси, открыв subl ~ / .curlrc или используя любой другой текстовый редактор. Затем добавьте в файл следующую строку:

proxy= proxyserver:proxyport

Например,прокси = 10.8.0.1:8080

Если вы не используете прокси, убедитесь, что файл curlrc не содержит настроек прокси.

2022 WebDevInsider