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

361
[email protected]:/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.
9
274

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 de https://curl.haxx.se/ca/cacert.pem

  2. Agregue la siguiente línea a php.ini: (si se trata de un alojamiento compartido y no tiene acceso a php.ini, puede agregarlo a .user.ini en public_html).

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

    ¡Asegúrese de encerrar la ruta entre comillas dobles!

  3. De forma predeterminada, el proceso FastCGI analizará los 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-and-user-ini- archivos-el-nuevo-htaccess / ).

13
  • 1
    El primero se relaciona con la certificación de operaciones realizadas utilizando la biblioteca OpenSSL; el segundo a las solicitudes realizadas mediante cURLMike 24/0316 a las 14:21
  • 4
    En realidad, luché durante una hora ya que no escribí la ruta entre comillas. Así que, por favor, tome nota aquícurl.cainfo="/path/to/downloaded/cacert.pem" // Do not forget to write between quotesHimanshu Upadhyay 26 dic 2017 a las 16:25
  • 36
    No veo ninguna referencia en la pregunta a PHP. ¿Por qué las referencias en la respuesta? Si se ha editado la pregunta, ¿podría editarse la respuesta para reflejar la línea de comando que se está utilizando ahora? Adam 5 feb 2018 a las 23:10
  • 9
    @Adam Si bien la pregunta no menciona PHP, aparece como el resultado de búsqueda número uno en Google para el mensaje de error específico generado por PHP. Entonces, tal vez no responda específicamente a la pregunta de OP, pero parece que aún es útil para la comunidad. rinogo 2/04/19 a las 17:13
  • 5
    Esta respuesta me engañó, ya que es una solución relacionada con PHPWasif Khan 6 feb.20 a las 9:26
228

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

Hay dos opciones para que esto funcione:

  1. Use cURL con la -kopción que permite que curl realice 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.

14
  • 1
    Agregué mi archivo rootCA.pem dentro: - root @ sclrdev: / home / certs / FreshCerts # ll /etc/ssl/certs/rootCA.pem -rwxrwxrwx 1 root root 1302 8 de julio 00:09 / etc / ssl / certs / rootCA.pem * Incluso yo verifiqué el archivo ServerCertificate.pem con mi rootCA.pem: - root @ sclrdev: / home / certs / FreshCerts # openssl verify -CAfile rootCA.pem ../ServerCertificate.pem ServerCertificate.pem: OK Y también el contenido de rootCA.pem dentro de ca -ificates.crt. root @ sclrdev: / home / sclr / subhendu / certs / FreshCerts # ll /etc/ssl/certs/ca-certificates.crt -rw-r - r-- 1 root root 247945 8 de julio 00:10 / etc / ssl /certs/ca-certificates.crtuser3812540 8 de julio de 2014 a las 4:39
  • No soy capaz de averiguar dónde me estoy equivocando. En los seguimientos de WireShark, aparece el siguiente error: - Cliente Hola Servidor Hola, Certificado, Servidor Hola Alerta Terminado (nivel: Fatal, Descripción: CA desconocida (48)) ¿Puede guiarme y ayudarme en esto? user3812540 8 de julio de 2014 a las 4:44
  • La forma en que funciona openssl es que intenta completar la cadena de certificados durante la verificación. ¿Su certificado de servidor está firmado por una CA intermedia y no por una CA raíz? por ejemploYuvika 8 de julio de 2014 a las 6:58
  • Mi certificado está firmado únicamente por la CA raíz. user3812540 8 de julio de 2014 a las 7:03
  • 1
    Recibí un error: - root @ sclrdev: ~ # openssl s_client -connect <server_ip>: 21 -showcerts CONNECTED (00000003) 3074050248: error: 140770FC: Rutinas SSL: SSL23_GET_SERVER_HELLO: protocolo desconocido: s23_clnt.c: 766: --- no hay certificado de pares disponible --- No se han enviado los nombres de CA del certificado de cliente --- El protocolo de enlace SSL ha leído 7 bytes y escrito 225 bytes --- Nuevo, (NINGUNO), el cifrado es (NINGUNO) No se admite la renegociación segura Compresión: NINGUNO Expansión: NINGUNO --- ¿No estoy seguro de qué significa esto exactamente? user3812540 8 de julio de 2014 a las 12:08
