SSL (Secure Sockets Layer) та TLS (Transport Layer Security) — це криптографічні протоколи, що забезпечують захищену передачу даних між клієнтом і сервером через мережу. Вони шифрують весь трафік, запобігаючи перехопленню та модифікації даних зловмисниками. За даними Google Transparency Report (2025), понад 95% всього мобільного трафіку в світі використовує TLS-шифрування. Без цього протоколу будь-яка інформація, надіслана через відкритий Wi-Fi або мобільну мережу, може бути прочитана третіми особами. Cloudflare, 2024
Головне
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 до одного, що критично важливо для мобільних додатків з нестабільним з'єднанням.
Handshake — це процес встановлення захищеного з'єднання між клієнтом та сервером. Він складається з декількох послідовних кроків, під час яких сторони узгоджують версію протоколу, вибирають алгоритми шифрування, обмінюються ключами та автентифікують один одного. В TLS 1.3 handshake займає лише одну мережеву взаємодію (1-RTT), в той час як в TLS 1.2 вимагалося дві (2-RTT).
Першим кроком клієнт надсилає ClientHello — повідомлення, що містить список підтримуваних версій TLS, набір шифрів (cipher suites) та випадкове число. Сервер відповідає ServerHello з вибраною версією та шифром, своїм сертифікатом X.509 та цифровим підписом. Клієнт перевіряє сертифікат через ланцюжок центрів сертифікації (CA), генерує сесійний ключ та надсилає його, зашифрований відкритим ключем сервера з сертифіката. Після підтвердження сервером починається захищена передача даних. Весь handshake виконується за 1–3 мілісекунди на сучасних пристроях, що робить його непомітним для користувача.
Основою 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 та TLS часто використовуються як синоніми, між ними є принципові технічні відмінності, які впливають на безпеку та продуктивність мобільних додатків.
| Характеристика | SSL 3.0 | TLS 1.2 | TLS 1.3 |
|---|---|---|---|
| Рік випуску | 1996 | 2008 | 2018 |
| Статус | Застарів (RFC 7568) | Активний (рекомендований) | Актуальний (найкращий) |
| Round-trips | 2 | 2 | 1 |
| Алгоритм обміну ключами | RSA | RSA, ECDHE | ECDHE (тільки) |
| Автентифіковане шифрування | Ні | GCM, CCM | AEAD обов'язковий |
| 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.
В мобільних додатках 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 — прив'язку до конкретного сертифіката сервера.
Розглянемо приклад налаштування безпечного HTTPS-з'єднання в Android з використанням OkHttp — однієї з найпопулярніших бібліотек для роботи з мережею. Правильна конфігурація включає примусове використання TLS 1.3 та перевірку сертифікатів.
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. Така конфігурація гарантує максимальний рівень безпеки при передачі даних в мобільному додатку.
Часто задавані питання
TLS — це більш нова та безпечна версія протоколу. SSL застарів і не повинен використовуватися (RFC 7568). На практиці обидва терміни позначають HTTPS-шифрування, але технічно всі сучасні системи працюють через TLS 1.2 або 1.3.
Встановіть проксі-інструмент Burp Suite або Charles Proxy та перехопіть трафік додатка. Якщо з'єднання використовує HTTPS та сертифікат валідний — додаток використовує TLS. Якщо трафік йде по HTTP — шифрування відсутнє.
Для продакшен-збірок дозволені тільки TLS 1.2 та TLS 1.3. Протоколи SSL 3.0, TLS 1.0 та TLS 1.1 повинні бути відключені на сервері та в клієнтському додатку. З 2020 року основні платформи (Android, iOS, браузери) вимагають TLS 1.2 як мінімум.
Так, рекомендується. TLS перевіряє сертифікат через ланцюжок центрів сертифікації, але якщо якийсь CA-центр буде скомпрометований (що вже відбувалося з DigiNotar в 2011), зловмисник зможе випустити підроблений сертифікат. Pinning додає додатковий шар перевірки.
TLS 1.3 скорочує час встановлення з'єднання з 2 round-trips до 1, що дає виграш 30–50% при першому підключенні. Для мобільних додатків з нестабільним з'єднанням (метро, потяги) це критично важливо для швидкості завантаження даних.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також