HTTPS і TLS 1.3: як працюють захищені з'єднання
Замочок у вашому браузері означає Transport Layer Security (TLS) — протокол, який автентифікує сервер, потайки узгоджує сеансовий ключ, а потім шифрує кожен байт даних в обох напрямках. TLS 1.3 (2018) робить усе це за один цикл обміну (round-trip) і нині використовується на понад 90% сайтів із HTTPS.
1. Що забезпечує TLS
TLS забезпечує три властивості безпеки для TCP-з'єднання:
- Конфіденційність: дані зашифровані — той, хто прослуховує мережу (Wi-Fi у кав'ярні, інтернет-провайдер), бачить лише випадкові байти.
- Цілісність: кожен запис містить тег автентифікації — будь-яке втручання виявляється.
- Автентифікація: сертифікат сервера доводить, що він є тим, за кого себе видає (наприклад, bank.com, а не сервер зловмисника). Автентифікація клієнта є необов'язковою.
HTTPS — це просто HTTP, що працює поверх TLS. Літера «s» у https:// означає, що TCP-з'єднання обгортається в TLS ще до того, як буде надіслано будь-які HTTP-дані.
2. Сертифікати X.509
TLS-сертифікат — це документ із цифровим підписом, що містить: доменне ім'я сервера, його відкритий ключ, термін дії та цифровий підпис центру сертифікації (CA), який засвідчує цю інформацію.
Ваш браузер/ОС постачаються зі 100+ довіреними кореневими CA (DigiCert, Let's Encrypt, Comodo тощо). Коли сервер пред'являє свій сертифікат, браузер проходить ланцюжок сертифікатів: сертифікат сервера → сертифікат проміжного CA → сертифікат кореневого CA у вашому сховищі довіри. Якщо ланцюжок підписів дійсний і домен збігається, автентифікація успішна.
3. Рукостискання TLS 1.3
TLS 1.3 завершує автентифікацію та обмін ключами за один цикл обміну (1-RTT). Відновлення сеансу може бути 0-RTT. Послідовність:
Загальна додаткова затримка: 1 цикл обміну перед даними застосунку. TLS 1.2 потребував 2 цикли обміну — TLS 1.3 помітно швидший для завантаження сторінок.
4. Обмін ключами ECDHE
ECDHE (Elliptic Curve Diffie-Hellman Ephemeral) дозволяє двом сторонам вивести спільний секрет, не передаючи його. На прикладі еліптичної кривої X25519 (найпоширенішої в TLS 1.3):
- Клієнт генерує випадковий закритий ключ a, обчислює A = a × G (множення точки)
- Сервер генерує випадковий закритий ключ b, обчислює B = b × G
- Вони відкрито обмінюються A і B
- Клієнт обчислює a × B = a × b × G; сервер обчислює b × A = b × a × G
- Обидва приходять до однієї спільної точки — спільного секрету
Той, хто прослуховує, бачить A і B, але не може обчислити a × b × G без розв'язання задачі дискретного логарифма на еліптичній кривій. Слово «Ephemeral» (ефемерний) означає, що для кожного сеансу TLS генеруються нові пари ключів, що забезпечує пряму секретність.
5. Рівень записів і AEAD
Після рукостискання всі дані застосунку шифруються за допомогою AEAD (Authenticated Encryption with Associated Data — автентифіковане шифрування зі зв'язаними даними). TLS 1.3 передбачає лише два набори шифрів:
- AES-128-GCM — AES у режимі Galois/Counter Mode, 128-бітний ключ, апаратно прискорений на сучасних процесорах
- ChaCha20-Poly1305 — переважний на платформах без апаратного прискорення AES (малопотужні мобільні пристрої)
AEAD забезпечує і шифрування, і MAC (тег автентифікації). Структура запису: [заголовок][зашифроване корисне навантаження + 16-байтовий тег автентифікації]. Якщо змінено хоча б один байт шифротексту, перевірка тегу не проходить, і з'єднання розривається. Окремий HMAC не потрібен.
6. Пряма секретність
TLS 1.3 передбачає досконалу пряму секретність (PFS): навіть якщо закритий ключ сервера буде викрадено пізніше, записаний минулий трафік не вдасться розшифрувати, оскільки ефемерні ECDHE-ключі відкидаються після кожного сеансу.
TLS 1.2 дозволяв неефемерний обмін ключами RSA, який не мав прямої секретності — супротивник державного рівня міг записати весь зашифрований трафік і розшифрувати його пізніше, отримавши закритий ключ сервера. Цю вразливість використовували в програмах масового стеження.
7. HSTS і поширені помилки
HTTP Strict Transport Security (HSTS): заголовок відповіді, що наказує браузеру завжди використовувати HTTPS для цього домену протягом N секунд — запобігає атакам пониження версії. Великі сайти входять до списку попереднього завантаження HSTS (HSTS Preload List), що постачається з браузерами.
Поширені проблеми неправильного налаштування:
- Змішаний вміст: HTTPS-сторінка завантажує HTTP-ресурси — ці HTTP-ресурси можуть бути перехоплені та замінені зловмисником.
- Прострочені сертифікати: браузер показує лякливе попередження, користувачі або йдуть геть, або проклацують його (привчаючись ігнорувати попередження — це небезпечно).
- Слабкі набори шифрів: сервери TLS 1.2, що досі підтримують RC4, 3DES чи експортні шифри, вразливі. TLS 1.3 прибирає всі слабкі варіанти.
- Неправильне застосування закріплення сертифікатів: жорстке вшивання відбитків сертифікатів унеможливлює ротацію ключів і спричиняє збої в роботі сервісу.