84

He resuelto 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 (consulte la respuesta de @YSU)!

8
  • 56
    Esto puede ayudar a evitar el problema. Pero pierde totalmente la idea de https y el sistema de certificación. Stephan Richter 24 de abril de 2015 a las 8:57
  • 1
    ¡Obras! Buen bypass rápido y sucio si no le importa el certificadoGilly 17 dic 2015 a las 16:09
  • 3
    Esto lo hace completamente inseguro. Moox 1 de feb. De 2016 a las 22:36
  • 1
    Estaba enfrentando este problema en mi servidor local, aunque el mismo código funcionó bien en el servidor de prueba. Bien para mí, ya que estaba en local. graciassabin 2 de junio de 2017 a las 9:26
  • 1
    agregue esta verificación para asegurarse de que solo lo usa con el servidor local if( stristr("127.0.0.1",$_SERVER["SERVER_NAME"] ) || stristr("localhost",$_SERVER["SERVER_NAME"] )) curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); Hussain 20/07/2017 a las 11:21
25

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 intermedios 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 intermedios y el certificado raíz.

4
  • 2
    Tuve un problema similar, excepto que no tenía mi Apache SSLCertificateChainFile configurado con el certificado correcto. Wayne Piekarski 7 de julio de 2016 a las 23:40
  • 1
    Tenga en cuenta que si hace esto, y el crt que está agregando no tiene una nueva línea al final, entonces tendrá líneas como -----END CERTIFICATE----------BEGIN CERTIFICATE-----en su paquete y obtendrá el error oscuro:curl: (77) error setting certificate verify locationsMarty Neal 6 de marzo de 2017 a las 15:37
  • 2
    Estoy usando certificados letsencrypt pero implementé solo el certificado y la clave privada en el servidor. Chrome y curl en mi computadora no se quejaron, sin embargo, una aplicación de nodejs que estaba construyendo no aceptó el certificado. ¡La implementación de la cadena completa en el servidor solucionó el problema! ¡Gracias por señalar la dirección correcta! Paulo Santos 2/07/18 a las 22:28
  • En mi caso (certificado de comodo), enviaron los certificados intermedios como my-domain.ca-bundle. Tuve que agregar eso a my-domain.crt. ¡Gracias! Jon Hulka 26 oct 2018 a las 18:35
25

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

sudo apt-get install ca-certificates
1
  • 2
    Por ejemplo, es posible que algunos contenedores de ventana acoplable pequeños no tengan esto instalado y no tiene sentido solucionar ningún otro problema cuando el paquete completo no está presente. Anton Krug 3 de agosto de 2018 a las 15:42
19

Tuve este problema después de instalar Git Extensions v3.48. Intenté instalar mysysgit nuevamente pero el mismo problema. Al final, tuve que deshabilitar (¡tenga en cuenta las implicaciones de seguridad!) La verificación SSL de Git con:

git config --global http.sslVerify false

pero si tiene un certificado de dominio, mejor agréguelo a (Win7)

C:\Program Files (x86)\Git\bin\curl-ca-bundle.crt
3
  • 27
    Funciona, pero se siente como ocultar el síntoma, no curar la enfermedad. MonoThreaded 10 feb.15 a las 12:11
  • 6
    Deshabilitar la verificación SSL es muy peligrosoJonas Lejon 21 de septiembre de 2015 a las 9:45
  • 1
    Puede prescindir --globalde tener SSL solo deshabilitado para el repositorio donde tiene problemas. Consulte groups.google.com/forum/#!topic/git-for-windows/mlqn5J4OLlw para obtener una discusión sobre los archivos crt necesarios actuales. koppor 22 de septiembre de 2015 a las 10:05
13

Nos encontramos con este error recientemente. Resulta que estaba relacionado con el certificado raíz que no se instaló correctamente en el directorio de la tienda de CA. Estaba usando un comando curl donde estaba especificando el directorio CA directamente. curl --cacert /etc/test/server.pem --capath /etc/test ...Este comando fallaba cada vez con curl: (60) Problema del certificado SSL: no se puede obtener el certificado del emisor local.

