Migrar certificados de Let's Encrypt a otro servidor
Una de las tareas de migrar a un nuevo servidor es pasar toda la configuración de certificados de tus sitios web. Particularmente, cuando tenemos certificados con Let's Encrypt esto resulta no ser la excepción. Sin embargo, el día de hoy veremos cómo migrar tus certificados de un server a otro.
Instalar Certbot
Lo primero que debes hacer, porsupuesto, es instalar Certbot. Para esto puedes seguir cualquiera de nuestros artículos
- Instalar Certbot en Debian 10 (Buster)
- Instalar Certbot en Ubuntu 20.04 (Focal Fossa)
Migrar data de certificados
Después de esto, si aún no has configura el primer sitio con Certbot debes crear los siguientes directorios.
cd /etc/letsencrypt/
sudo mkdir keys live archive renewal
Por supuesto, deberás traerte la configuración de tu otro servidor. Si por ejemplo tienes el sitio example.com deberás traerte los directorios
/etc/letsencrypt/keys/
/etc/letsencrypt/live/example.com/
/etc/letsencrypt/archive/example.com/
También deberás traerte la configuración de la renovación automática del certificado.
/etc/letsencrypt/renewal/example.com.conf
Para cada dominio, deberás crear nuevamente los symlinks!. Si ya migraste tu directorio live te darás cuenta que denería contener los archivos de certificados y llaves privadas de tus dominis. Sin embargo, si verificas tu antiguo servidor en realidad lo que deberías tener son enlaces simbólicos. Al observar que hay en el directorio live del nuevo servidor te encontrarás con lo siguiente por cada dominio.:
admin@server:/etc/letsencrypt/live/example.com$ ls -l
total 20
-rw-r--r-- 1 root root 692 May 24 2020 README
-rw-r--r-- 1 root root 1842 Mar 21 20:50 cert.pem
-rw-r--r-- 1 root root 1586 Mar 21 20:50 chain.pem
-rw-r--r-- 1 root root 3428 Mar 21 20:50 fullchain.pem
-rw------- 1 root root 1704 Mar 21 20:50 privkey.pem
Para verificar el archivo que debemos linkear debemos buscar el último archivo generado de cada tipo en la carpeta archive y compararlo con lo que reside en live. En mi caso, el archivo de certificado es el número 6 dado que se ha renovado seis veces.
cat /etc/letsencrypt/live/example.com/cert.pem
cat /etc/letsencrypt/archive/example.com/cert6.pem
Si estos dos archivos son iguales por cada tipo (cert, chain, fullchain, privkey) entonces podrás borrar el archivo en live y crear el enlace simbólico para cada uno.
sudo rm /etc/letsencrypt/live/example.com/cert.pem
sudo ln -s /etc/letsencrypt/archive/example.com/cert6.pem /etc/letsencrypt/live/example.com/cert6.pem
Después de esto tu carpeta live por cada dominio debe lucir más o menos así:
admin@ip-172-31-55-94:/etc/letsencrypt/live/example.com$ ls -l
total 4
-rw-r--r-- 1 root root 692 May 24 2020 README
lrwxrwxrwx 1 root root 50 May 9 05:37 cert.pem -> /etc/letsencrypt/archive/example.com/cert6.pem
lrwxrwxrwx 1 root root 51 May 9 05:39 chain.pem -> /etc/letsencrypt/archive/example.com/chain6.pem
lrwxrwxrwx 1 root root 55 May 9 05:39 fullchain.pem -> /etc/letsencrypt/archive/example.com/fullchain6.pem
lrwxrwxrwx 1 root root 53 May 9 05:39 privkey.pem -> /etc/letsencrypt/archive/example.com/privkey6.pem
Autenticarse en Certbot
Para poder correr las renovaciones y generar nuevos certificados deberás registrarte en certbot con el mismo correo que lo has realizado anteriormente.
sudo certbot register
Habilitar los sitios en tu nuevo servidor
Para esto, deberás migrar la configuración SSL de tu antiguo servidor. En mi caso, dado que utilizo apache, los archivos a copiar serían muy similares a los siguiente:
/etc/apache2/sites-available/example.com.conf
/etc/apache2/sites-available/example.com-le-ssl.conf
Una vez hecho esto hay que habilitar cada sitio en particular. Debes asegurarte también que tienes el módulo de SSL activado.
sudo a2enmod ssl
sudo a2ensite exmaple.com
sudo a2ensite exmaple.com-le-ssl
Sobra decir que en este punto ya deberías tener la data de tu sitio migrada puesto que los archivos de configuración apuntan a tu aplicación. Para verificar que todo está correcto puedes ejecutar el siguiente comando de apache.
sudo apachectl configtest
Syntax OK
Con esto ya podemos reiniciar nuestro servidor.
sudo systemctl restart apache2
Y finalmente podemos verificar el estado de los sitios de apache.
admin@server:/etc/apache2$ sudo apachectl -S
VirtualHost configuration:
*:443 example.com (/etc/apache2/sites-enabled/example.com-le-ssl.conf:2)
*:80 is a NameVirtualHost
port 80 namevhost example.com (/etc/apache2/sites-enabled/example.com.conf:1)
alias www.example.com
ServerRoot: "/etc/apache2"
...
Lo cual indica que apache está escuchando en los puertos 80 y 443 en el sitio que hemos configurado. Tampoco olvides agregar el dominio a tu archivos hosts.
# sites
127.0.0.1 example.com
Modificar los DNS para apuntar a tu nuevo dominio
En este punto ya es seguro apuntar los DNS a tu nuevo servidor desde tu proveedor de DNS. Una vez hecho esto, deberías poder entrar a tu dominio y verificar que tu aplicación está en el nuevo servidor. También es importante que cuando hagas esto verifiques que certbot permite la renovación de certificados. Para esto puedes utilizar el siguiente comando:
sudo certbot renew --dry-run