Cómo Ignorar Errores de Certificados SSL con cURL: Guía paso a paso

Comentarios: 0

Al realizar peticiones HTTP usando cURL, a veces hay un problema con la verificación de certificados SSL. Esto puede ocurrir cuando se utiliza un certificado de servidor autofirmado, o si está caducado. En tales circunstancias, cURL deniega por defecto la conexión para salvaguardar al usuario de posibles riesgos. Sin embargo, esto podría obstaculizar el proceso durante las pruebas de API, el trabajo en redes cerradas o el uso de servicios locales. Por eso necesitamos averiguar en qué circunstancias cURL ignora SSL y cómo implementarlo.

En este artículo se detallará cómo ignorar los certificados SSL en cURL, los comandos específicos que hay que ejecutar y los posibles problemas relacionados con la seguridad.

unnamed.jpg

¿Qué son cURL y SSL?

cURL (Client URL) es un proyecto de software que proporciona una línea de comandos y una biblioteca para transferir datos utilizando varios protocolos. Esta herramienta es muy útil para automatizar peticiones, pruebas de API o recuperación de información de diversos recursos web, ya que funciona con multitud de tipos de red.

SSL (Secure Sockets Layer) es una forma de tecnología de encriptación que asegura la transmisión de datos a través de Internet. Este certificado es un documento que demuestra que un determinado sitio web es auténtico y establece una conexión segura entre el usuario y el servidor. Los certificados de servidor autofirmados, caducados o no válidos provocan bloqueos al utilizar cURL.

Para escapar de tales desafíos, es mejor deshabilitar cURL SSL, así, realizar peticiones cURL tendrá una mayor tasa de éxito. Este método de prueba es muy útil, pero puede ser peligroso desde el punto de vista de la seguridad.

cURL, curl, o Curl: ¿Cuál es la diferencia?

El nombre oficial de la herramienta es cURL, la primera letra de la palabra es minúscula y el resto son mayúsculas. En los documentos, artículos y códigos encontrarás otras formas:

  • curl (todo en minúsculas) - Así es como suelen escribirlo la mayoría de los desarrolladores en códigos y líneas de comandos.
  • Curl (C mayúscula) - A veces se utiliza en documentos no oficiales, pero es incorrecto.

Independientemente de la ortografía, cURL es siempre cURL. Es una herramienta multiplataforma y de línea de comandos para transferir datos con sintaxis URL. La mayoría de las personas en desarrollo web, administración de sistemas y DevOps lo utilizan para realizar solicitudes HTTP, probar API y realizar interacciones de automatización de servidores.

¿Por qué desactivar la verificación SSL?

Normalmente, la utilidad de transferencia de datos valida los certificados que aparecen en la pantalla del usuario para frustrar sitios falsos y ataques. Hay escenarios, sin embargo, cuando el cURL ignorar la verificación de certificados. Veamos cuándo surgen esos casos:

  • Certificados autoemitidos utilizados con servidores de prueba o locales. Mientras se prueban APIs o aplicaciones, los desarrolladores a menudo crean certificados autofirmados que no están avalados por Autoridades de Certificación (CA) oficiales.
  • Acceso de empleados a servicios corporativos internos. Los servidores internos de una organización suelen tener certificados que no son de confianza. Cuando el acceso automatizado a dichos recursos es obligatorio, desactivar la comprobación de certificados es una solución temporal óptima.
  • Ciertos sitios tienen un certificado de servidor que ha caducado o no es válido. Si es crucial extraer información de un recurso de este tipo, la validación puede desactivarse temporalmente sin que el usuario se encuentre con el error específico del certificado. En este caso cURL ignora los errores SSL y todo funciona correctamente.
  • Desactivar la comprobación ayuda a evitar fallos en scripts que requieren la automatización de peticiones de red. Cuando un script envía constantemente peticiones a un servidor que tiene un certificado incorrecto, es necesario desactivar la comprobación.

A pesar de que la comprobación es un factor vital, desactivarla por completo puede plantear problemas y riesgos. Los analizaremos a continuación.

Riesgos de seguridad de desactivar SSL

Cuando cURL ignora los certificados significa que la conexión puede ser explotada a través de diversos ataques de seguridad, y esto es particularmente importante cuando se trata de información sensible, incluyendo contraseñas, tokens o incluso datos de pago.

