Recientemente comencé a usar Debian 9 (9.4, de Debian 8.x) y un script que involucraba curl dejó de funcionar. Me conecto a Internet a través de un proxy squid en localhost conectado a un proxy principal.
Mis variables de entorno están configuradas así
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
Cuando uso wget, funciona:
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]
cuando uso curl, esto es lo que obtengo
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
Sé que estos dos comandos no son equivalentes, esto es sólo para ilustrar el problema de la transferencia HTTPS.
Necesito usar curl porque el script usa una API web, por lo que necesita usar POST en lugar de la solicitud GET y configurar algunos encabezados y datos para la solicitud POST. (api.dropboxapi.com es el sitio de destino)
Todo esto solía funcionar en Debian 8 sin problemas y, además de wget FUNCIONA, solo curl falla con el cambio de versión de Debian. Todos los demás clientes HTTPS no parecen verse afectados (FF, Chrome, Edge, wget parecen funcionar como siempre)
¿Alguien sabe sobre este problema? ¿Existe alguna solución alternativa, cambio de opción de línea de comando o lo que sea para hacer que la versión de curl de Debian 9 funcione?
Salida de "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
Respuesta1
Muchas, muchas gracias a Michael Hampton (Ver comentarios). Resulta que el problema estaba en la configuración del proxy. debería decir
https_proxy=http://127.0.0.1:3128
HTTPS_PROXY=http://127.0.0.1:3128
Entonces curl estaba intentando conectarse a Squid usando TLS y fallando, por supuesto.