Recibo el siguiente error al usar curl:
curl: (77) error al establecer el certificado verificar ubicaciones: CAfile: /etc/ssl/certs/ca-certificates.crt CApath: ninguno
¿Cómo configuro este certificado para verificar ubicaciones? Gracias.
Este error está relacionado con un paquete que falta : ca-certificates
. Instalarlo.
En Ubuntu Linux (y distro 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 CA para permitir que las aplicaciones basadas en SSL verifiquen la autenticidad de las conexiones SSL.
Como se ve en: Debian: detalles de los certificados ca del paquete en Squeeze
pacman -S ca-certificates-utils
. Yo hice.
sudo apt install --reinstall ca-certificates
reinstalé el paquete y resolví los errores que estaba viendo
También tenía instalada la versión más reciente de los certificados ca pero aún recibía 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
.
Copiar mi certificado al destino esperado ejecutando
sudo cp /etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt
trabajó para mi. Deberá 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 que el nombre del archivo de destino coincida con la ruta esperada por curl, es decir, reemplácelo /etc/pki/tls/certs/ca-bundle.crt
con la ruta siguiente "CAfile:" en su mensaje de error.
ln -s
si no desea volver a copiarlo cada vez que lo actualice.
rescuetime
aplicación en Fedora 25. sudo ln -s /etc/pki/tls/certs/ca-bundle.crt /etc/pki/tls/certs/ca-certificates.crt
resolvió el problema. ( CURL_CA_BUNDLE
env var no funcionó)
sudo ln -s /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.pem
. En realidad estaba obteniendo lo The repository ... does not have a Release file
que fue causado por la falta de certificado ( Could not load certificates from ...
).
Pon esto en tu .bashrc
# fix CURL certificates path
export CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt
(ver comentario de Robert)
$CURL_CA_BUNDLE = "/etc/ssl/certs/ca-certificates.crt"
a .xonshrc
).
CURL_CA_BUNDLE=/path/to/bundle.crt curl http://example.com
Crea un archivo ~/.curlrc
con el siguiente contenido
cacert=/etc/ssl/certs/ca-certificates.crt
~/.curlrc
cacert=/etc/openssl/cert.pem
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 citas SSL sin certs". (de curl --help)
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 una CA en la 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
Agregué en -k:
curl -o /usr/bin/apt-cyg https://raw.github.com/cfg/apt-cyg/master/apt-cyg -k
y sin mensaje de error. Como beneficio adicional, ahora tengo instalado apt-cyg. Y ca-certificados.
-k
bandera significa que está perdiendo la verificación. Dependiendo de sus necesidades, esto puede ser aceptable. Los MITM son ataques no triviales si asume que su red y el servidor con el que se está comunicando están protegidos de intrusos (¿puede suponer eso?). El riesgo aumenta según el tipo de datos (el código fuente y los certificados son más riesgosos que las imágenes). Puede verificar la integridad de los datos después de la transferencia (sumas de verificación, etc.) pero ahora está cambiando su confianza en ese canal de suma de verificación. Al final -k
te da un poco más de trabajo.
@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 sistema de rizo predeterminado y evitar jugar con la PATH
variable Anaconda antepuesta . Tu también puedes
Cambie el nombre del binario curl Anaconda :)
mv /path/to/anaconda/bin/curl /path/to/anaconda/bin/curl_anaconda
O eliminar el rizo Anaconda
conda remove curl
$ which curl
/usr/bin/curl
[0] Anaconda Ubuntu curl problema de Github https://github.com/conda/conda-recipes/issues/352
curl
por el camino completo/usr/bin/curl
De $ 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.
Para el código PHP que se ejecuta en XAMPP en Windows, descubrí que necesitaba editar php.ini para incluir lo 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 en un archivo https://curl.haxx.se/ca/cacert.pem y cambie el nombre a curl-ca-bundle.crt y colóquelo en 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 aparece con una versión precompilada de Windows de curl 7.47.1 en http://winampplugins.co.uk /rizo/
Tuve exactamente el mismo problema. Como resultado, mi /etc/ssl/certs/ca-certificates.crt
archivo 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 -----END CERTIFICATE-----
, curl pudo manejar el archivo de certificados.
Fue muy molesto descubrirlo ya que mi update-ca-certificates
comando 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 para completar:
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
Esto funciono para mi
sudo apt-get install ca-certificates
luego vaya a la carpeta de certificados en
sudo cd /etc/ssl/certs
luego copie el archivo ca-certificados.crt en el /etc/pki/tls/certs
sudo cp ca-certificates.crt /etc/pki/tls/certs
Otra alternativa para solucionar este problema es deshabilitar la validación del certificado:
echo insecure >> ~/.curlrc
curl realiza la SSL
verificación de certificados de forma predeterminada, utilizando un "paquete" de Certificate Authority (CA)
claves públicas ( certificados de CA). El paquete predeterminado se llama curl-ca-bundle.crt; puede especificar un archivo alternativo usando la opción --cacert.
Si este HTTPS
servidor 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 expirar 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 --insecure
opción -k (o ).
por ejemplo
curl --insecure http://........
Parece que su curl apunta a un archivo no existente con certificados de CA o similar.
Para obtener la referencia principal sobre los certificados de CA con curl, consulte: https://curl.haxx.se/docs/sslcerts.html
Simplemente cree las carpetas, que faltan en su sistema.
/ etc / pki / tls / certs /
y crea el archivo usando el siguiente comando,
sudo apt-get install ca-certificados
y luego copie y pegue el certificado en la carpeta de destino, que se muestra en su error ... el mío fue " with message 'error setting certificate verify locations: CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none' in
" asegúrese de pegar el archivo en la ubicación exacta mencionada en el error. Use el siguiente comando para copiar pegar ..
sudo cp /etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt
Fijo.
Por lo que vale, la verificación que which curl
se está ejecutando también es importante.
Un usuario en una máquina compartida que mantengo había recibido este error. Pero la causa resultó ser porque habían instalado Anaconda ( http://continuum.io ). Al hacerlo, la ruta binaria de Anaconda es anterior al estándar $PATH
, y viene con su propio curl
binario, que tuvo problemas para encontrar los certificados predeterminados que se instalaron en esta máquina Ubuntu.
which -a curl
para ver todo lo que está disponible y, por supuesto, señalar cuál es el primero.
Si alguien todavía tiene problemas, intente esto, funcionó para mí. Elimine los archivos en su /etc/ssl/certs/
directorio y luego reinstale los certificados ca:
sudo apt install ca-certificates --reinstall
Hice esto cuando intenté instalar Linuxbrew.
Si está utilizando homebrew en macOS o linuxbrew en linux, intente reinstalar el openssl
y curl
con los siguientes pasos desde esta página .
Este mensaje de error indica que curl no puede establecer una conexión segura con openssl. Una reinstalación de openssl debería solucionar el problema. Para utilizar temporalmente una conexión insegura para curl y git para descargar los archivos necesarios, ejecute:
echo insecure >> ~/.curlrc
git config --global http.sslVerify false
Luego, instale o reinstale openssl y curl:
HOMEBREW_CURLRC=1 brew reinstall openssl curl
Finalmente, deshaga los cambios de seguridad para hacer que curl y git usen conexiones seguras nuevamente:
sed -i '/^insecure$/d' ~/.curlrc
git config --global http.sslVerify true
Es posible que deba iniciar una nueva sesión de shell para verificar el resultado con
curl -v https://github.com # or any other https urls.
Si muestra la siguiente salida en la salida, ¡el problema debería resolverse!
* successfully set certificate verify locations:
* CAfile: /usr/local/etc/openssl/cert.pem
CApath: /usr/local/etc/openssl/certs
Referencias
Tengo el mismo problema: estoy construyendo una imagen acoplable basada en alpinos, y cuando quiero ir a un sitio web de mi organización, aparece este error. Para resolverlo, tengo que obtener el certificado CA de mi empresa, luego, tengo que agregarlo a los certificados CA de mi imagen.
Use OpenSSL para obtener los certificados relacionados con el sitio web:
openssl s_client -showcerts -servername my.company.website.org -connect my.company.website.org:443
Esto generará algo como:
CONNECTED(00000005)
depth=2 CN = UbisoftRootCA
verify error:num=19:self signed certificate in certificate chain
...
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
...
Obtenga el último certificado (se incluye el contenido entre el -----BEGIN CERTIFICATE-----
y las
-----END CERTIFICATE-----
marcas) y guárdelo en un archivo (mycompanyRootCA.crt, por ejemplo)
Luego, cuando construyas tu imagen acoplable desde alpine, haz lo siguiente:
FROM alpine
RUN apk add ca-certificates curl
COPY mycompanyRootCA.crt /usr/local/share/ca-certificates/mycompanyRootCA.crt
RUN update-ca-certificates
¡Tu imagen ahora funcionará correctamente! \ o /
El error se debe a archivos de certificado de cadena SSL dañados o faltantes en el directorio PKI. Deberá asegurarse de que los archivos se agrupen, siguiendo los pasos: En su 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 ca, para SO. Copie la url de descarga y péguela en la 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
Ejecute el siguiente comando en git bash que funciona bien para mí
git config --global http.sslverify "false"
Esto me solucionó:
curl --remote-name --time-cond cacert.pem \
https://curl.haxx.se/ca/cacert.pem
Encontré que esta solución es una solución fácil y segura. Solo implica cambiar la ruta de dos valores en el php.ini
archivo. Siga las instrucciones aquí:
https://ourcodeworld.com/articles/read/196/xampp-wampp-php-ssl-certificate-error-unable-to-get-local-issuer-certificate
A continuación, describa los pasos para solucionar los problemas.
1. Descubra que el archivo existe en la url de definición.
2. Si no, descargue el archivo de la url. https://curl.haxx.se/ca/cacert.pem
3. Copie y plague el archivo en la ruta definida en el archivo php.ini.
4. Reinicie el servicio apache.
Tuve este problema y resultó que mi versión de CURL no podía analizar los certificados codificados DER (y tampoco estaba prestando atención a la opción --cert-type). Cuando convertí el certificado al formato PEM, funcionó.
En mi caso /etc/ssl/certs/ca-certificates.crt
faltaba el archivo. Al final resultó que he eliminado el contenido de /etc/ssl/certs
dentro del Dockerfile al construir la imagen de Docker. Después de ajustar mis scripts de shell / comandos bash ejecutados desde el Dockerfile, curl funciona ahora perfectamente desde el nuevo contenedor.
ca-certificates
instalado pero el error persistió. El problema era que mis certificados estaban ubicados en/etc/ssl/certs/ca-certificates.crt
lugar de/etc/pki/tls/certs/ca-bundle.crt
, así que solo tenía que establecer la variable ambientalCURL_CA_BUNDLE
en la ruta correcta.export CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt
.