Перенос сертификата Let’s Encrypt на другой сервер
Недавно я решил перенести свой блог на Django на новый сервер. Переносил я все вручную и была только одна сложность, как перенести SSL-сертификаты Let’s Encrypt на новую машину. Можно было бы перенести все, а потом сгенерировать новый сертификат, но в таком случае сайт был бы какое-то время не доступен по https, это меня не устроило. Поэтому ниже поделюсь простой инструкцией по переносу сертификатов Let’s Encrypt на новый vps.
Предполагается что у вас уже есть какой-то опыт в настройке NGINX, в этой заметке я не показываю все этапы переноса сайта на Django на новый сервер и его настройку, я только покажу как перенес сертификаты.
Подготовьте новый сервер
Для начала перенесите все на новый сервер, установите certbot, сделайте те же настройки для nginx чтобы веб-сервер мог мгновенно найти используемые SSL-сертификаты.
В общем, вы должны подготовить новый сервер в соответствии со старым, в противном случае может случиться так, что перенос сертификатов не сработает.
Найдите необходимые файлы
Чтобы найти ваши сертификаты, загляните конфигурацию NGINX вашего сайта, например в файле /etc/nginx/sites-available/mysite в нижней части файла вы найдете записи для сертификата.
Создаем архив и копируем на другой сервер
sudo tar -czvf backup.tar.gz archive/ live/ renewal/ options-ssl-nginx.con ssl-dhparams.pem
scp backup.tar.gz alex@ip_нового_сервера:~
sudo tar -xzvf backup.tar.gz
sudo mv archive/ live/ renewal/ options-ssl-nginx.conf ssl-dhparams.pem /etc/letsencrypt/
После всех переносов еще раз проверяем конфигурацию:
sudo nginx -t
Ошибок быть не должно:
Перезапускаем NGINX
sudo systemctl restart nginx
Продление сертфиката
Чтобы протестировать процесс продления, сначала выполните следующую команду, чтобы создать учетную запись и принять условия:
sudo certbot
Отвечайте на вопросы как вы хотите сделать тот или иной шаг, только обратите внимание на шаг:
You have an existing certificate that has exactly the same domains or certificate name you requested and isn't close to expiry.
(ref: /etc/letsencrypt/renewal/tretyakov.net.conf)
What would you like to do?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Attempt to reinstall this existing certificate
2: Renew & replace the cert (limit ~5 per 7 days)
Здесь нужно выбрать 1.
В завершении
Вы можете столкнуться с проблемой, из-за которой после переноса автоматическое продление не будет работать. Это происходит потому, что вы создали новый идентификатор учетной записи выше на Шаге 4.
Чтобы устранить проблему, просто обновите идентификатор учетной записи в файле /etc/letsencrypt/renewal/your-domain.conf. Вы можете получить идентификатор новой учетной записи из папки, расположенной в каталоге /etc/letsencrypt/accounts/acme-v02.api.letsencrypt.org/directory/ выполнив команду
sudo ls /etc/letsencrypt/accounts/acme-v02.api.letsencrypt.org/directory/
Скопируйте индефикатор, далее откройте файл your-domain.conf
sudo nano /etc/letsencrypt/renewal/your-domain.conf
И замените значение account = НОВЫЙ_ИНДЕФИКАТОР
После всего этого подождите пока NS записи домена изменятся и будут указывать на новый сервет и попробуйте протестировать получение сертификата:
sudo certbot renew --dry-run
Как видим произошла ошибка, тест нужно провести еще через какое-то время, тогда ошибка должна пропасть: