curl: (60) Problema con el certificado SSL: no se puede obtener el certificado del emisor local

Resuelto user3812540 asked hace 10 años • 0 respuestas
root@sclrdev:/home/sclr/certs/FreshCerts# curl --ftp-ssl --verbose ftp://{abc}/ -u trup:trup --cacert /etc/ssl/certs/ca-certificates.crt
* About to connect() to {abc} port 21 (#0)
*   Trying {abc}...
* Connected to {abc} ({abc}) port 21 (#0)
< 220-Cerberus FTP Server - Home Edition
< 220-This is the UNLICENSED Home Edition and may be used for home, personal use only
< 220-Welcome to Cerberus FTP Server
< 220 Created by Cerberus, LLC
> AUTH SSL
< 234 Authentication method accepted
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS alert, Server hello (2):
* SSL certificate problem: unable to get local issuer certificate
* Closing connection 0
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). If the default
 bundle file isn't adequate, you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.
user3812540 avatar Jul 07 '14 20:07 user3812540
Aceptado

Está fallando porque cURL no puede verificar el certificado proporcionado por el servidor.

Hay dos opciones para que esto funcione:

  1. Utilice cURL con -kla opción que permite a curl realizar conexiones inseguras, es decir, cURL no verifica el certificado.

  2. Agregue la CA raíz (la CA que firma el certificado del servidor) a/etc/ssl/certs/ca-certificates.crt

Debe utilizar la opción 2, ya que es la opción que garantiza que se esté conectando a un servidor FTP seguro.

Yuvika avatar Jul 07 '2014 19:07 Yuvika

En relación con el error 'Problema con el certificado SSL: no se puede obtener el certificado del emisor local'. Es importante tener en cuenta que esto se aplica al sistema que envía la solicitud CURL y NO al servidor que recibe la solicitud.

  1. Descargue la última versión de cacert.pem desde https://curl.se/ca/cacert.pem

  2. Agregue la opción '--cacert /path/to/cacert.pem' al comando curl para indicarle a curl dónde está el archivo de autoridad de certificación local.

  3. (o) Cree o agregue a un archivo '.curlrc' la línea: cacert = /path/to/cacert.pem Consulte 'man curl', la sección sobre la sección '-K, --config <archivo>' para obtener información sobre dónde busca curl este archivo.

  4. (o si usa php) Agregue la siguiente línea a php.ini: (si se trata de alojamiento compartido y no tiene acceso a php.ini, entonces puede agregar esto a .user.ini en public_html).

curl.cainfo="/path/to/downloaded/cacert.pem"

¡Asegúrate de incluir la ruta entre comillas dobles!

  1. (quizás también para php) De forma predeterminada, el proceso FastCGI analizará archivos nuevos cada 300 segundos (si es necesario, puede cambiar la frecuencia agregando un par de archivos como se sugiere aquí https://ss88.uk/blog/fast-cgi- y-archivos-ini-usuario-el-nuevo-htaccess/ ).
Dahomz avatar Aug 05 '2015 11:08 Dahomz

Resolví este problema agregando un código de línea en el script cURL:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

Advertencia : ¡Esto hace que la solicitud sea absolutamente insegura (ver respuesta de @YSU)!

Vijay Bhandari avatar Apr 04 '2015 06:04 Vijay Bhandari

Para mí, la simple instalación de certificados ayudó:

sudo apt-get install ca-certificates
Maxim Krušina avatar Apr 02 '2018 15:04 Maxim Krušina

En mi caso resultó ser un problema con la instalación de mi certificado en el servicio que intentaba consumir con cURL. No pude agrupar/concatenar los certificados intermedio y raíz en mi certificado de dominio . Al principio no era obvio que este fuera el problema porque Chrome lo resolvió y aceptó el certificado a pesar de omitir los certificados intermedio y raíz.

Después de empaquetar el certificado, todo funcionó como se esperaba. Me empaqueté así

$ cat intermediate.crt >> domain.crt

Y se repite para todos los certificados intermedios y raíz.

Daniel Watrous avatar Mar 08 '2016 14:03 Daniel Watrous