Смена хостинг-провайдера или перенос сайта на новый сервер — это в основном файлы, базы данных и DNS, а о сертификате обычно вспоминают в последний момент. Потом происходит переключение DNS, и посетители видят предупреждение о сертификате, или всё выглядит нормально, пока через несколько недель продление тихо не завершается ошибкой, потому что новый сервер так и не настроили на продление. Если знать, как перенести SSL-сертификат на новый сервер и нужно ли вообще его переносить, HTTPS будет работать на всём протяжении переезда.

Два способа перенести SSL-сертификат на новый сервер

Есть два варианта, и для большинства сайтов первый проще.

  • Выпустить новый сертификат на новом сервере. С центром сертификации по протоколу ACME, например Let's Encrypt, новый сервер сам запрашивает свой сертификат и настраивает собственное продление. Ничего не копируется, а сертификат старого сервера просто истекает.
  • Перенести SSL-сертификат, который у вас уже есть. Это путь для платного сертификата с оставшимся сроком или для случая, когда новый сервер должен отдавать HTTPS раньше, чем сможет подтвердить домен. Нужны три составляющие: сам сертификат, промежуточная цепочка и закрытый ключ, который к ним относится.

Сертификат привязан к доменным именам, а не к серверу или хостинг-провайдеру, поэтому SSL-сертификат после смены хостинга остаётся действительным, если с ним переехал закрытый ключ. Без ключа сертификат бесполезен, и именно здесь ошибаются при большинстве переносов: ключ остался на сервере, который уже отключили. Большинство коммерческих центров сертификации позволяют перевыпустить сертификат с новым ключом в течение срока действия, поэтому если старый ключ утрачен, проверьте условия вашего центра сертификации.

Работа с закрытым ключом

Копируйте ключ по SSH или SFTP, но никогда не по электронной почте и не в чате, и оставьте доступ к нему только root и веб-серверу. На серверах Windows сертификат и ключ обычно передаются вместе в защищённом паролем файле PFX, который можно экспортировать, только если при установке сертификата ключ был помечен как экспортируемый.

Проблема переключения: проверка до смены DNS

Проверка HTTP-01 в ACME подтверждает контроль над доменом, получая файл по порту 80 с того сервера, на который домен указывает в данный момент. До переключения DNS это ещё старый сервер, поэтому новый не может получить сертификат таким способом. Есть три чистых решения:

  • Проверка DNS-01. Клиент подтверждает контроль, создавая TXT-запись, и это работает независимо от места размещения сайта. Автоматическое продление при этом требует доступа к API вашего DNS-провайдера, и это единственный способ получить подстановочный (wildcard) сертификат от Let's Encrypt.
  • Перенаправление пути проверки. Проверка HTTP-01 в Let's Encrypt следует за перенаправлениями, поэтому старый сервер может на время переезда пересылать запросы к /.well-known/acme-challenge/ на новый. Условия перечислены в документации по типам проверок.
  • Мост на существующем сертификате. Скопируйте текущие сертификат и ключ на новый сервер на первые дни, а когда DNS переключится, перейдите на автоматический выпуск.

Чек-лист перед переключением DNS

  • Перечислите все имена хостов. «Голый» домен, www, поддомены shop или app, почтовый хост, адрес панели управления и любые конечные точки API. Каждое имя, на которое отвечает новый сервер, должно быть в сертификате.
  • Снизьте TTL DNS за день-два, чтобы переключение распространилось быстро и его можно было так же быстро отменить.
  • Проверьте запись CAA. Запись CAA в DNS ограничивает, какие центры сертификации вправе выпускать сертификаты для домена (RFC 8659). Если новый хостинг выпускает сертификаты через другой центр, чем старый, выпуск не пройдёт, пока запись этого не разрешит.
  • Проверьте через запись в файле hosts. Направьте свой компьютер на новый сервер и откройте сайт по HTTPS раньше всех остальных.
  • Отдавайте полную цепочку сертификатов, а не только сертификат сайта. Браузеры часто справляются без промежуточного сертификата; платёжные шлюзы, клиенты API и старые устройства — часто нет.
  • Учитывайте HSTS. Если старый сайт отправлял заголовок HSTS, браузеры, которые его посещали, откажутся от обычного HTTP и не позволят посетителям пройти мимо ошибок сертификата. Новый сервер должен отдавать корректный HTTPS с первой минуты.
  • Оставьте одно перенаправление от любого варианта http или www до итогового адреса HTTPS.