Después de usarlo strace curl ..., se determinó que curl buscaba el archivo de certificado raíz con un nombre de 60ff2731.0, que se basa en una convención de nomenclatura hash openssl. Entonces encontré este comando para importar efectivamente el certificado raíz correctamente:

ln -s rootcert.pem `openssl x509 -hash -noout -in rootcert.pem`.0

que crea un enlace suave

60ff2731.0 -> rootcert.pem

curl, debajo de las cubiertas leyó el certificado server.pem, determinó el nombre del archivo de certificado raíz (rootcert.pem), lo convirtió a su nombre hash, luego buscó el archivo del sistema operativo, pero no pudo encontrarlo.

Entonces, la conclusión es, use strace cuando ejecute curl cuando el error de curl es oscuro (fue una gran ayuda), y luego asegúrese de instalar correctamente el certificado raíz utilizando la convención de nomenclatura de openssl.

1
  • 2
    Uf, ayudó. Para explicar un poco lo que me ayudó: a) ejecutar strace curl ... b) buscar stat fallido () con something-hex.0 c) googlear algo-hex, encontré el certificado correspondiente d) poner el certificado encontrado en / usr / local / share / ca -ificates / (con extensión * .crt, ya que * .pem no funcionó) e) ejecute update-ca -ificates. ¡Entonces Bingo! - el enlace simbólico necesario se creó automáticamente en / usr / lib / ssl / certs /No-Bugs Hare 4/04/2016 a las 7:10
11

Lo más probable es que falte un certificado del servidor.

Raíz-> Intermedio-> Servidor

Un servidor debe enviar el servidor e intermedio como mínimo.

Úselo openssl s_client -showcerts -starttls ftp -crlf -connect abc:21para depurar el problema.

Si solo se devuelve un certificado (ya sea autofirmado o emitido), debe elegir entre:

  1. tener el servidor arreglado
  2. confíe en ese certificado y agréguelo a su tienda de certificados de CA (no es la mejor idea)
  3. deshabilitar la confianza, p. ej. curl -k(muy mala idea)

Si el servidor regresó, más de uno, pero sin incluir un certificado autofirmado (raíz):

  1. instale el certificado CA (raíz) en su tienda CA para esta cadena, por ejemplo, busque en Google el emisor. ( SOLO si confía en esa CA)
  2. tener el servidor arreglado para enviar la CA como parte de la cadena
  3. confiar en un certificado en la cadena
  4. deshabilitar la confianza

Si el servidor devolvió un certificado de CA raíz, entonces no está en su tienda de CA, sus opciones son:

  1. Agrégalo (confía)
  2. deshabilitar la confianza

He ignorado los certificados caducados / revocados porque no había mensajes que lo indicaran. Pero puede examinar los certificados conopenssl x509 -text

