api - example - ¿Cómo trato con los certificados que usan cURL al intentar acceder a una url de HTTPS?
ubuntu curl rest (18)
@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
Cambie el nombre del binario de rizo Anaconda :)
mv /path/to/anaconda/bin/curl /path/to/anaconda/bin/curl_anaconda
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
Recibo el siguiente error al usar curl:
curl: (77) error setting certificate verify locations: CAfile: /etc/ssl/certs/ca-certificates.crt CApath: none
¿Cómo configuro este certificado para verificar las ubicaciones? Gracias.
Crea un archivo ~/.curlrc
con el siguiente contenido
cacert=/etc/ssl/certs/ca-certificates.crt
Desde $ man curl
:
--cert-type <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 <CA certificate>
(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.
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
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
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
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.
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 precompilada de Windows de curl 7.47.1 en http://winampplugins.co.uk/curl/
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
Pon esto en tu .bashrc
# fix CURL certificates path
export CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt
(ver el comentario de Robert)
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.
Solucionado para mí:
curl --remote-name --time-cond cacert.pem / https://curl.haxx.se/ca/cacert.pem
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.
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
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://........
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 ".