Community
52
HostiServer
2026-02-08 13:06:00

SSL/TLS сертифікати: налаштування HTTPS, Let's Encrypt, TLS 1.3

⏱️ Час читання: ~8 хвилин | 📅 Оновлено: 8 лютого 2026

Чому HTTPS — це не опція, а необхідність

Сайт без HTTPS у 2026 році — це як магазин без замка на дверях. Браузери позначають такі сайти як небезпечні, Google знижує їх у пошуковій видачі, а користувачі просто йдуть до конкурентів.

SSL/TLS сертифікат — це не тільки про шифрування. Це про довіру. Зелений замочок у адресному рядку каже відвідувачу: "тут безпечно вводити пароль і номер картки". Без нього конверсія падає, особливо на eCommerce сайтах — люди бояться вводити платіжні дані.

Chrome, Firefox та інші браузери показують попередження "Not Secure" для HTTP-сайтів. Деякі корпоративні мережі взагалі блокують доступ до незахищених ресурсів. А з 2018 року Google офіційно використовує HTTPS як фактор ранжування.

Хороша новина: налаштувати SSL/TLS сьогодні простіше ніж будь-коли. Let's Encrypt видає безкоштовні сертифікати, Certbot автоматизує процес, а сучасні веб-сервери мають вбудовану підтримку TLS 1.3.

У цьому гайді розберемо: як працює TLS 1.3, як отримати безкоштовний сертифікат через Let's Encrypt, як правильно налаштувати Nginx та Apache, і що таке HSTS та OCSP Stapling — речі, які відрізняють базову конфігурацію від професійної.

SSL vs TLS: у чому різниця

SSL (Secure Sockets Layer) — старий протокол, який вже не використовується. Останню версію SSL 3.0 визнали небезпечною ще в 2015 році через вразливість POODLE. TLS (Transport Layer Security) — його сучасний наступник, який активно розвивається.

Термін "SSL" прижився і використовується як загальна назва. Коли кажуть "SSL-сертифікат", насправді мають на увазі сертифікат для TLS-з'єднання. Це нормально — головне розуміти що реально використовується TLS.

Історія версій:

  • SSL 2.0, 3.0 — застарілі, небезпечні, не використовувати
  • TLS 1.0, 1.1 — застарілі з 2020 року, браузери їх не підтримують
  • TLS 1.2 — прийнятний для сумісності зі старими клієнтами
  • TLS 1.3 — рекомендований стандарт з 2018 року, швидший та безпечніший

Як відбувається з'єднання (Handshake)

Коли користувач заходить на HTTPS-сайт, відбувається "рукостискання":

  1. Client Hello — браузер надсилає список підтримуваних шифрів та версій TLS
  2. Server Hello — сервер відповідає сертифікатом, обраним шифром та своїм публічним ключем
  3. Верифікація — браузер перевіряє сертифікат через центр сертифікації (CA)
  4. Key Exchange — обидві сторони генерують спільний сесійний ключ
  5. Шифроване з'єднання — весь подальший трафік шифрується сесійним ключем

TLS 1.3 скоротив цей процес з двох "раундів" до одного (1-RTT handshake), що зменшує затримку на 50-100мс при кожному новому з'єднанні. Для повторних з'єднань можливий навіть 0-RTT режим.

Чому TLS 1.3 важливий

TLS 1.3 — це не просто "нова версія". Це суттєве покращення безпеки та швидкості:

Безпека:

  • Видалено застарілі шифри (RC4, DES, MD5)
  • Всі з'єднання використовують Perfect Forward Secrecy
  • Менше можливостей для атак типу downgrade

