Skip to main content

CloudLinux CageFS: Resolución de Problemas SSL/OpenSSL

Problema

En servidores CloudLinux con CageFS habilitado, las aplicaciones PHP (como Laravel, WordPress, etc.) pueden experimentar errores SSL al intentar realizar conexiones HTTPS externas:

error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed

Servicios típicamente afectados:

  • Google reCAPTCHA
  • Servicios SMTP (envío de emails)
  • APIs externas HTTPS
  • cURL/file_get_contents() con SSL

Causa Raíz

CageFS aísla a cada usuario en su propio entorno virtualizado, impidiendo el acceso a recursos del sistema como los certificados CA ubicados en /etc/ssl/certs/ y /usr/share/ca-certificates/.

Verificación del Problema

# Como root - funciona correctamente
openssl s_client -connect www.google.com:443 -verify_return_error
# Resultado: Verify return code: 0 (ok)

# Como usuario enjaulado - falla
sudo -u usuario php -r "
\$context = stream_context_create(['ssl' => ['verify_peer' => true]]);
\$result = file_get_contents('https://www.google.com', false, \$context);
echo \$result ? 'SSL OK' : 'SSL FAILED';
"
# Resultado: SSL FAILED

Solución Definitiva

La solución correcta es agregar el paquete ca-certificates completo al esqueleto de CageFS:

# 1. Agregar el paquete ca-certificates al esqueleto de CageFS
cagefsctl --addrpm ca-certificates 

# 2. Forzar actualización completa del esqueleto
cagefsctl --force-update 

# 3. Montar/remontar el esqueleto
cagefsctl -M

Ejemplo de Salida del Proceso

Durante cagefsctl --force-update, verás output similar a:

Copying /usr/sbin/update-ca-certificates to /usr/share/cagefs-skeleton/usr/sbin/update-ca-certificates
Copying /usr/share/ca-certificates/mozilla/ACCVRAIZ1.crt to /usr/share/cagefs-skeleton/usr/share/ca-certificates/mozilla/ACCVRAIZ1.crt
Copying /usr/share/ca-certificates/mozilla/AC_RAIZ_FNMT-RCM.crt to /usr/share/cagefs-skeleton/usr/share/ca-certificates/mozilla/AC_RAIZ_FNMT-RCM.crt
Copying /usr/share/ca-certificates/mozilla/AC_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.crt to /usr/share/cagefs-skeleton/usr/share/ca-certificates/mozilla/AC_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.crt
Copying /usr/share/ca-certificates/mozilla/ANF_Secure_Server_Root_CA.crt to /usr/share/cagefs-skeleton/usr/share/ca-certificates/mozilla/ANF_Secure_Server_Root_CA.crt
Copying /usr/share/ca-certificates/mozilla/Actalis_Authentication_Root_CA.crt to /usr/share/cagefs-skeleton/usr/share/ca-certificates/mozilla/Actalis_Authentication_Root_CA.crt
Copying /usr/share/ca-certificates/mozilla/AffirmTrust_Commercial.crt to /usr/share/cagefs-skeleton/usr/share/ca-certificates/mozilla/AffirmTrust_Commercial.crt
Copying /usr/share/ca-certificates/mozilla/AffirmTrust_Networking.crt to /usr/share/cagefs-skeleton/usr/share/ca-certificates/mozilla/AffirmTrust_Networking.crt
Copying /usr/share/ca-certificates/mozilla/AffirmTrust_Premium.crt to /usr/share/cagefs-skeleton/usr/share/ca-certificates/mozilla/AffirmTrust_Premium.crt
[... continúa copiando todos los certificados CA ...]

Verificación Post-Solución

# Test desde usuario enjaulado
su - ilustrex
-bash-5.1$ openssl s_client -connect www.google.com:443 -verify_return_error
CONNECTED(00000003)
depth=2 C = US, O = Google Trust Services LLC, CN = GTS Root R1
verify return:1
depth=1 C = US, O = Google Trust Services, CN = WR2
verify return:1
depth=0 CN = www.google.com
verify return:1
---
...
# Resultado esperado: SSL OK en CageFS

Ventajas de esta Solución

  • Oficial: Usa funcionalidad nativa de CageFS
  • Completa: Incluye todo el ecosistema de certificados CA
  • Mantenible: Se actualiza automáticamente con el sistema
  • Segura: No compromete la integridad del sandbox
  • Universal: Funciona para todas las aplicaciones PHP/OpenSSL

Logs útiles:

  • Laravel: storage/logs/laravel.log
  • PHP-FPM: /var/log/php-fpm/error.log
  • Apache: /var/log/httpd/error_log

Notas Técnicas

  • CageFS Skeleton: Directorio compartido /usr/share/cagefs-skeleton que contiene archivos seguros para todos los usuarios
  • Comando cagefsctl --addrpm: Agrega paquetes RPM completos al esqueleto, no solo archivos individuales
  • Persistencia: La solución se mantiene entre reinicios y actualizaciones del sistema

Documentación Relacionada


Fecha de actualización: Agosto 2025
Versiones probadas: Ubuntu 24.04, CageFS 6.x+
Estado: Solución verificada y recomendada