Почта, панели и старый сервер

Внимание достаётся сайтам, но почтовым серверам тоже нужны действительные сертификаты для SMTP и IMAP, а перенесённый почтовый хост с самоподписанным или несоответствующим сертификатом вызывает предупреждения в каждом почтовом приложении. То же относится к странице входа в панель хостинга и к веб-хукам, которые платёжные или службы доставки отправляют на ваш сайт: они обращаются по адресу HTTPS и отказываются работать, если сертификат не проходит проверку.

Когда переезд завершён, удалите закрытые ключи со старого сервера и остановите его задания продления, которые иначе будут продолжать попытки и завершаться ошибкой. Если старый хостинг был взломан или вы больше не контролируете его, отзовите старый сертификат и выпустите новый с новым ключом. Остальную часть переезда, от файлов до баз данных и почтовых ящиков, охватывает наша услуга миграции хостинга и баз данных.

Убедитесь, что продление работает на новом сервере

Последний шаг предотвращает следующий сбой. Запустите тестовое продление, например certbot renew --dry-run в Certbot, убедитесь, что есть таймер по расписанию или задание cron, и проверьте, что неудачное продление вызывает оповещение. Срок действия публичных сертификатов теперь ограничен 200 днями, и предел продолжает сокращаться, как объясняет наше руководство по SSL-сертификатам, поэтому продление происходит несколько раз в год и не должно зависеть от того, что кто-то о нём помнит. Если вы привлекаете услугу установки SSL или услугу настройки SSL для переезда, попросите включить этот тест в передачу работ. В нашей работе по установке SSL-сертификатов продление настраивается и проверяется, с оповещением на случай сбоя.

Часто задаваемые вопросы: перенос SSL-сертификата на новый сервер

Может ли один и тот же SSL-сертификат работать на двух серверах одновременно?

Да. При миграции обычно старый и новый серверы используют один сертификат и ключ, а с автоматическими сертификатами у каждого сервера может быть и свой. Не запрашивайте одинаковые сертификаты в цикле при тестировании: Let's Encrypt разрешает пять сертификатов для точно такого же набора имён раз в семь дней, а для экспериментов существует его тестовая среда (staging).

Нужно ли покупать новый сертификат при смене хостинг-компании?

Нет, если вы можете перенести закрытый ключ или ваш центр сертификации позволяет перевыпуск. Многие хостинги также выпускают автоматические сертификаты для размещаемых сайтов, и тогда платный сертификат по окончании срока, возможно, продлевать не придётся.

Почему после переезда ошибка сертификата появляется только на некоторых устройствах?

Обычно новый сервер отдаёт сертификат сайта без промежуточной цепочки, или в сертификате нет одного из имён хостов, которыми люди действительно пользуются, например www. Внешняя проверка TLS показывает обе проблемы за минуту.

Переносите сайт, почтовый сервер или целую учётную запись хостинга? Наша услуга установки и настройки SSL-сертификатов проверяет текущую конфигурацию, устанавливает и настраивает сертификаты на Apache, Nginx, HAProxy, панелях хостинга и почтовых серверах, наводит порядок в перенаправлениях и смешанном содержимом и проверяет результат — для клиентов в Лонг-Бич и Лос-Анджелесе и удалённо в любой точке. Пришлите нам имя вашего домена и дату планируемого переезда.