¿Cómo trato con los certificados que usan cURL al intentar acceder a una url de HTTPS?

Recibo el siguiente error al usar curl:

 curl: (77) las ubicaciones de verificación de certificado de configuración de errores:
   CAfile: /etc/ssl/certs/ca-certificates.crt
   CApath: ninguno

¿Cómo configuro este certificado para verificar las ubicaciones? Gracias.

Este error está relacionado con un paquete faltante : ca-certificates . Instalarlo.

En Ubuntu Linux (y distribución similar):

 # apt-get install ca-certificates 

En CygWin a través de Apt-Cyg

 # apt-cyg install ca-certificates 

En Arch Linux (Raspberry Pi)

 # pacman -S ca-certificates 

La documentación dice:

Este paquete incluye archivos PEM de certificados de CA para permitir que las aplicaciones basadas en SSL verifiquen la autenticidad de las conexiones SSL.

Como se ve en: Debian – Detalles del paquete ca-certificados en squeeze

También tenía instalada la versión más reciente de ca-certificates, pero seguía recibiendo el error:

 curl: (77) error setting certificate verify locations: CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none 

El problema era que Curl esperaba que el certificado estuviera en la ruta /etc/pki/tls/certs/ca-bundle.crt pero no pudo encontrarlo porque estaba en la ruta /etc/ssl/certs/ca-certificates.crt .

Copiando mi certificado al destino esperado ejecutando

 sudo cp /etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt 

trabajó para mi. Tendrá que crear carpetas para el destino de destino si no existen ejecutando

 sudo mkdir -p /etc/pki/tls/certs 

Si es necesario, modifique el comando anterior para hacer que el nombre del archivo de destino coincida con la ruta esperada por curl, es decir, reemplace /etc/pki/tls/certs/ca-bundle.crt con la ruta que sigue a “CAfile:” en su mensaje de error.

Pon esto en tu .bashrc

 # fix CURL certificates path export CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt 

(ver el comentario de Robert)

Crea un archivo ~/.curlrc con el siguiente contenido

 cacert=/etc/ssl/certs/ca-certificates.crt 

La forma más rápida de evitar el error es agregar la opción -k en algún lugar de su solicitud curl. Esa opción “permite conexiones a cites SSL sin certs”. (de curl –ayuda)

Tenga en cuenta que esto puede significar que no está hablando con el punto final que cree que es, ya que están presentando un certificado no firmado por un CA en el que confía.

Por ejemplo:

 $ curl -o /usr/bin/apt-cyg https://raw.github.com/cfg/apt-cyg/master/apt-cyg 

me dio la siguiente respuesta de error:

 curl: (77) error setting certificate verify locations: CAfile: /usr/ssl/certs/ca-bundle.crt CApath: none 

Añadí en -k:

 curl -o /usr/bin/apt-cyg https://raw.github.com/cfg/apt-cyg/master/apt-cyg -k 

y no hay mensaje de error Como extra, ahora tengo apt-cyg instalado. Y ca-certificados.

@roens es correcto. Esto afecta a todos los usuarios de Anaconda , con el siguiente error
curl: (77) error setting certificate verify locations: CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none

La solución consiste en utilizar el curl predeterminado del sistema y evitar jugar con la variable ANTECEDENTES PATH Anaconda. Tu también puedes

  1. Cambie el nombre del binario de rizo Anaconda 🙂
    mv /path/to/anaconda/bin/curl /path/to/anaconda/bin/curl_anaconda

  2. O elimine el rizo Anaconda
    conda remove curl

$ which curl /usr/bin/curl

[0] Anaconda Ubuntu curl Github tema https://github.com/conda/conda-recipes/issues/352

Desde $ man curl :

 --cert-type  (SSL) Tells curl what certificate type the provided certificate is in. PEM, DER and ENG are recognized types. If not specified, PEM is assumed. If this option is used several times, the last one will be used. --cacert  (SSL) Tells curl to use the specified certificate file to verify the peer. The file may contain multiple CA certificates. The certificate(s) must be in PEM format. Normally curl is built to use a default file for this, so this option is typically used to alter that default file. 

Otra alternativa para solucionar este problema es desactivar la validación del certificado:

 echo insecure >> ~/.curlrc 

Para el código PHP que se ejecuta en XAMPP en Windows, encontré que necesitaba editar php.ini para incluir el siguiente

 [curl] ; A default value for the CURLOPT_CAINFO option. This is required to be an ; absolute path. curl.cainfo = curl-ca-bundle.crt 

