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.
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.
- 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).
- 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.
- Establece permisos 644 en el archivo.
- Borrar cualquier caché de objetos (Redis/Memcached) e intentar de nuevo.
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-certificatesEn servidores con CentOS/AlmaLinux/RHEL:
sudo yum reinstall ca-certificates sudo update-ca-trustActualizació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:
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
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.
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.
| Paso | Acción |
| 1 | Reemplaza wp-includes/certificates/ca-bundle.crt con el actual |
| 2 | Actualiza ca-certificates a nivel del sistema |
| 3 | Carga manualmente cacert.pem e indícalo en php.ini o .user.ini |
| 4 | Reinicia PHP-FPM/Apache y prueba a través de curl -v |







