Как сделать SSL сертификат для сервера, который пока-что не использует домен?
===============================================================================

 Привет!  

  

**Ситуация:**  

Есть продакшен-сервер с работающим сайтом. И есть новый сервер на котором создана новая версия сайта и он будет исользоваться для продакшена.  

На новом сервере нет домена, потому что он будет использовать тот же домен который используется на продакшен-сервере.  

Оба сервера используют nginx и Ubuntu.  

  

**Задача:**  

Нужно подключить на новом сервере SSL сертификат с помощью **Certbot (Let's Encrypt)** чтобы он автоматически обновлялся каждые 3 месяца.  

  

**Проблема:**  

Для подключения сертификата через Certbot нужно, чтобы домен сайта вёл на IP сервера на который в данный момент настраивается сертификат. Но в данный момент домент переадресвывает на старый сервер. А менять IP в А-записях (в DNS) доменов не вариант, потому что потом нужно будет ждать пол-дня–день, чтобы DNS обновились и только после этого настраивать сертификат. Получается, что сайт (для некоторых пользователей) может быть недоступным или работать без https в течение суток.  

  

**Вопрос:**  

Как решить эту проблему и «бесшовно» перенаправить домен на новый сервер с активированным сертификатом?  

*Может быть для этого использовать какой-то временный домен?  

А может быть можно просто перенести файлы сертификата с одного сервера ну другой? Но тогда какие именно файлы (внутри `/etc/letsencrypt` их много в разных папках)? И в результате такого копирования будет ли работать автообновление каждые 3 месяца?*  

  

Заранее спасибо за помощь! 

 скопируйте сертификат (файлы которые в соответствующих директивах конфига nginx прописаны) с рабочего сервера **перед** переносом и пропишите в директивы nginx на новом сервере  

  

уже **после** переноса и смены А-записей поставьте нормально certbot с автообновлением сертификата  

  

не городите велосипед и грабли  

  

Это будет самый быстрый способ для разового переноса одного сервера.  

  

UPD: чтобы не было конфликтов, размещайте файлы с рабочего сервера с ключем и сертификатом на новый не в /etc/letsencrypt, а, например, в /etc/nginx/ssl, а то потом certbot офигеет, че ему подсунули 

 > Может быть для этого использовать какой-то временный домен?  

Можно. Добавь new.example.com и сделай 302 с example.com.  

  

> А может быть можно просто перенести файлы сертификата с одного сервера ну другой?  

Можно и достаточно легко, но доменное имя должно совпадать.  

  

> Но тогда какие именно файлы (внутри /etc/letsencrypt их много в разных папках)  

Посмотри в apache какие именно файлы у него настроены в директиве SSL.  

egrep -Ri "SSLCertificateKeyFile|SSLCertificateFile" /etc/apache2/  

  

> И в результате такого копирования будет ли работать автообновление каждые 3 месяца?  

Будет, если обновить DNS на новый сервер, установить certbot.  

  

Можно использовать CNAME, т.к. он быстро обновляется.  

<https://vps.ua/wiki/cname-record/>  

  

Вообще варианты есть  

1. Перенести сертификат, обновить DNS, настроить проксирование на новый сайт. В результате, часть клиентов будут ходить по новом DNS, часть через прокси пока не обновиться DNS.  

2. Создать отдельное DNS имя (можно просто префикс к текущему имени добавить), настроить 302 на него. После обновления DNS сделать все в обратном порядке.   

3. Скопировать сертификат, использовать тот же домен, но вместо A записи использовать CNAME. 

 копируешь сертификаты с продакшена ставишь их и местный certbot их пропустит поскольку они валидные и не будет их перевыпускать.  

А вот когда сайт переедет он их перевыпустит.  

СОбственно все будет бесшовно. 

 Я бы использовал Cloudflare. Подключите ваш домен к нему, при необходимости IP-адрес сервера меняется в один клик, мгновенно - без необходимости ждать сутки. SSL сертификат они ставят свой и следят за актуальностью, вам ничего делать не нужно, certbot не понадобится. У них есть бесплатный базовый тариф, используйте его.