SSL/TLS — що це, протоколи та принцип роботи шифрування

Автор: IT Sectr Опубліковано: 2026-04-02 Час читання: 8 хв

SSL (Secure Sockets Layer) та TLS (Transport Layer Security) — це криптографічні протоколи, що забезпечують захищену передачу даних між клієнтом і сервером через мережу. Вони шифрують весь трафік, запобігаючи перехопленню та модифікації даних зловмисниками. За даними Google Transparency Report (2025), понад 95% всього мобільного трафіку в світі використовує TLS-шифрування. Без цього протоколу будь-яка інформація, надіслана через відкритий Wi-Fi або мобільну мережу, може бути прочитана третіми особами. Cloudflare, 2024

Головне

  • SSL та TLS — криптографічні протоколи для шифрування даних під час передачі через мережу, причому TLS — це сучасна версія SSL.
  • Handshake — процес встановлення захищеного з'єднання, що включає автентифікацію сервера та узгодження ключів шифрування.
  • TLS 1.3 — актуальна версія протоколу, що забезпечує кращу продуктивність та безпеку порівняно з TLS 1.2.
  • Сертифікати X.509 — цифрові посвідчення, які підтверджують справжність сервера при TLS-з'єднанні.
  • HTTPS — HTTP поверх TLS — стандартний спосіб захисту веб-трафіку в мобільних додатках.

Що таке SSL/TLS?

SSL (Secure Sockets Layer) — це протокол, розроблений компанією Netscape в 1995 році для захисту веб-трафіку. Перша версія SSL 1.0 ніколи не публікувалася, SSL 2.0 (1995) та SSL 3.0 (1996) використовувалися до початку 2000-х, але містили критичні вразливості. На зміну SSL прийшов TLS (Transport Layer Security) — покращена версія, стандартизована IETF. TLS 1.0 (1999) був заснований на SSL 3.0, а наступні версії TLS 1.1 (2006), TLS 1.2 (2008) та TLS 1.3 (2018) поступово відходили від оригінальної архітектури, додаючи нові алгоритми шифрування та усуваючи вразливості. Сьогодні SSL вважається застарілим, і всі сучасні системи використовують TLS, хоча за інерцією обидва протоколи часто згадуються разом як SSL/TLS.

Історія створення протоколу

Історія SSL/TLS почалася з потреби в безпечній передачі даних в ранньому вебі. В 1994 році компанія Netscape розробила SSL 1.0 для свого браузера Navigator, але протокол ніколи не був опублікований через серйозні проблеми безпеки. SSL 2.0 вийшов в 1995 році та використовувався на практиці, однак містив численні вразливості: відсутність захисту від Man-in-the-Middle, слабкі алгоритми шифрування та вразливість до truncation-атак. SSL 3.0 (1996) виправив більшість проблем, але до 2014 року в ньому була виявлена вразливість POODLE, після чого IETF офіційно оголосила всі версії SSL застарілими. TLS 1.0–1.3 послідовно покращували криптографічну стійкість, продуктивність та конфіденційність, причому TLS 1.3 скоротив handshake з двох round-trips до одного, що критично важливо для мобільних додатків з нестабільним з'єднанням.

Як працює SSL/TLS Handshake

Handshake — це процес встановлення захищеного з'єднання між клієнтом та сервером. Він складається з декількох послідовних кроків, під час яких сторони узгоджують версію протоколу, вибирають алгоритми шифрування, обмінюються ключами та автентифікують один одного. В TLS 1.3 handshake займає лише одну мережеву взаємодію (1-RTT), в той час як в TLS 1.2 вимагалося дві (2-RTT).

Першим кроком клієнт надсилає ClientHello — повідомлення, що містить список підтримуваних версій TLS, набір шифрів (cipher suites) та випадкове число. Сервер відповідає ServerHello з вибраною версією та шифром, своїм сертифікатом X.509 та цифровим підписом. Клієнт перевіряє сертифікат через ланцюжок центрів сертифікації (CA), генерує сесійний ключ та надсилає його, зашифрований відкритим ключем сервера з сертифіката. Після підтвердження сервером починається захищена передача даних. Весь handshake виконується за 1–3 мілісекунди на сучасних пристроях, що робить його непомітним для користувача.

Сертифікати X.509 та ланцюжок довіри

