Перенос сертификата Let’s Encrypt на другой сервер

Перенос сертификата Let’s Encrypt на другой сервер

Недавно я решил перенести свой блог на Django на новый сервер. Переносил я все вручную и была только одна сложность, как перенести SSL-сертификаты Let’s Encrypt на новую машину. Можно было бы перенести все, а потом сгенерировать новый сертификат, но в таком случае сайт был бы какое-то время не доступен по https, это меня не устроило. Поэтому ниже поделюсь простой инструкцией по переносу сертификатов Let’s Encrypt на новый vps.

Предполагается что у вас уже есть какой-то опыт в настройке NGINX, в этой заметке я не показываю все этапы переноса сайта на Django на новый сервер и его настройку, я только покажу как перенес сертификаты.

Подготовьте новый сервер

Для начала перенесите все на новый сервер, установите certbot, сделайте те же настройки для nginx чтобы веб-сервер мог мгновенно найти используемые SSL-сертификаты.

В общем, вы должны подготовить новый сервер в соответствии со старым, в противном случае может случиться так, что перенос сертификатов не сработает.

Найдите необходимые файлы

Чтобы найти ваши сертификаты, загляните конфигурацию NGINX вашего сайта, например в файле /etc/nginx/sites-available/mysite в нижней части файла вы найдете записи для сертификата.

Расположение файлов сертификатов Let's Encrypt на сервере

Создаем архив и копируем на другой сервер

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 на ошибки

Перезапускаем 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

Ошибка перевыпуска сертификата Let's Encrypt

Как видим произошла ошибка, тест нужно провести еще через какое-то время, тогда ошибка должна пропасть:

Перевыпуск сертификата Let's Encrypt прошел без ошибок
Хостинг для ваших проектов