¿En qué sistema operativo / distribución estás? Debe instalar el paquete ca-certificados (así se llama en debian / ubuntu).
igorw 01 de
40
Para referencia futura, ya había ca-certificatesinstalado pero el error persistió. El problema era que mis certificados estaban ubicados en /etc/ssl/certs/ca-certificates.crtlugar de /etc/pki/tls/certs/ca-bundle.crt, así que solo tenía que establecer la variable ambiental CURL_CA_BUNDLEen la ruta correcta.
Robert Smith
13
¡Frio! Funciona para mí cuando configuro export CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt.
ordenado
Respuestas:
83
Este error está relacionado con un paquete que falta : ca-certificates. Instalarlo.
Este paquete incluye archivos PEM de certificados CA para permitir que las aplicaciones basadas en SSL verifiquen la autenticidad de las conexiones SSL.
ca-certificados ya es la versión más nueva, pero todavía recibo el error
Pastor Bones
2
Por supuesto, obtendrá este mismo error si intenta instalar apt-cyg mediante el método recomendado usando curl y raw.github.com .
10gistic
11
En Arch Linux, es posible que también lo necesite pacman -S ca-certificates-utils. Yo hice.
Mark Grimes
8
Este paquete ya está instalado. Esta respuesta no es útil.
JimmyJames
9
@PastorBones Tuve el mismo problema que el paquete ya era el último, creo que sin embargo se había dañado, así que sudo apt install --reinstall ca-certificatesreinstalé el paquete y resolví los errores que estaba viendo
será el
153
También tenía instalada la versión más reciente de los certificados ca pero aún recibía el error
El problema era que curl esperaba que el certificado estuviera en la ruta /etc/pki/tls/certs/ca-bundle.crtpero no pudo encontrarlo porque estaba en la ruta /etc/ssl/certs/ca-certificates.crt.
Copiar mi certificado al destino esperado ejecutando
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.crtcon la ruta siguiente "CAfile:" en su mensaje de error.
También puede crear un enlace simbólico ln -ssi no desea volver a copiarlo cada vez que lo actualice.
starbeamrainbowlabs
44
Tuve el mismo problema para la rescuetimeaplicación en Fedora 25. sudo ln -s /etc/pki/tls/certs/ca-bundle.crt /etc/pki/tls/certs/ca-certificates.crtresolvió el problema. ( CURL_CA_BUNDLEenv var no funcionó)
GabLeRoux
En mi ubuntu esto esté arreglado el tema: 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 fileque fue causado por la falta de certificado ( Could not load certificates from ...).
¡Gracias por proporcionar un método que no requiere que elimine los archivos del sistema a mano, pero que aún mantiene la seguridad de usar certificados!
Stephen Johnson el
Gracias. Esto resolvió mi problema similar con pyenv & curl. Estaba usando Ubuntu 14.04 y ya tenía certificados ca instalados.
davidA
Este enfoque también funciona con xonsh (agregar $CURL_CA_BUNDLE = "/etc/ssl/certs/ca-certificates.crt"a .xonshrc).
m00am
Por si acaso: la versión única de esto:CURL_CA_BUNDLE=/path/to/bundle.crt curl http://example.com
jmathew
30
Crea un archivo ~/.curlrccon el siguiente contenido
la mejor respuesta, esto funcionó para mí en Linux Mint 17
Santiago
En Mac, funcionó con seguimiento en~/.curlrccacert=/etc/openssl/cert.pem
amirathi
21
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.
Eso podría evitar el error, pero también hace que la conexión "segura" se vuelva insegura.
Tim
1
Realmente no. Hasta donde yo sé, no se puede pasar por alto el cifrado de una conexión segura, por lo que sigue cifrado y va a un solo punto final. Alguien me corrige si me equivoco, pero el único riesgo que corres es que podrías ser presa de un ataque de hombre en el medio. Aún no es probable que sea un riesgo si está usando curl.
10gistic
18
Sí, en serio. La opción "-k" es la abreviatura de "--seguro". Si tienes un hombre en el medio, ¿qué crees que está haciendo con tus datos? Alerta de spoiler: lo descifra, lo roba y posiblemente lo modifica e inyecta nuevamente en la secuencia insegura. Directamente desde la página de manual: "-k, --seguro (SSL) Esta opción permite explícitamente que curl realice conexiones y transferencias SSL" inseguras ". Se intenta asegurar todas las conexiones SSL utilizando el paquete de certificados CA instalado de manera predeterminada. Esto hace que todas las conexiones consideradas "inseguras" fallen a menos que se use -k, --seguro ".
Tim
2
Si necesita SSL, necesita privacidad y verificación: la -kbandera 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 -kte da un poco más de trabajo.
Mark Fox
Entonces, ¿significa que si estoy usando un certificado autofirmado? Debería estar usando la opción -k. Como puede no ser posible verificar el certificado autofirmado?
Linus
15
@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 PATHvariable 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
Buen descubrimiento, no me di cuenta de que Anaconda estaba robando mi camino de precedencia. Funcionó una vez que lo reemplacé curlpor el camino completo/usr/bin/curl
jxramos
¡Esto ayudó mucho! Gracias.
Shababb Karim
12
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/
En Windows, también puede agregar "xampp" antes de php, así: curl.cainfo = "C: \ xampp \ php \ extras \ cacert.pem"
Ryan Steyn
7
Tuve exactamente el mismo problema. Como resultado, mi /etc/ssl/certs/ca-certificates.crtarchivo 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-certificatescomando 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:
Solución alternativa, pero me ayuda después de demasiado tiempo con certificados curl. Gracias.
K. Gol
4
curl realiza la SSLverificació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 HTTPSservidor 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 --insecureopción -k (o ).
Solo un lado que "confiar en la fuente" es bastante irrelevante aquí, ya que sin validar adecuadamente el certificado contra una CA, no tienes idea de quién es "la fuente".
Jeff Allen
4
Parece que su curl apunta a un archivo no existente con certificados de CA o similar.
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 ..
¡Ninguna de las mejores respuestas funcionó para mí pero esto sí!
Prachiti Prakash Prabhu
2
Por lo que vale, la verificación que which curlse 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 curlbinario, que tuvo problemas para encontrar los certificados predeterminados que se instalaron en esta máquina Ubuntu.
Recomiendo verificar which -a curlpara ver todo lo que está disponible y, por supuesto, señalar cuál es el primero.
jxramos
2
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:
Esto me ayudó, pero no eliminé los archivos de mi máquina. Simplemente ejecuté el comando simple y curl comenzó a funcionar.
Josefhu15
1
Si está utilizando homebrew en macOS o linuxbrew en linux, intente reinstalar el openssly curlcon 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:
Después de horas de intentarlo. Esto me salvó. La solución correcta para macos finalmente. ¡Muchas gracias! :)
mrateb
1
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.
Obtenga el certificado de CA
Use OpenSSL para obtener los certificados relacionados con el sitio web:
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)
Construye tu imagen
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
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
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.crtfaltaba el archivo. Al final resultó que he eliminado el contenido de /etc/ssl/certsdentro 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
.Respuestas:
Este error está relacionado con un paquete que falta :
ca-certificates
. Instalarlo.En Ubuntu Linux (y distro similar):
En CygWin a través de Apt-Cyg
En Arch Linux (Raspberry Pi)
La documentación dice:
Como se ve en: Debian: detalles de los certificados ca del paquete en Squeeze
fuente
pacman -S ca-certificates-utils
. Yo hice.sudo apt install --reinstall ca-certificates
reinstalé el paquete y resolví los errores que estaba viendoTambién tenía instalada la versión más reciente de los certificados ca pero aún recibía el error
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
trabajó para mi. Deberá crear carpetas para el destino de destino si no existen ejecutando
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.fuente
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 loThe 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
(ver comentario de Robert)
fuente
$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 contenidofuente
~/.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:
me dio la siguiente respuesta de error:
Agregué en -k:
y sin mensaje de error. Como beneficio adicional, ahora tengo instalado apt-cyg. Y ca-certificados.
fuente
-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 puedesCambie 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
fuente
curl
por el camino completo/usr/bin/curl
De
$ man curl
:fuente
Para el código PHP que se ejecuta en XAMPP en Windows, descubrí que necesitaba editar php.ini para incluir lo siguiente
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/
fuente
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: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:
fuente
Esto funciono para mi
luego vaya a la carpeta de certificados en
luego copie el archivo ca-certificados.crt en el
/etc/pki/tls/certs
si no hay una carpeta tls / certs: cree una y cambie los permisos usando chmod 777 -R folderNAME
fuente
Otra alternativa para solucionar este problema es deshabilitar la validación del certificado:
fuente
curl realiza la
SSL
verificación de certificados de forma predeterminada, utilizando un "paquete" deCertificate 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
fuente
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
fuente
Simplemente cree las carpetas, que faltan en su sistema.
y crea el archivo usando el siguiente comando,
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 ..Fijo.
fuente
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 propiocurl
binario, que tuvo problemas para encontrar los certificados predeterminados que se instalaron en esta máquina Ubuntu.fuente
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:Hice esto cuando intenté instalar Linuxbrew.
fuente
Si está utilizando homebrew en macOS o linuxbrew en linux, intente reinstalar el
openssl
ycurl
con los siguientes pasos desde esta página .Es posible que deba iniciar una nueva sesión de shell para verificar el resultado con
Si muestra la siguiente salida en la salida, ¡el problema debería resolverse!
Referencias
fuente
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.
Obtenga el certificado de CA
Use OpenSSL para obtener los certificados relacionados con el sitio web:
Esto generará algo como:
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)Construye tu imagen
Luego, cuando construyas tu imagen acoplable desde alpine, haz lo siguiente:
¡Tu imagen ahora funcionará correctamente! \ o /
fuente
Solo encuentra que esta solución funciona perfectamente para mí.
Encontré esta solución desde aquí
fuente
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:
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:
ahora reinicie su servicio: mi ejemplo, este comando:
fuente
Ejecute el siguiente comando en git bash que funciona bien para mí
fuente
Esto me solucionó:
fuente
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-certificatefuente
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.
fuente
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ó.
fuente
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.fuente