problem - install curl certificates
Curl:(60) Certificado SSL: no se puede obtener el certificado de emisor local (15)
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 instructions decentes sobre cómo actualizar su certificado de CA que podría probar.
root@sclrdev:/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.
En Windows: si ejecuta desde cmd
> curl -X GET "https://some.place"
Descargue cacert.pem de https://curl.haxx.se/docs/caextract.html
Establecer variable de entorno:
CURL_CA_BUNDLE = C:/Program Files/curl-7.57.0/src/cacert.pem
y recarga el ambiente
refreshenv
Ahora intenta 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
En mi caso, resultó ser un problema con la instalación de mi certificado en el servicio que estaba tratando de consumir con cURL. No pude agrupar / concatenar los certificados intermedios y raíz en mi certificado de dominio . Al principio no era obvio que este era el problema porque Chrome lo resolvió y aceptó el certificado a pesar de omitir los certificados intermedio y raíz.
Después de agrupar el certificado, todo funcionó como se esperaba. Integré esto
$ cat intermediate.crt >> domain.crt
Y repetido para todos los intermedios y el certificado raíz.
En relación con el error "Problema de certificado SSL: no se puede obtener el certificado de emisor local". Obviamente, 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 alojamiento compartido y no tiene acceso a php.ini, puede agregarlo a .user.ini en public_html)
curl.cainfo="/path/to/downloaded/cacert.pem"
// No olvides escribir entre comillas
3) De forma predeterminada, el proceso FastCGI analizará nuevos archivos 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-files-the-new-htaccess/ )
Es muy probable que falte un certificado del servidor.
Root-> Intermediate-> Server
Un servidor debe enviar el Servidor e Intermedio como mínimo.
Use openssl s_client -showcerts -starttls ftp -crlf -connect abc:21
para solucionar el problema.
Si solo se devuelve un certificado (ya sea autofirmado o emitido), debe elegir entre:
- tener el servidor arreglado
- confía en ese certificado y agrégalo a tu tienda certificada de CA (no es la mejor idea)
- desactivar la confianza, por ejemplo
curl -k
(muy mala idea)
Si el servidor devolvió, más de uno, pero sin incluir un certificado autofirmado (raíz):
- instale el certificado CA (root) en su tienda CA para esta cadena, por ejemplo, google the issuer. ( SOLO si confías en esa CA)
- tener el servidor arreglado para enviar la CA como parte de la cadena
- confía en un cert en la cadena
- desactivar la confianza
Si el servidor devolvió un certificado de CA raíz, entonces no está en su almacén de CA, sus opciones son:
- Agregar (confiar)
- desactivar la confianza
He ignorado certs expirados / revocados porque no había mensajes que lo indicaran. Pero puedes examinar los certs con openssl x509 -text
Dado que se está conectando a un servidor de edición casera ( https://www.cerberusftp.com/support/help/installing-a-certificate/ ) ftp, voy a decir que está auto firmado.
Por favor, publique más detalles, como el resultado de openssl.
Está fallando porque Curl no puede verificar el certificado proporcionado por el servidor.
Hay dos opciones para que esto funcione:
Use curl con la opción
-k
que permite que curl haga conexiones inseguras, es decir, curl no verifica el certificado.Agregue la CA raíz (la CA que firma el certificado del servidor) a
etc/ssl/certs/ca-certificates.crt
Debería usar la opción 2 ya que esa es la opción que asegura que se está conectando al servidor FTP seguro.
Hasta ahora, he visto este problema suceder dentro de las redes corporativas debido a dos razones, una o ambas de las cuales pueden estar sucediendo en su caso:
- Debido a la forma en que funcionan los proxies de red , tienen sus propios certificados SSL, lo que altera los certificados que curl ve. Muchas o la mayoría de las redes empresariales lo obligan a usar estos proxies.
- Algunos programas antivirus que se ejecutan en las PC del cliente también actúan de manera similar a un proxy HTTPS, de modo que pueden analizar el tráfico de su red. Su programa antivirus puede tener una opción para desactivar esta función (suponiendo que sus administradores lo permitan).
Como nota al margen, el número 2 anterior puede hacer que se sienta incómodo con respecto a su tráfico de TLS supuestamente seguro que se escanea. Ese es el mundo corporativo para ti.
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 insegura (ver respuesta por @YSU).
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 la WAN.
Sin embargo, cuando se accedió al sitio desde la LAN (por ejemplo, cuando Wordpress realizó una solicitud curl
a su propio servidor, a pesar de usar la WAN IP 49.xxx
), se le envió la página de inicio de sesión de pfSense.
Identifiqué el certificado como el certificado pfSense webConfigurator Self-Signed Certificate
. No es de extrañar que curl
arrojado un error.
Causa: lo que sucedió fue que curl
usaba la dirección IP WAN 49.xxx
. Pero, en el contexto del servidor web, la IP WAN era el cortafuegos.
Depurar: descubrí que estaba obteniendo el certificado pfSense.
Solución: en el servidor que aloja el sitio, señale su propio nombre de dominio a 127.0.0.1
Al aplicar la solución, la solicitud curl
fue manejada correctamente por el servidor web, y no reenviada al firewall que respondió enviando la página de inicio de sesión.
Nos encontramos con este error recientemente. Resulta que estaba relacionado con el certificado raíz que no está instalado correctamente en el directorio de la tienda 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 de certificado SSL: no se puede obtener el certificado de emisor local.
Después de usar strace curl ...
, se determinó que curl buscaba el archivo raíz cert con un nombre de 60ff2731.0, que se basa en una convección hash de hash openssl. Así que 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, lee el certificado server.pem, determinó el nombre del archivo root cert (rootcert.pem), lo convirtió a su nombre hash, luego realizó una búsqueda de archivo OS, pero no pudo encontrarlo.
Por lo tanto, la conclusión es utilizar el uso de curl cuando el error de curvatura es oscuro (fue una gran ayuda), y luego asegúrese de instalar correctamente el certificado raíz usando la convención de nomenclatura de openssl.
Para mí, la simple instalación de certificados ayudó:
sudo apt-get install ca-certificates
Sí, también necesita agregar un certificado de 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)
Solución simple: IN ~/.sdkman/etc/config
, cambie sdkman_insecure_ssl=true
Pasos:
nano ~/.sdkman/etc/config
cambiar sdkman_insecure_ssl=false
a sdkman_insecure_ssl=true
guardar y Salir
Tuve este problema después de instalar Git Extensions v3.48. Intenté instalar mysysgit nuevamente pero el mismo problema. Al final, tuvo que deshabilitar (¡tenga en cuenta las implicaciones de seguridad!) Verificación SSL de Git con:
git config --global http.sslVerify false
pero si tienes un certificado de dominio, mejor agrégalo a (Win7)
C:/Program Files (x86)/Git/bin/curl-ca-bundle.crt
-k
(SSL) Esta opción permite explícitamente que curl realice transferencias y conexiones SSL "inseguras". Comenzando con curl 7.10, se intentará asegurar todas las conexiones SSL utilizando el paquete de certificados de CA instalado por defecto. Esto hace que todas las conexiones consideradas "inseguras" fallen, a menos que se use -k / - inseguridad.