1

Недавно я начал использовать Debian 9 (9.4, из Debian 8.x), и скрипт с участием curl перестал работать. Я подключаюсь к интернету через прокси squid на localhost, подключенный к родительскому прокси.

Мои переменные окружения настроены так

root@server:~# printenv | grep -i proxy
HTTP_PROXY=http://127.0.0.1:3128
FTP_PROXY=http://127.0.0.1:3128
https_proxy=https://127.0.0.1:3128
http_proxy=http://127.0.0.1:3128
HTTPS_PROXY=https://127.0.0.1:3128
ftp_proxy=http://127.0.0.1:3128

Когда я использую wget, он работает:

root@server:~# wget https://www.google.com.cu
--2018-03-14 09:08:53--  https://www.google.com.cu/
Connecting to 127.0.0.1:3128... connected.
Proxy request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘index.html’

index.html                  [ <=>                          ]  11.12K  --.-KB/s    in 0.001s

2018-03-14 09:08:54 (14.9 MB/s) - ‘index.html’ saved [11389]

когда я использую curl, это то, что я получаю

root@server:~# curl -v https://www.google.com.cu
* Rebuilt URL to: https://www.google.com.cu/
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to (nil) (127.0.0.1) port 3128 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection:     ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: none
  CApath: /etc/ssl/certs
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
* Curl_http_done: called premature == 0
* Closing connection 0
curl: (35) error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol

Я знаю, что эти две команды не эквивалентны, это просто для иллюстрации проблемы передачи HTTPS.

Мне нужно использовать curl, потому что скрипт использует веб-API, поэтому ему нужно использовать POST вместо GET-запроса и установить некоторые заголовки и данные для POST-запроса. (api.dropboxapi.com - целевой сайт)

Раньше все работало на Debian 8 без проблем, и, кроме wget WORKS, сбой только curl с изменением версии debian. Все другие клиенты HTTPS кажутся незатронутыми (FF, Chrome, Edge, wget все работает как всегда)

Я знаю, что curl немного требователен к соединениям TLS, но это немного экстрим. Я протестировал оба сайта (www.google.com.cu и api.dropboxapi.com) на https://www.ssllabs.com/ssltest/index.html, и оба они отмечены знаком "А" в общем рейтинге)

Есть ли обходной путь, исправление, опция командной строки или что-то еще для того, чтобы заставить работать curl?

Вывод curl -V по запросу

root@server:~# curl -V
curl 7.52.1 (x86_64-pc-linux-gnu) libcurl/7.52.1 OpenSSL/1.0.2l zlib/1.2.8 libidn2/0.16 libpsl/0.17.0 (+libidn2/0.16) libssh2/1.7.0 nghttp2/1.18.1 librtmp/2.3
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets HTTPS-proxy PSL

1 ответ1

0

Большое, большое спасибо Майклу Хэмптону. Оказывается, проблема была в конфигурации прокси. Следует сказать

https_proxy=http://127.0.0.1:3128
HTTPS_PROXY=http://127.0.0.1:3128

Так что curl пытался подключиться к squid с использованием TLS и, конечно, не смог.

Оригинальный ответ в https://serverfault.com/questions/901626/debian-version-change-affecting-scripts-using-curl-and-https

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .