Tutorial como migrar certificados SSL letsencrypt de um servidor antigo para o novo

Objetivo

Caso esteja migrando um servidor, sendo necessário também migrar os certificados SSL do letsencrypt (certbot), é possível seguir este tutorial para executar as tarefas necessárias.
Desta forma temos 2 servidores em questão:

  • Servidor ANTIGO
  • Servidor NOVO

Resumo de como migrar certificado SSL entre servidores

Resumindo os passos necessários:

  1. Tenha o certbot instalado em ambos os servidores
  2. Conecte no servidor antigo por SSH
  3. Utilize o RSYNC para sincronizar as pastas do servidor antigo com o novo (faça backup de tudo antes para evitar que arquivos sejam sobreescritos)
    1. sudo rsync -avz /etc/letsencrypt/archive/       root@ipservidornovo:/etc/letsencrypt/archive/
    2. sudo rsync -avz –links /etc/letsencrypt/live/ root@ipservidornovo:/etc/letsencrypt/live/
    3. sudo rsync -avz /etc/letsencrypt/renewal/      root@ipservidornovo:/etc/letsencrypt/renewal/
  4. No servidor novo, testar se os links lógicos foram preservados:
    1. sudo certbot update_symlinks
  5. Testar se migração foi realizada com sucesso:
    1. sudo letsencrypt renew –dry-run
  6. Migração concluída

Passo a passo para migrar certificados SSL de um servidor antigo para um novo

Passo 1 – Preparar o servidor novo para receber os certificados (instalar certbot)

Abra um terminal ou utilize um software (putty) para conectar no Servidor NOVO para instalar o certbot:

ssh usuario@ipservidornovo

Agora siga os passos descritos nesta URL pra instalar o certbot:

https://certbot.eff.org/

Caso já tenha o certbot instalado no novo servidor, interessante realizar um backup dos certificados para evitar que sejam sobreescritos pelo rsync no próximo passo.

Passo 2 – Enviar os arquivos dos certificados para o novo servidor

Passo 2 – Opção 1 – Migrar os arquivos com RSYNC

Abra uma nova janela do terminal ou utilize um software (putty) e conecte no Servidor ANTIGO por ssh:

ssh usuario@ipservidorantigo

Caso tenha possibilidade de conexão no Servidor NOVO por ssh à partir do Servidor ANTIGO, é possível utilizar RSYNC (Atenção! Estas pastas são propriedades do usuário root, então para ter permissão de sincronizar, é necessário se conectar com usuário root, ou migrar para umas pasta temporária no novo servidor e depois mover os arquivos):

sudo rsync -avz         /etc/letsencrypt/archive/  usuario@ipservidornovo:/etc/letsencrypt/archive/
sudo rsync -avz --links /etc/letsencrypt/live/     usuario@ipservidornovo:/etc/letsencrypt/live/
sudo rsync -avz         /etc/letsencrypt/renewal/  usuario@ipservidornovo:/etc/letsencrypt/renewal/

Vá para o terminal do Servidor NOVO que abriu, ou para a aba de conexão do Putty relacionada ao Servidor NOVO.
Agora execute o comando para verificar que os links simbólicos da pasta /etc/letsencrypt/live/ foram migrados corretamente:

sudo certbot update_symlinks

Se tudo ocorreu corretamente, pode executar o certbot e testar reinstalar o certificado:
Caso utilize nginx:

sudo certbot --nginx

Caso utilize apache:

sudo certbot --apache

Tudo Pronto! Certificados Migrados com Sucesso!


Passo 2 – Opção 2 – Migrar os arquivos com SCP

Caso não tenha possibilidade de conexão por SSH de um servidor para o outro com permissão root e não quer utilizar uma pasta temporária, é possível compactar os arquivos e enviar para o outro servidor:
Vá para sua pasta home:

cd ~

Agora execute o comando para criar um arquivo compactado dos certificados:

sudo tar -chvzf letsencrypt-files.tar.gz /etc/letsencrypt/archive/ /etc/letsencrypt/renewal/

Agora é preciso enviar o arquivo para o Servidor NOVO.
Caso possa conectar no servidor novo por SSH à partir do Servidor ANTIGO com um usuário sem permissão root, é possível utilizar o comando scp:

scp letsencrypt-files.tar.gz usuario@ipservidornovo:

No comando acima, o arquivo vai ser transferido para a pasta home do seu usuário, como exemplo: /home/usuario/

Se preferir, é possível realizar o download do arquivo criado para seu computador pessoal. Abra um terminal em seu computador e utilize o comando:
Caso utilize windows:

scp usuario@ipservidorantigo:/home/usuario/letsencrypt-files.tar.gz "%userprofile%/Downloads"

Se estiver utilizando Mac ou Linux:

scp usuario@ipservidorantigo:/home/usuario/letsencrypt-files.tar.gz ~/Downloads

Com o arquivo letsencrypt-files.tar.gz já disponível no Servidor NOVO, é necessário descompactar o mesmo e mover os certificados para a pasta /etc/letsecrypt. No comando abaixo vamos levar em consideração que o arquivo compactado está presente na pasta home do usuário.

sudo tar -xvf ~/letsencrypt-files.tar.gz

Agora copie os arquivos dos certificados que gostaria de instalar no novo servidor:

sudo cp ~/etc/letsencrypt/archive/ /etc/letsencrypt/archive/ -R
sudo cp ~/etc/letsencrypt/renewal/ /etc/letsencrypt/renewal/ -R

Necessário agora recriar os links lógicos para a pasta “live” de cada domínio:

sudo ln -s /etc/letsencrypt/archive/domonio1.com.br/cert1.pem      /etc/letsencrypt/live/domonio1.com.br/cert.pem
sudo ln -s /etc/letsencrypt/archive/domonio1.com.br/chain1.pem     /etc/letsencrypt/live/domonio1.com.br/chain.pem
sudo ln -s /etc/letsencrypt/archive/domonio1.com.br/fullchain1.pem /etc/letsencrypt/live/domonio1.com.br/fullchain.pem
sudo ln -s /etc/letsencrypt/archive/domonio1.com.br/privkey1.pem   /etc/letsencrypt/live/domonio1.com.br/privkey.pem

Atenção! Lembrando que a pasta /archive/dominio1.com.br/ pode conter várias versões dos certificados, cert.pem, cert1.pem, cert2.pem; chain.pem, chain1.pem, chain2.pem, etc. Escolher a mesma versão utilizada no Servidor ANTIGO.

Agora verifique se os links lógicos foram criados corretamente, senão, revise os passos anteriores:

sudo certbot update_symlinks

Lembrando que é comum receber erro nos links lógicos (symlinks), como o erro abaixo:

Renewal configuration file /etc/letsencrypt/renewal/dominio1.com.br.conf is broken.
The error was: expected /etc/letsencrypt/live/dominio1.com.br/cert.pem to be a symlink
Skipping.

Caso receba a mensagem de erro acima, é necessário repetir o passo anterior (sudo ln -s …)  e verificar se criou os links lógicos corretamente.

Se tudo ocorreu corretamente, pode executar o certbot e testar reinstalar o certificado:
Caso utilize nginx:

sudo certbot --nginx

Caso utilize apache:

sudo certbot --apache

Caso não receba nenhuma mensagem de erro, os certificados foram migrados com sucesso.

Conclusão

O processo de migração dos certificados do certbot (letsencrypt) é bastante simples. Basta saber quais os arquivos necessários e ter certeza que a estrutura de links lógicos (symlinks) foi preservada na migração.
Caso tenha alguma dúvida ou sugestão, basta informar nos comentários!