Let's Encrypt DomainFactory

Algunos paquetes de alojamiento compartido con cPanel no ofrecen AutoSSL , o solo en los planes de mayor precio. Por lo tanto, no se puede obtener un certificado gratuito de Let's Encrypt a través de la interfaz de cPanel, y todos los dominios se quedan con un certificado autofirmado . El navegador muestra la página como "no segura". La solución: obtener el certificado manualmente con acme.sh e instalarlo mediante la API de usuario de cPanel. Se renovará automáticamente, sin necesidad de AutoSSL.


HTTPS es ahora obligatorio, por lo que resulta aún más frustrante cuando tu paquete de hosting no ofrece una forma sencilla de obtener un certificado gratuito. Esto ocurre con más frecuencia de lo que piensas; por ejemplo, con paquetes básicos económicos o tras un cambio de plan en el que el certificado deja de estar incluido. Sin embargo, este problema se puede solucionar de forma elegante y permanente con tan solo unas líneas de código en la consola. El proceso completo se describe a continuación.

1. Iniciar sesión mediante SSH

ssh -p <port> <cpanel-user>@<host>

2. Instalar acme.sh

curl https://get.acme.sh | sh -s email=du@example.com
source ~/.bashrc

3. Establezca Let's Encrypt como la CA (Autoridad de Certificación).

acme.sh --set-default-ca --server letsencrypt

4. Emitir certificado

acme.sh --issue -d example.com -d www.example.com -w ~/public_html

5. Instalar en cPanel

acme.sh --deploy -d example.com --deploy-hook cpanel_uapi

6. Comprobar

uapi SSL installed_hosts
echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null \
     | openssl x509 -noout -issuer -dates

El script escribe el certificado en el host virtual correspondiente mediante UAPI. La configuración de implementación se guarda; a partir de ahora, cron renovará e instalará automáticamente todo antes de su vencimiento. El emisor debe ser "Let's Encrypt" y la fecha de vencimiento debe ser aproximadamente dentro de 90 días. Si el certificado antiguo autofirmado sigue apareciendo, recargar la página del navegador suele solucionar el problema, ya que el certificado anterior podría estar almacenado temporalmente en caché.

Algunos proveedores de alojamiento web utilizan su propio hook de cPanel. install_ssl y responde con algo como adminbin Cpanel/hooks2/...: exit 255. acme.sh sigue indicando que la instalación se ha completado correctamente, lo cual suele ser cierto. En este caso, el fallo se debe a un paso posterior, como una notificación interna o una tarea de sincronización del proveedor de alojamiento, y no a la instalación en sí.

Para dominios con diéresis, acme.sh almacena el certificado internamente en formato Punycode (xn--…), mientras que el comparador automático del hook compara la forma Unicode. Resultado: "desplegado en 0 de 0 sitios" – no se instala nada. La parte complicada: acme.sh también informa "Éxito" aquí, por lo que el error se pasa por alto fácilmente. Solución: trabajar directamente con el dominio Punycode y deshabilitar el comparador automático.:

# Punycode-Form der Domain vorher ermitteln (z. B. via idn-Tool oder Online-Konverter)
acme.sh --issue -d xn--<punycode> -d www.xn--<punycode> -w ~/public_html
export DEPLOY_CPANEL_AUTO_ENABLED='false'
acme.sh --deploy -d xn--<punycode> --deploy-hook cpanel_uapi

Con acceso SSH, no necesita AutoSSL: acme.sh emite el certificado, que cpanel_uapiEl hook se encarga de la instalación, y la tarea programada incluida la mantiene actualizada automáticamente. Una vez configurado, el servicio HTTPS gratuito funciona de forma continua y autónoma. Quienes invierten el esfuerzo inicial se ahorran todas las renovaciones manuales futuras y pueden extender la misma solución a cualquier dominio adicional en la misma cuenta con un solo comando.

Atrás