Algunos paquetes de alojamiento compartido con cPanel no ofrecen AutoSSL , o solo en planes de mayor precio. Como resultado, no se puede emitir 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 UAPI de cPanel; se renovará automáticamente, sin necesidad de AutoSSL.
HTTPS es obligatorio desde hace tiempo. Por eso, 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> <user>@example.com
2. Instalar acme.sh
curl https://get.acme.sh | sh -s email=me@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 que caduque. El emisor es «Let's Encrypt» y la fecha de caducidad es 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 se ha implementado correctamente, y así es. 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), 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. Lo insidioso es que acme.sh también informa "Éxito" aquí, por lo que el error se pasa por alto fácilmente. Solución: Trabaje directamente con el dominio Punycode y desactive el comparador automático.:
python3 -c "import sys;print(sys.argv[1].encode('idna').decode())" hallöle.de
acme.sh --issue -d xn--hallle-zxa.de -d www.xn--hallle-zxa.de -w ~/public_html
export DEPLOY_CPANEL_AUTO_ENABLED='false'
acme.sh --deploy -d xn--hallle-zxa.de --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.