Dado que se está conectando a un servidor ftp de edición casera ( https://www.cerberusftp.com/support/help/installing-a-certificate/ ), voy a decir que está autofirmado.

Publique más detalles, como el resultado de openssl.

0
8

De acuerdo con cURL docs , también puede pasar el certificado al curlcomando:

Get a CA certificate that can verify the remote server and use the proper option to point out this CA cert for verification when connecting. For libcurl hackers: curl_easy_setopt(curl, CURLOPT_CAPATH, capath);

With the curl command line tool: --cacert [file]


Por ejemplo:

curl --cacert mycertificate.cer -v https://www.stackoverflow.com
6

También me he encontrado con este problema. He leído este hilo y la mayoría de las respuestas son informativas pero demasiado complejas para mí. No tengo experiencia en temas de redes, por lo que esta respuesta es para personas como yo.

En mi caso, este error ocurrió porque no incluí los certificados intermedio y raíz junto al certificado que estaba usando en mi aplicación.

Esto es lo que obtuve del proveedor del certificado SSL:

- abc.crt
- abc.pem
- abc-bunde.crt

En el abc.crtarchivo, solo había un certificado:

-----BEGIN CERTIFICATE-----
/*certificate content here*/
-----END CERTIFICATE-----

Si lo proporciono en este formato, el navegador no mostraría ningún error (Firefox) pero obtendría un curl: (60) SSL certificate : unable to get local issuer certificateerror cuando hice la solicitud curl.

Para corregir este error, verifique su abc-bunde.crtarchivo. Lo más probable es que vea algo como esto:

-----BEGIN CERTIFICATE-----
/*additional certificate content here*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*other certificate content here*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*different certificate content here*/
-----END CERTIFICATE-----

Estos son sus certificados intermedios y raíz. Se produce un error porque faltan en el certificado SSL que está proporcionando a su aplicación.

Para corregir el error, combine el contenido de ambos archivos en este formato:

-----BEGIN CERTIFICATE-----
/*certificate content here*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*additional certificate content here*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*other certificate content here*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*different certificate content here*/
-----END CERTIFICATE-----

Tenga en cuenta que no hay espacios entre los certificados, al final o al principio del archivo. Una vez que proporcione este certificado combinado a su aplicación, su problema debería solucionarse.

1
  • Esto resolvió mi problema. No me di cuenta de que tener una línea vacía entre certificados era malo. Beefster 19/08/20 a las 19:30
5

Puede ser suficiente actualizar la lista de certificados

sudo update-ca-certificates -f

update-ca-certificates is a program that updates the directory /etc/ssl/certs to hold SSL certificates and generates ca-certificates.crt, a concatenated single-file list of certificates.

2
  • 1
    lo hizo y todo está hecho después de ejecutarlo. Pero el rizo no funciona. sigue siendo el mismo error. AGamePlayer 19/11/19 a las 23:35
  • 1
    Sí mandé, y no ayudó, y no podía creer que tuviera que hacer todo lo anterior. Y luego tu respuesta ... Gracias por la bandera '-f'. Alex Shtromberg 11/01/20 a las 20:11
5

Ingrese estos dos códigos para deshabilitar el problema del certificado SSL. me funcionó después de mucha investigación, encontré esto.

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

certificado ssl

1
  • ¿Dónde debo ingresar esas líneas? en que archivo? ¿localización? asa 17 de julio a las 10:52
4

Intente reinstalar curl en Ubuntu y actualizar mis certificados de CA con los sudo update-ca-certificates --freshque actualizaron los certificados

4
  1. Descarga https://curl.haxx.se/ca/cacert.pem

  2. Después de la descarga, mueva este archivo a su servidor wamp.

    Para exp: D: \ wamp \ bin \ php \

  3. Luego agregue la siguiente línea al archivo php.ini en la parte inferior.

curl.cainfo = "D: \ wamp \ bin \ php \ cacert.pem"

  1. Ahora reinicia tu servidor wamp.
2
  • 1
    También uso WAMP y tu forma me ayudó. ¡Gracias! Dmitriy Korytnyi 9 jul.20 a las 16:21
  • Mi placer #Dmitiry KorytnyiSandeep Sherpur 17 de mayo a las 7:37
3

Sí, también necesita agregar un certificado CA. Agregar un fragmento de código en Node.js para una vista clara.

var fs = require(fs)
var path = require('path')
var https = require('https')
var port = process.env.PORT || 8080;
var app = express();

https.createServer({
key: fs.readFileSync(path.join(__dirname, './path to your private key/privkey.pem')),
cert: fs.readFileSync(path.join(__dirname, './path to your certificate/cert.pem')),
ca: fs.readFileSync(path.join(__dirname, './path to your CA file/chain.pem'))}, app).listen(port)
3

En Windows estaba teniendo este problema. Curl fue instalado por mysysgit, por lo que descargar e instalar la versión más reciente solucionó mi problema.

De lo contrario, estas son instrucciones decentes sobre cómo actualizar su certificado de CA que puede probar.

2

Mi caso fue diferente. Estoy alojando un sitio detrás de un firewall. El error fue causado por pfSense.

Network layout: |Web Server 10.x.x.x| <-> |pfSense 49.x.x.x| <-> |Open Internet|

Accidentalmente encontré la causa, gracias a esta respuesta .


Todo está bien cuando accedí a mi sitio desde WAN.

Sin embargo, cuando se accedió al sitio desde dentro de la LAN (por ejemplo, cuando Wordpress hizo una curlsolicitud a su propio servidor, a pesar de usar la IP WAN 49.x.x.x), se le entregó la página de inicio de sesión de pfSense.

Identifiqué el certificado como pfSense webConfigurator Self-Signed Certificate. No es de extrañar que curlarrojó un error.

Causa: Lo que sucedió fue que curlestaba usando la dirección IP WAN del sitio 49.x.x.x. Pero, en el contexto del servidor web, la WAN IP era el firewall.

Depuración: descubrí que estaba obteniendo el certificado pfSense.

Solución: en el servidor que aloja el sitio, apunte su propio nombre de dominio a 127.0.0.1

Al aplicar la solución, curlla solicitud fue manejada correctamente por el servidor web y no reenviada al firewall que respondió enviando la página de inicio de sesión.

2

Tienes que cambiar el certificado del servidor de cert.pema fullchain.pem
Tuve el mismo problema con Perl HTTPS Daemon:
he cambiado:
SSL_cert_file => '/etc/letsencrypt/live/mydomain/cert.pem'
a:
SSL_cert_file => '/etc/letsencrypt/live/mydomain/fullchain.pem'

1
  • Encontré ese problema al mover certificados existentes a un alojamiento CyberPanel, y esta es la forma en que logré solucionarlo. Bigue Nique 29 de nov. De 2020 a las 3:38
2
sudo apt-get install ca-certificates

Trabajó para mi.

1
1

En Windows: si desea ejecutar desde cmd

> curl -X GET "https://some.place"

Descargue cacert.pem de https://curl.haxx.se/docs/caextract.html

Establezca permanentemente la variable de entorno:

CURL_CA_BUNDLE = C:\somefolder\cacert.pem

Y recargue el entorno volviendo a abrir cualquier ventana de cmd en la que desee utilizar curl; si Chocolatey está instalado, puede usar:

refreshenv

Ahora inténtalo de nuevo

Motivo del problema: https://laracasts.com/discuss/channels/general-discussion/curl-error-60-ssl-certificate-problem-unable-to-get-local-issuer-certificate/replies/95548

0

Tenía ese problema y no se resolvió con una versión más reciente. / etc / certs tenía el certificado raíz, el navegador dijo que todo estaba bien. Después de algunas pruebas, recibí de ssllabs.com la advertencia de que mi cadena no estaba completa (de hecho, era la cadena del certificado anterior y no el nuevo). Después de corregir la cadena de certificados, todo estaba bien, incluso con curl.

0

Este es un problema del almacén de certificados ssh. Debe descargar el archivo pem de certificado válido del sitio web de la CA de destino y luego crear el archivo de enlace suave para indicar a ssl el certificado de confianza.

openssl x509 -hash -noout -in DigiCert_Global_Root_G3.pem

conseguirás dd8e9d41

construya el enlace solf con el número hash y agregue el sufijo al archivo con un .0 (punto-cero)

dd8e9d41.0

Vuelva a intentarlo.

0

Tenía la intención de comentar la respuesta de Yuvik, pero no tengo suficientes puntos de reputación.

Cuando importa un archivo .crt a /usr/share/local/ca-certificates, debe tener el formato correcto. Algunos de estos se han mencionado anteriormente, pero nadie ha mencionado la necesidad de solo un carácter de nueva línea, y nadie ha recopilado una lista de verificación, por lo que pensé en proporcionar una mientras estoy en ello.

  1. El certificado debe terminar en .crt. Desde la página de manual de Ubuntu :

    Certificates must have a .crt extension in order to be included by update-ca-certificates

  2. Los archivos de certificado de /usr/local/share/ca-certificatessolo pueden contener un certificado

  3. Los archivos de certificado deben terminar en una nueva línea. update-ca-certificatesparecerá que funciona si cada fila contiene, por ejemplo, un retorno de carro + una nueva línea (como es estándar en Windows), pero una vez que se agrega el certificado /etc/ssl/ca-certificates.crt, aún no funcionará. Este requisito específico me mordió mientras cargamos certificados de una fuente externa.

0

Algunos sistemas pueden tener este problema debido al entorno conda. Si tiene conda instalado, deshabilitarlo puede resolver su problema. En mi caso, cuando desactivé conda, se resolvió este error de curl-SSL. En ubuntu o macOS prueba este comando

conda deactivate
-1

Hasta ahora, he visto que este problema ocurre dentro de las redes corporativas debido a dos razones, una o ambas pueden estar sucediendo en su caso:

  1. Debido a la forma en que funcionan los proxies de red , tienen sus propios certificados SSL, lo que altera los certificados que ve curl. Muchas o la mayoría de las redes empresariales le obligan a utilizar estos proxies.
  2. Algunos programas antivirus que se ejecutan en las PC cliente también actúan de manera similar a un proxy HTTPS, de modo que pueden escanear el tráfico de su red. Su programa antivirus puede tener una opción para deshabilitar esta función (asumiendo que sus administradores lo permitan).

Como nota al margen, el número 2 anterior puede hacer que se sienta incómodo con el escaneo de su tráfico TLS supuestamente seguro. Ese es el mundo empresarial para ti.

-1

Tuve este problema con Digicert de todas las CA. Creé un archivo digicertca.pem que era intermedio y raíz pegados juntos en un solo archivo.

curl https://cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem
curl https://cacerts.digicert.com/DigiCertSHA2SecureServerCA.crt.pem

curl -v https://mydigisite.com/sign_on --cacert DigiCertCA.pem
...
*  subjectAltName: host "mydigisite.com" matched cert's "mydigisite.com"
*  issuer: C=US; O=DigiCert Inc; CN=DigiCert SHA2 Secure Server CA
*  SSL certificate verify ok.
> GET /users/sign_in HTTP/1.1
> Host: mydigisite.com
> User-Agent: curl/7.65.1
> Accept: */*
...

Eorekan tenía la respuesta, pero solo conseguimos que yo y otro votáramos su respuesta.

-2

Específicamente para Windowsusuarios, usando curl-7.57.0-win64-mingwo una versión similar.

Esto es un poco tarde y las respuestas existentes son correctas. Pero todavía tuve que luchar un poco para que funcionara en mi máquina con Windows, aunque el proceso es bastante sencillo. Entonces, compartiendo el proceso paso a paso.

Este error básicamente significa que curl no puede verificar el certificado del URI de destino. Si confía en el emisor del certificado (CA), puede agregarlo a la lista de certificados de confianza.

Para eso, busque el URI (por ejemplo, en Chrome) y siga los pasos

  1. Haga clic con el botón derecho en el icono del candado seguro
  2. Haga clic en el certificado, se abrirá una ventana con los detalles del certificado.
  3. Vaya a la pestaña 'Ruta de certificación'
  4. Haga clic en el certificado ROOT
  5. Haga clic en Ver certificado, se abrirá otra ventana de certificado
  6. Ir a la pestaña Detalles
  7. Haga clic en Copiar a archivo, se abrirá el asistente de exportación.
  8. Haga clic en Siguiente
  9. Seleccione 'X.509 codificado en Base-64 (.CER)'
  10. Haga clic en Siguiente
  11. Dé un nombre descriptivo, por ejemplo, 'MyDomainX.cer' (busque el directorio deseado)
  12. Haga clic en Siguiente
  13. Haga clic en Finalizar, guardará el archivo del certificado.
  14. Ahora abra este .cerarchivo y copie el contenido (incluido ----- BEGIN CERTIFICATE ----- y ----- END CERTIFICATE -----)
  15. Ahora vaya al directorio donde curl.exeestá guardado, por ejemploC:\SomeFolder\curl-7.57.0-win64-mingw\bin
  16. Abra el curl-ca-bundle.crtarchivo con un editor de texto
  17. Agregue el texto del certificado copiado al final del archivo. Ahorrar

Ahora su comando debería ejecutarse bien en curl.

2
  • 3
    Se agradecería algún comentario sobre el motivo del voto negativoArghya C 19/07/18 a las 6:49
  • No encuentro ningún archivo llamado "curl-ca-bundle.crt" en "C: \ xampp \ apache \ bin" (windows). Supongo que los votos negativos se debieron a esto. Tengo mi "curl.exe" en la carpeta "bin" mencionada anteriormentekathikeyan A 16/07/19 a las 9:01
-4

esto puede ayudarte a tragar:

$client = new Client(env('API_HOST'));
$client->setSslVerification(false);

probado en tragar / tragar 3. *

-5

Solución simple: IN ~/.sdkman/etc/config, cambiarsdkman_insecure_ssl=true

Pasos:
nano ~/.sdkman/etc/config
cambio sdkman_insecure_ssl=falsepara sdkman_insecure_ssl=true
guardar y salir