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 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

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