Основою TLS-автентифікації є інфраструктура відкритих ключів (PKI), побудована на сертифікатах формату X.509. Кожен сертифікат містить: доменне ім'я (Common Name або Subject Alternative Name), публічний ключ сервера, ім'я видавця (Certificate Authority), термін дії та цифровий підпис CA. Клієнт перевіряє сертифікат сервера за ланцюжком довіри: від сертифіката сервера до кореневого CA, сертифікат якого вбудований в операційну систему. На пристроях Android кореневі сертифікати зберігаються в системному сховищі, що оновлюється через Google Play Services; в iOS — через iOS Updates. При порушенні будь-якої ланки ланцюжка (прострочений сертифікат, неспівпадіння домену, невідомий CA) клієнт розриває з'єднання. Для самопідписаних сертифікатів (що використовуються в розробці) вимагається явна довіра — в Android через Network Security Config, в iOS через NSExceptionDomains в Info.plist. Процес валідації ланцюжка сертифікатів включає також перевірку статусу відкликання через CRL (Certificate Revocation List) або OCSP (Online Certificate Status Protocol), хоча на мобільних пристроях OCSP-запити часто пропускаються для прискорення з'єднання — це компроміс між безпекою та продуктивністю, який слід враховувати архітекторам.

SSL vs TLS: ключові відмінності

Хоча терміни SSL та TLS часто використовуються як синоніми, між ними є принципові технічні відмінності, які впливають на безпеку та продуктивність мобільних додатків.

ХарактеристикаSSL 3.0TLS 1.2TLS 1.3
Рік випуску199620082018
СтатусЗастарів (RFC 7568)Активний (рекомендований)Актуальний (найкращий)
Round-trips221
Алгоритм обміну ключамиRSARSA, ECDHEECDHE (тільки)
Автентифіковане шифруванняНіGCM, CCMAEAD обов'язковий
Perfect Forward SecrecyНіОпціональноОбов'язково

Головна відмінність TLS 1.3 від попередників — обов'язкове використання Perfect Forward Secrecy (PFS) через протокол ECDHE. Це означає, що навіть якщо зловмисник отримає доступ до закритого ключа сервера, він не зможе розшифрувати раніше перехоплений трафік. Для мобільних додатків, де злам сервера — реальна загроза, TLS 1.3 з PFS є обов'язковою вимогою безпеки.

Відомі вразливості старих версій

Застарілі версії SSL та TLS мають документально підтверджені вразливості, які роблять їх непридатними для продакшен-використання. POODLE (CVE-2014-3566) атакує SSL 3.0 через padding oracle, дозволяючи розшифрувати cookie сесії за 256 запитів. BEAST (CVE-2011-3389) експлуатує вразливість TLS 1.0 в CBC-режимі через передбачуваний IV. Heartbleed (CVE-2014-0160) — не вразливість протоколу, а баг в реалізації OpenSSL, що дозволяє читати пам'ять сервера: за даними Netcraft, в 2014 році було вразливо понад 500 тисяч серверів. Починаючи з Android 10 (API 29) та iOS 13, всі перераховані протоколи відключені на рівні системи. Тим не менш, розробникам слід перевіряти конфігурацію сервера через SSL Labs Test (qualys.com) перед запуском додатка, щоб переконатися у відсутності застарілих cipher suites та підтримці TLS 1.3.

Як SSL/TLS захищає дані в мобільних додатках

