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:
- Tenha o certbot instalado em ambos os servidores
- Conecte no servidor antigo por SSH
- 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)
- sudo rsync -avz /etc/letsencrypt/archive/ root@ipservidornovo:/etc/letsencrypt/archive/
- sudo rsync -avz –links /etc/letsencrypt/live/ root@ipservidornovo:/etc/letsencrypt/live/
- sudo rsync -avz /etc/letsencrypt/renewal/ root@ipservidornovo:/etc/letsencrypt/renewal/
- No servidor novo, testar se os links lógicos foram preservados:
- sudo certbot update_symlinks
- Testar se migração foi realizada com sucesso:
- sudo letsencrypt renew –dry-run
- 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!