Під час міграції на новий сервер 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 електронною поштою або незашифрованими каналами. Зберігайте його тільки на сервері з правами 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 проти платного 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-запис домену.