В мобільних додатках TLS захищає дані на трьох рівнях: шифрування вмісту (ніхто, крім сервера, не може прочитати дані), перевірка цілісності (дані не можуть бути змінені в дорозі) та автентифікація сервера (клієнт впевнений, що з'єднується саме з потрібним сервером). Особливо критичною є автентифікація: без неї зловмисник може підмінити сервер через DNS-спуфінг або підроблену точку доступу Wi-Fi.

Згідно з дослідженням Google Play Protect (2024), 76% Android-додатків використовують TLS коректно з перевіркою сертифікатів. Решта 24% допускають помилки: відключають перевірку сертифікатів для тестування (і забувають увімкнути в production), використовують самопідписані сертифікати без валідації або дозволяють застарілі протоколи SSL 3.0 та TLS 1.0. Apple App Transport Security (ATS) в iOS вимагає TLS 1.2 мінімум з 2017 року, а починаючи з iOS 15 — використовує TLS 1.3 за замовчуванням для всіх мережевих запитів. Для додаткового захисту рекомендується також впроваджувати Certificate Pinning — прив'язку до конкретного сертифіката сервера.

Реалізація SSL/TLS в мобільних додатках

Розглянемо приклад налаштування безпечного HTTPS-з'єднання в Android з використанням OkHttp — однієї з найпопулярніших бібліотек для роботи з мережею. Правильна конфігурація включає примусове використання TLS 1.3 та перевірку сертифікатів.

kotlin
val client = OkHttpClient.Builder()
    .connectionSpecs(
        listOf(
            ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
                .tlsVersions(TlsVersion.TLS_1_3, TlsVersion.TLS_1_2)
                .cipherSuites(
                    CipherSuite.TLS_AES_128_GCM_SHA256,
                    CipherSuite.TLS_AES_256_GCM_SHA384,
                    CipherSuite.TLS_CHACHA20_POLY1305_SHA256
                )
                .build()
        )
    )
    .hostnameVerifier { hostname, session ->
        SSLSession.DefaultHostnameVerifier.verify(hostname, session)
    }
    .build()

В цьому прикладі ми обмежуємо набір підтримуваних версій TLS лише протоколами 1.3 та 1.2, виключаючи застарілі TLS 1.0/1.1. Cipher suites вибираються з сучасних алгоритмів з AEAD-режимом та обов'язковою Perfect Forward Secrecy. HostnameVerifier перевіряє відповідність імені хоста сертифікату. Для iOS аналогічне налаштування виконується через конфігурацію URLSession з параметром tlsMinimumSupportedProtocolVersion, де вказується .TLSv13. Додатково на iOS можна задати tlsMaximumSupportedProtocolVersion для обмеження верхньої межі версій — це корисно для сумісності з застарілими серверами, які ще не перейшли на TLS 1.3. Така конфігурація гарантує максимальний рівень безпеки при передачі даних в мобільному додатку.

Часто задавані питання

Чим відрізняється SSL від TLS на практиці?

TLS — це більш нова та безпечна версія протоколу. SSL застарів і не повинен використовуватися (RFC 7568). На практиці обидва терміни позначають HTTPS-шифрування, але технічно всі сучасні системи працюють через TLS 1.2 або 1.3.

Як перевірити, чи використовує мобільний додаток TLS?

Встановіть проксі-інструмент Burp Suite або Charles Proxy та перехопіть трафік додатка. Якщо з'єднання використовує HTTPS та сертифікат валідний — додаток використовує TLS. Якщо трафік йде по HTTP — шифрування відсутнє.

Який рівень TLS безпечний для продакшену?

Для продакшен-збірок дозволені тільки TLS 1.2 та TLS 1.3. Протоколи SSL 3.0, TLS 1.0 та TLS 1.1 повинні бути відключені на сервері та в клієнтському додатку. З 2020 року основні платформи (Android, iOS, браузери) вимагають TLS 1.2 як мінімум.

Чи потрібен Certificate Pinning разом з TLS?

Так, рекомендується. TLS перевіряє сертифікат через ланцюжок центрів сертифікації, але якщо якийсь CA-центр буде скомпрометований (що вже відбувалося з DigiNotar в 2011), зловмисник зможе випустити підроблений сертифікат. Pinning додає додатковий шар перевірки.

Як TLS 1.3 покращує продуктивність мобільного додатка?

TLS 1.3 скорочує час встановлення з'єднання з 2 round-trips до 1, що дає виграш 30–50% при першому підключенні. Для мобільних додатків з нестабільним з'єднанням (метро, потяги) це критично важливо для швидкості завантаження даних.

Підсумки

  • SSL/TLS — основа захисту даних при передачі через мережу, що шифрує весь трафік між клієнтом та сервером.
  • SSL повністю застарів — всі сучасні системи повинні використовувати TLS 1.2 або TLS 1.3.
  • TLS 1.3 забезпечує handshake за 1 round-trip, обов'язкову Perfect Forward Secrecy та підтримку сучасних AEAD-шифрів.
  • HTTPS — стандартний спосіб застосування TLS в мобільних додатках, обов'язковий для продакшен-збірок.
  • Apple ATS з iOS 15 використовує TLS 1.3 за замовчуванням, відключаючи всі застарілі версії протоколу.
  • OkHttp на Android вимагає явної конфігурації ConnectionSpec для обмеження версій TLS та cipher suites.
  • Рекомендація: увімкніть в додатку тільки TLS 1.2/1.3 з ECDHE-обміном ключів та перевіряйте сертифікати через Certificate Pinning.

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також