iTank ideas

Cómo migrar tu sitio web http en https

Partimos de un servidor Ubuntu Server 19.10 con Apache 2 y Wordpres 5.5.1

1. Obtener un certificado SSL

Utilizaré un certificado SSL gratuíto emitido por la entidad certificadora LetsEncript y generado por línea de comandos mediante certbot.eff.org

instalar CertBot

$ sudo snap install certbot --classic

certbot 1.9.0 from Certbot Project (certbot-eff✓) installed

Generar el certificado para mi dominio hosteado en el directorio /webroot/www.jmarior.net indicando mi propio almacén de certificados en /home/user/webcertificates

$ certbot certonly --webroot -w /webroot/www.jmarior.net -d www.jmarior.net -d jmarior.net --config-dir /home/user/webcertificates --work-dir /home/user/webcertificates --logs-dir /home/user/webcertificates -m usuario@dominio.net

Puedes usar el parámetro --dry-run para hacer pruebas

Si todo fue bien, se habrá generado una estructura de directorios en tu almacén de certificados.

home/user/webcertificates/live/www.jmarior.net

Y encontrarás los siguientes archivos:

cert.pem: El nuevo certificado
chain.pem: Certificado de la autoridad certificadora.
fullchain.pem: cert.pem + chain.pem
privkey.pem: La clave privada utilizada para firmar el certificado.

listos para usar desde el servidor web.

Para comprobar los certificados existentes en nuestro almacén de certificados:

$ certbot certificates --config-dir /home/user/webcertificates --work-dir /home/user/webcertificates --logs-dir /home/user/webcertificates

Saving debug log to /home/user/webcertificates/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Found the following certs:
Certificate Name: www.jmarior.net
Serial Number: 4493e50XXXXXXXX2a6ad0059af6
Domains: www.jmarior.net
Expiry Date: 2021-01-12 13:42:51+00:00 (VALID: 89 days)
Certificate Path: /home/user/webcertificates/live/www.jmarior.net/fullchain.pem
Private Key Path: /home/user/webcertificates/live/www.jmarior.net/privkey.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

2. Configurar tu host Apache para aceptar peticiones por el puerto SSL

Por un lado habilitamos el módulo SSL en el servidor web Apache y lo reiniciamos:

<VirtualHost *:443>
ServerName www.jmarior.net
SSLEngine on
SSLCertificateFile /home/user/webcertificates/live/www.jmarior.net/cert.pem
SSLCertificateKeyFile /home/user/webcertificates/live/www.jmarior.net/privkey.pem
SSLCertificateChainFile /home/user/webcertificates/live/www.jmarior.net/chain.pem
(...)
</VirtualHost>

entonces ya deberíamos poder acceder a la nueva URL

https://www.jmarior.net

El resultado final es que se activará el candado indicador de https en el navegador:

3. Redireccionar peticiones http al puerto https

La forma de que todas las peticiones a la vieja url http sean redireccionadas por Apache a la nueva https es la siguiente

<VirtualHost *:80>
ServerName www.jmarior.net
ServerAlias jmarior.net
Redirect permanent / https://www.jmarior.net/
</VirtualHost>

Para cargar esta nueva configuración:

# systemctl reload apache2

4. Migrar el sitio wordpress de http a https

Puesto que deseamos migrar completamente a https lo mejor es reemplazar todas las referencias a http://www.jmarior.net por https://www.jmarior.net y para hacerlo me ayudé del plugin Better Search Replace.

Como mi instalación de WordPress está en modo Multiusuario tuve que modificar la URL del sitio principal cambiando temporalmente los parámetros SITE_ID_CURRENT_SITE y BLOG_ID_CURRENT_SITE en wp-config.php para volver editable el campo Dirección del sitio (URL)

5. Renovar el certificado digital

Inicialmente los certificados tiene una vigencia de 90 días y será necesario renovarlos. El siguiente comando revisa el almacén de certificados y renueva los que están a punto de caducar en 30 días:

$ certbot renew --config-dir /home/user/webcertificates --work-dir /home/user/webcertificates --logs-dir /home/user/webcertificates

Para pruebas añadir --dry-run

y para renovar mediante cron debemos ejecutarlo por lo menos una vez a la semana (por ejemplo cada domingo a las 5 y 5 de la madrugada) en modo silencioso para que no genere output:

5 5 * * 0 certbot renew --config-dir /home/user/webcertificates --work-dir /home/user/webcertificates --logs-dir /home/user/webcertificates -q