Principales amenazas:

  • Man In The Middle Attack (MITM): una técnica en la que se intercepta la información entre el usuario y el servidor y se alteran o sustituyen los datos. Supone un riesgo aún mayor cuando no hay nadie que verifique, ya que resulta demasiado fácil implementar ataques maliciosos. Por ejemplo, se puede sustituir una página de inicio de sesión por otra falsa para que el atacante pueda obtener fácilmente las credenciales.
  • cURL no puede verificar el certificado del servidor, invalidándolo. Por lo tanto, no hay forma de asegurar que el nodo buscado es al que se está conectando, y permite la sustitución de sitios por actores que se hacen pasar por recursos de confianza.
  • Si durante las pruebas, la verificación se desactiva y ese código se lleva al entorno de producción, entonces puede haber un aumento en la posibilidad de fugas o incluso ataques de fuerza bruta que comprometan información confidencial.

Si se requiere que cURL ignore los errores SSL, entonces es primordial ver los certificados autofirmados:

  • Saltar la verificación sólo en un entorno de pruebas, y evitarlo en producción;
  • No transmita información confidencial a través de una conexión no cifrada;
  • Agregar manualmente el certificado autofirmado a confianza;
  • Supervisar el código, excluyendo los errores de configuración, para garantizar que la verificación se mantiene en el código de producción.

En el siguiente bloque, analizaremos en detalle los procesos que se llevan a cabo en la línea de comandos para deshabilitar la verificación de certificados.

Cómo evitar los errores SSL con cURL

Para hacer que cURL ignore SSL, es necesario incluir parámetros específicos que suspendan la verificación de autenticación. Como se ha indicado anteriormente, este tipo de prácticas sólo pueden utilizarse dentro de un entorno debidamente protegido.

El método más eficaz para mitigar un error de certificado de sitio no válido es configurar manualmente una falsificación de verificación temporal. Esto se puede hacer con los siguientes parámetros:

  • -k o --insecure—para conectarse a un sitio en el que el certificado del servidor no es válido;
  • --cacert—para definir la ubicación donde se almacena el archivo del certificado de usuario.

A continuación se muestra cómo puede realizar un ejemplo de llamada cURL que ignore la verificación de certificados:


curl -k https://example.com

Esto permitirá que la llamada cURL se realice incluso con un certificado de servidor caducado.

Si desea enviar datos (como en una solicitud POST):


curl -k -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "param=value" https://example.com/api

Para mayor seguridad, seleccione directamente el directorio donde se encuentra el archivo.


curl --cacert /path/to/cert.pem https://example.com

Desactivación de la verificación SSL en su script

Si la solicitud está pensada para ser automatizada a través de una línea de comandos y la presencia del usuario no debería ser necesaria, entonces es beneficioso deshabilitar las comprobaciones de certificados en tales escenarios.

Aquí hay un ejemplo en Bash, como cURL ignora SSL:


#!/bin/bash
URL="https://example.com"
DATA=$(curl -k $URL)
echo "Server response: $DATA"

Con Python, puede utilizar el módulo requests con verify en False:


import requests
url = "https://example.com"
response = requests.get(url, verify=False)
print(response.text)

Al ejecutar este comando, Python te dará una advertencia sobre una conexión insegura. Además, tendrás que asegurarte de escribir código para desactivar las advertencias que surgen en caso de que el sitio tenga un certificado de servidor no válido:


import requests import urllib3 

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) 

url = "https://example.com"
response = requests.get(url, verify=False)
print(response.text)

Y ahora PHP con cURL:


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://example.com");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
echo $output;

La siguiente tabla enumera los métodos más comunes para ignorar la comprobación SSL, su uso y los posibles riesgos.

Método Comando / Parámetro Cuándo utilizar Riesgos
Desactivación completa de SSL y verificación del nombre de host curl -k / --insecure API de prueba, servicios locales Alto riesgo de MITM
Utilizar un certificado personalizado curl --cacert /path/to/cert.pem En caso de que tenga su propio certificado Más seguro, pero requiere configuración
Deshabilitar sólo SSL en código CURLOPT_SSL_VERIFYPEER=false Pruebas temporales Peligroso si sigue en producción

Conclusión

El mal funcionamiento de los certificados de servidor crea más problemas que sólo cuando funcionan con cURL. Los certificados garantizan la seguridad de los usuarios durante la transferencia de datos. Por lo tanto, desactivar la verificación es el último recurso cuando se encuentra un error depurando cURL. En función de la causa del error, existen otros enfoques menos extremos, como actualizar el documento, añadirlo a la región de confianza o simplemente cambiarlo por el correcto.

Sin la comprobación SSL, la conexión sería insalubre y fácilmente abusable por otros usuarios. Este enfoque sólo es aceptable en entornos controlados, como cuando uno está haciendo una prueba, o cuando el servicio es externo. En circunstancias normales, cuando se presenta un certificado de servidor inválido, es crucial que esta cláusula no se establezca en el código de trabajo, ya que se presentaría enmascaramiento de datos y otros agujeros de seguridad.

Comentarios:

0 Comentarios