Error cURL error 60 SSL en WordPress - cómo reparar [Guía]

La descarga falló. cURL error 60: SSL certificate - cómo reparar en WordPress

Error cURL error 60: SSL certificate problem: unable to get local issuer certificate aparece en WordPress generalmente al intentar instalar o actualizar complementos, temas o el núcleo de WP mismo, es decir, en todas partes donde WordPress se conecta a través de HTTPS con un servidor externo (por ejemplo, api.wordpress.org).


¿Qué significa realmente este error?

El código 20 en OpenSSL (unable to get local issuer certificate) significa que el servidor no puede verificar la cadena de certificados SSL del sitio de destino porque el archivo local con certificados raíz de confianza (CA bundle) está desactualizado, dañado o ni siquiera está indicado en la configuración de PHP/cURL. No es un problema con el certificado del sitio que WordPress intenta consultar, el problema está en tu servidor.

Nota
Las causas más comunes son: archivo desactualizado cacert.pem en el servidor, falta o ruta incorrecta al CA bundle en la configuración de PHP (curl.cainfo, openssl.cafile), versión desactualizada de OpenSSL/cURL en el sistema y archivo desactualizado wp-includes/certificates/ca-bundle.crt en el mismo WordPress.

Solución 1: actualizar ca-bundle.crt en WordPress

WordPress mantiene su propia copia de certificados raíz en el archivo wp-includes/certificates/ca-bundle.crt. Este es el primer lugar a verificar.

  1. Descarga el archivo actualizado desde la última versión de WordPress (archivo ZIP más reciente desde wordpress.org o directamente desde el repositorio GitHub de WordPress Core).
  2. Reemplaza el archivo en el servidor a través de FTP/SFTP o panel de hosting en la ubicación wp-includes/certificates/ca-bundle.crt.
  3. Establece permisos 644 en el archivo.
  4. Borrar cualquier caché de objetos (Redis/Memcached) e intentar de nuevo.
Consejo
Este es el método más simple y generalmente más efectivo, porque en la mayoría de los casos WordPress utiliza exactamente este archivo como CURLOPT_CAINFO, si PHP no tiene el suyo propio configurado.

Solución 2: actualizar el conjunto de certificados CA a nivel de servidor (sistema/PHP)

Si cambiar el archivo WP no ayuda, el problema está en la configuración del servidor mismo — es decir, en curl/OpenSSL del sistema, que PHP utiliza independientemente de los archivos de WordPress.

En servidores Linux (Debian/Ubuntu):

sudo apt update sudo apt install --reinstall ca-certificates sudo update-ca-certificates

En servidores con CentOS/AlmaLinux/RHEL:

sudo yum reinstall ca-certificates sudo update-ca-trust

Actualización manual de cacert.pem para PHP

Si no tienes acceso de root al sistema (hosting compartido típico), descarga el archivo actual cacert.pem directamente desde curl.se:

Descargar cacert.pem

Cárgalo en el servidor (por ejemplo, en un directorio fuera de public_html, para que no sea accesible públicamente) e indícalo en php.ini:

curl.cainfo = "/ruta/a/cacert.pem" openssl.cafile = "/ruta/a/cacert.pem"

Después de cambiar php.ini reinicia PHP-FPM o Apache, según tu configuración:

sudo systemctl restart php8.2-fpm sudo systemctl restart apache2
Información
Si no tienes acceso a php.ini (hosting compartido), algunas empresas de hosting permiten sobrescribir la configuración mediante .user.ini en el directorio del sitio: curl.cainfo = "/home/tucuenta/cacert.pem"

Solución 3: cuando utilizas HestiaCP o tu propio VPS

Al gestionar tu propio servidor, vale la pena verificar además dos cosas:

  • La versión de OpenSSL — si el sistema es antiguo (por ejemplo, Ubuntu 18.04 que sale del soporte), simplemente actualizar ca-certificates puede no ser suficiente, porque faltan certificados raíz más nuevos en los repositorios. En ese caso, solo ayuda actualizar el sistema o cargar manualmente cacert.pem.
  • Versiones separadas de PHP para diferentes dominios — si aloja múltiples sitios con diferentes versiones de PHP, asegúrate de que curl.cainfo esté configurado para la versión correcta de PHP-FPM, porque cada versión tiene su propio php.ini.
Advertencia
En sistemas operativos obsoletos, simplemente actualizar el paquete ca-certificates puede no resolver el problema si los repositorios del sistema también están desactualizados. En tal situación, la única solución garantizada es cargar manualmente un cacert.pem o actualización del sistema.

Cómo verificar que el problema se ha resuelto

Desde el nivel del servidor puedes verificar la conexión SSL directamente a través de cURL en la terminal:

curl -v https://api.wordpress.org/

Si en el registro no aparece el error unable to get local issuer certificate, la configuración ya es correcta y WordPress debería volver a descargar actualizaciones sin problemas.

Además, vale la pena verificar desde el nivel de PHP, qué archivo CA se está utilizando realmente:

<?php
var_dump(ini_get('curl.cainfo'));
var_dump(ini_get('openssl.cafile'));

Resumen

El error cURL 60 en WordPress es en la mayoría de los casos una cuestión de archivo de certificados raíz desactualizado, no una falla del mismo WordPress.

PasoAcción
1Reemplaza wp-includes/certificates/ca-bundle.crt con el actual
2Actualiza ca-certificates a nivel del sistema
3Carga manualmente cacert.pem e indícalo en php.ini o .user.ini
4Reinicia PHP-FPM/Apache y prueba a través de curl -v
Éxito
En la práctica, generalmente es suficiente el paso 1 o 2 – la configuración manual cacert.pem es necesaria principalmente en servidores antiguos o no actualizados.

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Carrito de compras

Cerrar

Su cesta está vacía.

Empezar a comprar

Barra lateral