y luego copie a un archivo https://curl.haxx.se/ca/cacert.pem y renómbrelo a curl-ca-bundle.crt y colóquelo bajo la ruta \ xampp (no pude hacer que curl.capath funcione) . También encontré que CABundle en el sitio cURL no era suficiente para el sitio remoto al que me estaba conectando, así que utilicé uno que está en la lista con una versión precomstackda de Windows de curl 7.47.1 en http://winampplugins.co.uk /rizo/

Parece que su curvatura apunta a un archivo no existente con certificados de CA o similares.

Para obtener la referencia principal de los certificados de CA con curl, consulte: https://curl.haxx.se/docs/sslcerts.html

Esto funcionó para mí

 sudo apt-get install ca-certificates 

luego ve a la carpeta de certificados en

 sudo cd /etc/ssl/certs 

luego copia el archivo ca-certificates.crt en /etc/pki/tls/certs

 sudo cp ca-certificates.crt /etc/pki/tls/certs 

si no hay una carpeta tls / certs: cree una y cambie los permisos usando chmod 777 -R folderNAME

curl realiza la verificación del certificado SSL de forma predeterminada, utilizando un “paquete” de claves públicas de la Certificate Authority (CA) de Certificate Authority (CA) CA). El paquete predeterminado se llama curl-ca-bundle.crt; puede especificar un archivo alternativo usando la opción –cacert.

Si este servidor HTTPS usa un certificado firmado por una CA representada en el paquete, la verificación del certificado probablemente falló debido a un problema con el certificado (podría haber caducado o el nombre podría no coincidir con el nombre de dominio en la URL).

Si desea desactivar la verificación de curl del certificado, use la opción -k (o --insecure ).

por ejemplo

 curl --insecure http://........ 

Por lo que vale, también es importante verificar which curl se está ejecutando.

Un usuario en una máquina compartida que mantengo había estado recibiendo este error. Pero la causa resultó ser que habían instalado Anaconda ( http://continuum.io ). Al hacerlo, coloque la ruta binaria de Anaconda antes de $PATH estándar, y viene con su propio binario curl , que tuvo problemas para encontrar los certificados predeterminados que se instalaron en esta máquina Ubuntu.

Tuve exactamente el mismo problema. /etc/ssl/certs/ca-certificates.crt mi archivo /etc/ssl/certs/ca-certificates.crt estaba mal formado. La última entrada mostró algo como esto:

 -----BEGIN CERTIFICATE----- MIIEDTCCAvWgAwIBAgIJAN..lots of certificate text....AwIBAgIJAN-----END CERTIFICATE----- 

Después de agregar una nueva línea antes de -----END CERTIFICATE----- , curl pudo manejar el archivo de certificados.

Esto fue muy molesto de averiguar ya que mi comando update-ca-certificates no me dio ninguna advertencia.

Esto puede o no ser un problema específico de la versión de curl, así que aquí está mi versión, solo por completitud:

 curl --version # curl 7.51.0 (x86_64-alpine-linux-musl) libcurl/7.51.0 OpenSSL/1.0.2j zlib/1.2.8 libssh2/1.7.0 # Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp # Features: IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP UnixSockets 

Ejecuta el siguiente comando en git bash que funciona bien para mí

 git config --global http.sslverify "false" 

El error se debe a archivos de certificado de cadena SSL corruptos o faltantes en el directorio PKI. Deberás asegurarte de que los archivos se puedan agrupar, siguiendo los pasos: En tu consola / terminal:

 mkdir /usr/src/ca-certificates && cd /usr/src/ca-certificates 

Ingrese a este sitio: https://rpmfind.net/linux/rpm2html/search.php?query=ca-certificates , obtenga su certificado de ca, para SO. Copie la URL de descarga y pegue en url: wget your_url_donwload_ca-ceritificated.rpm ahora, instale sus rpm:

 rpm2cpio your_url_donwload_ca-ceritificated.rpm | cpio -idmv 

Ahora reinicie su servicio: mi ejemplo este comando:

 sudo service2 httpd restart 

Yo tuve el mismo problema.

Ese fue mi error

configuración de error ce
rtificate verificar ubicaciones: CAfile: D: /git_repo/mingw32/ssl/certs/ca-bundle.crt CApath: none

Funciona bien para mí

Renovo el nombre del directorio de instalación de git a git_repo “.

Solucionado para mí:

curl –remote-name –time-cond cacert.pem \ https://curl.haxx.se/ca/cacert.pem