При миграции на новый сервер SSL-сертификат нужно либо перенести (если вы его купили), либо выпустить заново (если использовали Let's Encrypt). В большинстве случаев проще и быстрее выпустить новый бесплатный Let's Encrypt — это занимает 2–5 минут.
Когда переносить, а когда перевыпускать
| Ситуация | Рекомендация |
|---|---|
| Let's Encrypt (бесплатный) | Выпустить заново на новом сервере |
| Платный SSL (Sectigo, Comodo, DigiCert) | Перенести или переоформить бесплатно |
| EV SSL (зелёная строка) | Переоформить — требует верификацию компании |
| Wildcard SSL | Перенести (файл .crt + .key) или переоформить |
Вариант 1: Let's Encrypt на новом сервере (рекомендуется)
# Установить Certbot
apt install certbot python3-certbot-nginx -y
# Выпустить сертификат для домена
# (DNS должен уже указывать на новый сервер!)
certbot --nginx -d example.com -d www.example.com
# Или в standalone-режиме (до настройки Nginx)
certbot certonly --standalone -d example.com -d www.example.com
# Автообновление — certbot устанавливает таймер автоматически
systemctl status certbot.timer
Вариант 2: Перенос платного SSL-сертификата
Экспорт из cPanel
># cPanel → SSL/TLS → Manage SSL Sites
# Скопировать три файла:
# - Certificate (CRT)
# - Private Key (KEY)
# - CA Bundle (Chain)
Установка на Nginx
># Сохранить файлы на новом сервере
# /etc/ssl/example.com.crt ← Certificate + CA Bundle (объединить!)
# /etc/ssl/example.com.key ← Private Key
cat example.com.crt ca-bundle.crt > /etc/ssl/example.com-fullchain.crt
# Конфиг Nginx
server {
listen 443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/ssl/example.com-fullchain.crt;
ssl_certificate_key /etc/ssl/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;
}
nginx -t && systemctl reload nginx
Установка на Apache
># /etc/apache2/sites-available/example.com-ssl.conf
<VirtualHost *:443>
ServerName example.com
SSLEngine on
SSLCertificateFile /etc/ssl/example.com.crt
SSLCertificateKeyFile /etc/ssl/example.com.key
SSLCertificateChainFile /etc/ssl/ca-bundle.crt
</VirtualHost>
a2enmod ssl
a2ensite example.com-ssl
systemctl reload apache2
Проверка SSL после переноса
># Проверить срок и цепочку доверия
openssl s_client -connect example.com:443 -servername example.com < /dev/null
# Проверить онлайн
# https://www.ssllabs.com/ssltest/analyze.html?d=example.com
>curl -vI --resolve example.com:443:NEW-SERVER-IP https://example.com/ 2>&1 | grep -E "SSL|certificate"
.key файл по email или незашифрованным каналам. Храните его только на сервере с правами 600 (chmod 600 example.com.key).
Частые ошибки при переносе SSL
| Сообщение | Что означает |
|---|---|
| SSL_ERROR_BAD_CERT_DOMAIN в браузере | Сертификат выпущен на другое имя (например, без www), а домен запрашивается с ним |
| unable to get local issuer certificate в openssl | В файл не подключена промежуточная CA Bundle — установлен только сам сертификат без цепочки |
| NET::ERR_CERT_DATE_INVALID сразу после установки | На новом сервере неверно системное время, TLS-рукопожатие проверяет срок действия по локальным часам |
| Certbot: Timeout during connect | DNS ещё не переключён на новый сервер, HTTP-01 challenge не может пройти проверку |
Let's Encrypt vs платный SSL при миграции
| Критерий | Let's Encrypt | Платный SSL |
|---|---|---|
| Срок действия | 90 дней, автопродление | Обычно 1 год, продление вручную |
| Действие при миграции | Бесплатный перевыпуск за минуты | Нужно переносить файлы или переоформлять |
| Поддержка Wildcard | Да, через DNS-01 | Зависит от типа сертификата |
| Проверка организации (OV/EV) | Недоступна | Доступна у отдельных удостоверяющих центров |
Когда простой перевыпуск не подходит
- Сертификат EV или OV с подтверждённой организацией — придётся заново проходить верификацию компании, это не мгновенно
- Клиент требует сертификат конкретного удостоверяющего центра по внутренней политике безопасности
- DNS ещё не переключён на новый сервер, а простой недопустим — сначала используйте тестовую проверку через SNI, описанную выше, и лишь потом меняйте DNS
- В мобильном приложении используется закреплённый (pinned) сертификат — смена сертификата без обновления приложения сломает соединение
Если перенос SSL — лишь часть более крупной миграции всего проекта на новый сервер, начните с общего плана в статье как перейти на ZevsHost, а после переноса используйте чек-лист проверки после миграции, чтобы не упустить смежные настройки, кроме самого сертификата.
Что делать с HSTS при смене сертификата
Если на старом сервере был включён заголовок Strict-Transport-Security (HSTS), браузеры части посетителей будут помнить это правило неделями или месяцами и откажутся открывать сайт по HTTP даже на новом сервере, пока не установится валидный HTTPS. Это значит, что окно между переключением DNS и полной готовностью SSL на новом сервере должно быть нулевым: сертификат обязан быть выпущен и проверен заранее через тест по SNI, описанный выше, ещё до того, как вы поменяете A-запись домена.