Швидкість:

  • Handshake за 1 RTT замість 2 (швидше встановлення з'єднання)
  • 0-RTT resumption для повторних з'єднань
  • Менше даних передається при рукостисканні

ℹ️ Підтримка: Станом на 2026 рік TLS 1.3 підтримують всі сучасні браузери (Chrome, Firefox, Safari, Edge) та більшість мобільних пристроїв. Немає причин не використовувати його.

Який сертифікат обрати

Сертифікати відрізняються не рівнем шифрування (воно однакове), а рівнем перевірки власника:

Тип Перевірка Для кого Ціна
DV (Domain Validated) Тільки домен Блоги, портфоліо, невеликі сайти Безкоштовно (Let's Encrypt)
OV (Organization Validated) Домен + організація Бізнес-сайти, інтернет-магазини $50-200/рік
EV (Extended Validation) Повна перевірка компанії Банки, платіжні системи $200-500/рік

DV (Domain Validation)

Найпростіший тип. Центр сертифікації перевіряє тільки те, що ви контролюєте домен — через email, DNS-запис або HTTP-файл. Видається за кілька хвилин автоматично. Let's Encrypt видає саме такі сертифікати.

OV (Organization Validation)

Додатково перевіряється існування організації: реєстраційні документи, адреса, телефон. Процес займає 1-3 дні. В сертифікаті вказується назва компанії — це видно якщо клікнути на замочок у браузері.

EV (Extended Validation)

Найсуворіша перевірка: юридичний статус компанії, фізична адреса, право підпису від уповноваженої особи. Раніше браузери показували зелену адресну строку з назвою компанії, але з 2019 року цю візуальну відмінність прибрали.

Wildcard сертифікати

Якщо у вас багато піддоменів (shop.example.com, blog.example.com, api.example.com, staging.example.com), замість окремих сертифікатів можна отримати один Wildcard сертифікат на *.example.com. Let's Encrypt видає їх безкоштовно, але потрібна DNS-верифікація.

Важливо: Wildcard покриває тільки один рівень піддоменів. *.example.com працює для shop.example.com, але не для dev.shop.example.com.

Що обрати?

Для 90% проєктів достатньо безкоштовного DV-сертифіката від Let's Encrypt. Він дає таке саме шифрування, як і платні варіанти. Різниця тільки у рівні перевірки організації — якщо ви не банк і не обробляєте особливо чутливі дані, це не критично.

OV має сенс для компаній, яким важливо показати офіційну назву в сертифікаті. EV — для фінансових організацій та платіжних систем, де максимальна довіра критична.

Отримання сертифіката через Certbot

Let's Encrypt — безкоштовний центр сертифікації, створений у 2015 році для популяризації HTTPS. Станом на 2026 рік вони видали понад мільярд сертифікатів і обслуговують більше 300 мільйонів сайтів.

Certbot — офіційний клієнт для роботи з Let's Encrypt. Він автоматизує отримання, встановлення та оновлення сертифікатів.

Встановлення Certbot

# Ubuntu/Debian
sudo apt update
sudo apt install certbot
# Для Nginx
sudo apt install python3-certbot-nginx
# Для Apache
sudo apt install python3-certbot-apache
# CentOS/RHEL
sudo dnf install certbot python3-certbot-nginx

Отримання сертифіката для Nginx

# Автоматичне налаштування (рекомендовано)
# Certbot сам змінить конфігурацію Nginx
sudo certbot --nginx -d example.com -d www.example.com
# Тільки отримати сертифікат (без зміни конфігурації)
# Корисно якщо хочете налаштувати вручну
sudo certbot certonly --nginx -d example.com
# Для сервера без веб-сервера (standalone режим)
# Certbot тимчасово запустить власний сервер на порту 80
sudo certbot certonly --standalone -d example.com

Отримання сертифіката для Apache

sudo certbot --apache -d example.com -d www.example.com

Wildcard сертифікат

Для Wildcard потрібна DNS-верифікація (HTTP-верифікація не підтримується):

sudo certbot certonly --manual --preferred-challenges dns \
  -d example.com -d "*.example.com"

Certbot покаже TXT-запис який треба додати в DNS вашого домену. Після додавання натисніть Enter для продовження. Сертифікат буде збережено у /etc/letsencrypt/live/example.com/.

Де зберігаються сертифікати

/etc/letsencrypt/live/example.com/
├── cert.pem       # Сертифікат домену
├── chain.pem      # Проміжні сертифікати
├── fullchain.pem  # cert.pem + chain.pem (використовуйте цей!)
└── privkey.pem    # Приватний ключ

⚠️ Важливо: Сертифікати Let's Encrypt дійсні 90 днів. Це зроблено навмисно для безпеки — коротший термін зменшує ризики при компрометації ключа. Обов'язково налаштуйте автоматичне оновлення (див. розділ нижче).

Налаштування Nginx з TLS 1.3

Базова конфігурація після Certbot працює, але її можна покращити для максимальної безпеки та швидкості:

server {
    listen 80;
    server_name example.com www.example.com;
    
    # Редірект HTTP → HTTPS
    return 301 https://$server_name$request_uri;
}
server {
    listen 443 ssl http2;
    server_name example.com www.example.com;
    
    # Сертифікати Let's Encrypt
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    
    # Сучасні протоколи
    ssl_protocols TLSv1.2 TLSv1.3;
    
    # Безпечні шифри (TLS 1.3 використовує свої автоматично)
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    
    # OCSP Stapling (прискорює перевірку сертифіката)
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    
    # SSL сесії (зменшує навантаження при повторних з'єднаннях)
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;
    
    # HSTS (примусовий HTTPS)
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;
    
    # Решта конфігурації...
    root /var/www/example.com;
    index index.html index.php;
}

Після зміни конфігурації перевірте та перезавантажте Nginx:

sudo nginx -t
sudo systemctl reload nginx

Налаштування Apache з TLS 1.3

# /etc/apache2/sites-available/example.com.conf
# Редірект HTTP → HTTPS
<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    Redirect permanent / https://example.com/
</VirtualHost>
<VirtualHost *:443>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com
    
    # SSL налаштування
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    
    # Сучасні протоколи
    SSLProtocol -all +TLSv1.2 +TLSv1.3
    
    # Безпечні шифри
    SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
    SSLHonorCipherOrder off
    
    # OCSP Stapling
    SSLUseStapling on
    SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
    
    # HSTS
    Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
</VirtualHost>

Увімкніть необхідні модулі та перезапустіть Apache:

sudo a2enmod ssl headers
sudo a2ensite example.com.conf
sudo apache2ctl configtest
sudo systemctl reload apache2

HSTS: примусовий HTTPS

HSTS (HTTP Strict Transport Security) — HTTP-заголовок, який каже браузеру: "завжди використовуй HTTPS для цього сайту". Навіть якщо користувач введе http://example.com або клікне на старе HTTP-посилання, браузер автоматично перейде на HTTPS без запиту до сервера.

Чому це важливо:

  • Захист від SSL stripping атак — зловмисник не може перехопити перший HTTP-запит і підмінити його
  • Швидше з'єднання — немає редіректу через сервер, браузер одразу йде на HTTPS
  • Користувач фізично не може зайти по HTTP — навіть якщо дуже захоче
  • Додатковий захист — в комбінації з DDoS-захистом створює надійний периметр безпеки

Налаштування:

# Nginx
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;
# Apache
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"

Параметри:

  • max-age=63072000 — 2 роки в секундах. Браузер запам'ятає це налаштування на 2 роки
  • includeSubDomains — застосовувати HSTS до всіх піддоменів
  • preload — дозволяє додати домен у вбудований список браузерів (див. hstspreload.org)

HSTS Preload

Є одна проблема: при першому візиті браузер ще не знає про HSTS і робить звичайний HTTP-запит. Щоб закрити цю дірку, можна додати домен у HSTS Preload List — вбудований список браузерів Chrome, Firefox, Safari.

Вимоги для preload:

  • Валідний HTTPS на основному домені
  • Редірект з HTTP на HTTPS
  • HSTS заголовок з max-age мінімум 1 рік, includeSubDomains та preload
  • Всі піддомени теж повинні працювати через HTTPS

⚠️ Обережно: Увімкнувши HSTS, переконайтесь що HTTPS працює коректно на всіх піддоменах. Якщо сертифікат закінчиться або щось зламається — користувачі не зможуть зайти на сайт взагалі, навіть по HTTP. Видалення з preload list займає місяці.

Автоматичне оновлення сертифікатів

Сертифікати Let's Encrypt дійсні 90 днів. Certbot автоматично створює таймер systemd або cron job для оновлення, але краще перевірити:

# Перевірка таймера systemd
sudo systemctl status certbot.timer
# Або перевірка cron
cat /etc/cron.d/certbot

Ручна перевірка оновлення

# Тестовий запуск (без реального оновлення)
sudo certbot renew --dry-run
# Примусове оновлення всіх сертифікатів
sudo certbot renew

Якщо автооновлення не налаштовано

Додайте в crontab:

# Відкрити crontab
sudo crontab -e
# Додати рядок (оновлення двічі на день)
0 0,12 * * * certbot renew --quiet --post-hook "systemctl reload nginx"

--post-hook перезавантажує Nginx після успішного оновлення сертифіката.

Перевірка конфігурації

Після налаштування обов'язково перевірте що все працює правильно. Помилки в SSL-конфігурації можуть призвести до недоступності сайту або зниження безпеки.

Онлайн-інструменти

SSL Labs Server Test — найпопулярніший і найдетальніший сервіс. Аналізує:

  • Версії протоколів (TLS 1.2, 1.3)
  • Підтримувані шифри та їх безпеку
  • Ланцюжок сертифікатів
  • Відомі вразливості (Heartbleed, POODLE, BEAST)
  • Налаштування HSTS, OCSP Stapling

Ціль — отримати оцінку A або A+. Конфігурації з цієї статті дають A+.

Інші корисні сервіси:

  • Hardenize — комплексна перевірка безпеки (SSL, DNS, email)
  • Security Headers — перевірка HTTP-заголовків безпеки
  • HSTS Preload — перевірка готовності до HSTS preload

Перевірка з терміналу

# Базова перевірка сертифіката і ланцюжка
openssl s_client -connect example.com:443 -servername example.com
# Перевірити дату закінчення сертифіката
echo | openssl s_client -connect example.com:443 2>/dev/null | \
  openssl x509 -noout -dates
# Перевірити підтримку TLS 1.3
openssl s_client -connect example.com:443 -tls1_3
# Перевірити підтримку TLS 1.2
openssl s_client -connect example.com:443 -tls1_2
# Детальна інформація про сертифікат
echo | openssl s_client -connect example.com:443 2>/dev/null | \
  openssl x509 -noout -text

Перевірка HSTS

curl -I https://example.com 2>/dev/null | grep -i strict

Має повернути: Strict-Transport-Security: max-age=63072000; includeSubDomains

Перевірка редіректу HTTP → HTTPS

curl -I http://example.com

Має повернути 301 Moved Permanently з Location: https://example.com/

Типові помилки

❌ Mixed Content — частина ресурсів завантажується по HTTP

Браузер блокує HTTP-ресурси на HTTPS-сторінці. Перевірте всі посилання на картинки, скрипти, стилі. Використовуйте відносні URL (/images/logo.png) або протокол-незалежні (//cdn.example.com/script.js). В DevTools браузера вкладка Console покаже всі проблемні ресурси.

❌ Сертифікат не покриває www або піддомен

При отриманні сертифіката вкажіть всі потрібні домени: -d example.com -d www.example.com. Або використовуйте Wildcard сертифікат для всіх піддоменів.

❌ Неповний ланцюжок сертифікатів (chain)

Сервер повинен віддавати не тільки свій сертифікат, а й проміжні. Let's Encrypt видає fullchain.pem — використовуйте саме його, не cert.pem.

❌ Редірект-цикл HTTP ↔ HTTPS

Часто трапляється коли і веб-сервер, і CDN/проксі роблять редірект. Переконайтесь що редірект налаштований тільки в одному місці. Якщо використовуєте Cloudflare — налаштуйте SSL режим "Full (strict)".

❌ Забули оновити сертифікат

Сайт перестає працювати, браузери показують страшне попередження. Налаштуйте автооновлення через Certbot і моніторинг дати закінчення. Сервіси типу UptimeRobot можуть сповіщати про закінчення сертифіката заздалегідь.

🚀 Готові обрати правильний хостинг?

Гнучкість Cloud (VPS) або потужність виділених серверів — рішення що масштабуються з вашим зростанням.

💻 Cloud (VPS) Хостинг

  • Від $19.95/міс — Починайте малим, масштабуйте миттєво
  • KVM віртуалізація — Гарантовані ресурси без overselling
  • Миттєві апгрейди — Без простою
  • NVMe сховище — Швидка продуктивність
  • 24/7 підтримка — <10 хв відповідь

🖥️ Виділені Сервери

  • Від $200/міс — Сучасні конфігурації
  • Кастомні конфігурації — Intel або AMD, найсвіжіші моделі
  • Кілька локацій — EU + USA
  • 99.9% uptime — Надійність
  • DDoS захист — Включено
  • Безкоштовна міграція — Ми допоможемо
  • Private Cloud підтримка — Proxmox, VMware, OpenStack

💬 Не впевнені який варіант вам необхідний?
💬 Напишіть нам і ми зі всім допоможемо!

Часті запитання

Чи впливає SSL на швидкість сайту?

TLS 1.3 додає мінімальну затримку (кілька мілісекунд) при першому з'єднанні. Але HTTP/2 та HTTP/3, які працюють тільки через HTTPS, значно прискорюють завантаження сторінок. В результаті HTTPS-сайти зазвичай швидші.

Чим відрізняється платний сертифікат від безкоштовного?

Шифрування однакове. Різниця у рівні перевірки: DV перевіряє тільки володіння доменом, OV/EV — ще й організацію. Для більшості сайтів безкоштовного Let's Encrypt достатньо.

Як перенести сертифікат на інший сервер?

Скопіюйте файли з /etc/letsencrypt/live/domain/ та /etc/letsencrypt/archive/domain/ на новий сервер. Або просто отримайте новий сертифікат через Certbot — це швидше.

Що робити якщо SSL Labs показує оцінку B або нижче?

Найчастіші причини: увімкнений TLS 1.0/1.1, слабкі шифри, відсутній HSTS. Використайте конфігурацію з цієї статті — вона дає оцінку A/A+.

Чи потрібен SSL для сайту без форм і платежів?

Так. Google враховує HTTPS як фактор ранжування. Браузери позначають HTTP-сайти як небезпечні. Let's Encrypt безкоштовний — немає причин не використовувати.

Contents

Поділіться цією статтею

VPS з підтримкою від

$19 95 / міс

Виділені сервери від

$80 / міс

CDN починаючи від

$0 / міс

 

Користуючись цим сайтом, ви погоджуєтеся на використання файлів cookies відповідно до нашої Політики Конфіденційності.