Algunos paquetes de hosting compartido con cPanel no ofrecen AutoSSL o sólo los ofrecen a tarifas más altas. El resultado: no se puede emitir un certificado Let's Encrypt gratuito a través de la interfaz de cPanel y todos los dominios quedan atrapados en un certificado autofirmado. El navegador muestra la página como "no segura". La salida: obtenga el certificado usted mismo con acme.sh e instálelo a través de cPanel UAPI, renovándose automáticamente, sin 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 enlace escribe el certificado en el vHost apropiado a través de UAPI. La configuración de implementación se guarda; de ahora en adelante, el cron se renueva e instala todo de forma independiente antes de que caduque. El emisor es "Let's Encrypt" y la fecha de vencimiento es de aproximadamente 90 días en el futuro. Si en su lugar aparece el antiguo certificado autofirmado, normalmente resulta útil realizar una recarga completa en el navegador: el certificado anterior se puede almacenar temporalmente.
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 todavía informa "implementado con éxito", y eso es correcto. En este caso, el enlace falla debido a un paso posterior (por ejemplo, una notificación interna o un trabajo de sincronización del host), no debido a la instalación real.
Para dominios con diéresis, acme.sh almacena el certificado internamente en formato Punycode (xn--…), mientras que el comparador automático del gancho compara el formulario Unicode. Resultado: "implementado en 0 de 0 sitios": no hay nada instalado. Lo complicado es que acme.sh también informa aquí "Éxito", por lo que el error se pasa por alto fácilmente. Solución: trabaje directamente con el dominio Punycode y desactive el modo 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.