Migrar certificados de Let's Encrypt a otro servidor

Author
By Darío Rivera
Posted on 2021-05-09 in OpenSSL

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

Acerca de Darío Rivera

Author

Ingeniero de desarrollo en PlacetoPay , Medellín. Darío ha trabajado por más de 6 años en lenguajes de programación web especialmente en PHP. Creador del microframework DronePHP basado en Zend y Laravel.

Sólo aquellos que han alcanzado el éxito saben que siempre estuvo a un paso del momento en que pensaron renunciar.