Как работает HTTPS: SSL, TLS и сертификаты простыми словами
7 мин чтения Обновлено:
Как работает HTTPS: SSL, TLS и сертификаты простыми словами

Как работает HTTPS: SSL, TLS и сертификаты простыми словами

Замочек в адресной строке видел каждый, но что за ним происходит — понимают немногие. Разбираем без формул: что шифрует HTTPS, зачем нужны сертификаты, чем TLS отличается от SSL и почему браузер иногда кричит «подключение не защищено».

HTTPS — это обычный протокол HTTP, завёрнутый в шифрованное соединение TLS. Буква S означает Secure. Всё, что летит между браузером и сервером — адреса страниц, формы, пароли, куки, — по HTTPS передаётся в зашифрованном виде: провайдер, владелец Wi-Fi в кафе и любой, кто перехватит трафик, увидят только адрес сервера и бессмысленный набор байтов.

HTTPS решает сразу три задачи. Шифрование — содержимое нельзя прочитать по дороге. Целостность — содержимое нельзя незаметно подменить: любое вмешательство ломает криптографическую подпись. Аутентификация — вы разговариваете именно с тем сайтом, чей адрес набрали, а не с подставным сервером. Третья задача — самая недооценённая: без неё шифрование бессмысленно, ведь можно установить идеально защищённый канал прямо с мошенником.

SSL и TLS — в чём разница

Короткий ответ: это одна и та же технология разных поколений. SSL (Secure Sockets Layer) придумали в Netscape в середине 90-х. Версии SSL 2.0 и 3.0 своё отслужили и были взломаны, и в 1999 году протокол переименовали в TLS (Transport Layer Security), начав нумерацию заново: TLS 1.0, 1.1, 1.2 и, с 2018 года, TLS 1.3.

Сегодня всё живое работает на TLS 1.2 и TLS 1.3 — старые версии отключены в браузерах. Но название «SSL-сертификат» прижилось намертво, поэтому все, включая нас, продолжают так говорить. Технически правильнее «TLS-сертификат», а ещё точнее — «сертификат X.509», но если вы скажете так в разговоре, вас переспросят.

Версия Годы Статус
SSL 2.0 / 3.0 1995–1996 Взломаны, запрещены
TLS 1.0 / 1.1 1999 / 2006 Устарели, отключены в браузерах с 2020 года
TLS 1.2 2008 Рабочая лошадка, поддерживается везде
TLS 1.3 2018 Современный стандарт: быстрее и безопаснее

Рукопожатие: как браузер и сервер договариваются

Перед тем как передать первый байт полезных данных, браузер и сервер проводят TLS-рукопожатие (handshake). Если убрать криптографические детали, происходит четыре вещи.

1. Приветствие. Браузер говорит: «Хочу защищённое соединение, умею вот такие версии TLS и такие наборы шифров». Сервер выбирает самый сильный вариант из пересечения.

2. Предъявление сертификата. Сервер отправляет свой сертификат — электронный документ, в котором написано: «Этот открытый ключ принадлежит домену example.ru, что подтверждено удостоверяющим центром таким-то, действительно до такой-то даты».

3. Проверка и обмен ключами. Браузер проверяет сертификат (об этом ниже) и с помощью открытого ключа сервера стороны вырабатывают общий секретный ключ. Хитрость асимметричной криптографии в том, что подслушивающий видит весь обмен, но вычислить итоговый ключ не может.

4. Переход на симметричное шифрование. Дальше весь трафик шифруется этим общим ключом — это в сотни раз быстрее асимметричных операций. Асимметрия нужна только на старте, чтобы безопасно договориться.

В TLS 1.2 рукопожатие занимало два круга обмена пакетами (2-RTT), в TLS 1.3 — один, а при повторном визите на сайт — ноль: данные летят уже с первым пакетом. Поэтому переход на TLS 1.3 — это ещё и ускорение сайта, особенно на мобильных сетях, где каждый круг стоит десятки миллисекунд. Задержку соединения легко увидеть в замерах TTFB: TLS-рукопожатие — одна из его составляющих.

Сертификаты и цепочка доверия

Откуда браузер знает, что сертификат настоящий? Из цепочки доверия. В каждую операционную систему и браузер зашит список корневых удостоверяющих центров (CA) — организаций, которым доверено подтверждать принадлежность доменов. Корневой центр подписывает промежуточные сертификаты, промежуточные — сертификат вашего сайта. Проверяя сайт, браузер поднимается по этой цепочке до корня: если каждая подпись сходится и корень есть в списке доверенных — замочек зелёный.

При проверке браузер смотрит на четыре вещи: не истёк ли срок действия, совпадает ли домен в сертификате с доменом в адресной строке, целую ли цепочку прислал сервер и не отозван ли сертификат. Провал любой проверки — и вместо сайта посетитель видит страницу-заглушку «Подключение не защищено». Для бизнеса это равносильно падению: браузер прямым текстом отговаривает посетителя заходить.

Сертификат — это не про «надёжность компании»

Обычный DV-сертификат подтверждает только контроль над доменом и выдаётся бесплатно за минуты — тому же фишинговому сайту его выдадут без вопросов. Замочек означает «канал зашифрован и домен тот, что в строке», а не «сайту можно доверять деньги».

Срок жизни сертификатов постоянно сокращается: сейчас максимум 398 дней, у бесплатного Let's Encrypt — 90, и индустрия движется к ещё более коротким срокам. Логика простая: чем короче срок, тем меньше окно злоупотребления утёкшим ключом. Обратная сторона — продление из ручной задачи «раз в год» превратилось в процесс, который обязан быть автоматическим, а автоматика имеет свойство тихо ломаться. Почему сертификаты истекают «внезапно» и как это предотвратить — тема нашего разбора реального случая.

Что HTTPS не скрывает

Полезно понимать границы защиты. Наблюдатель на канале — провайдер, админ сети — не видит содержимое страниц и параметры запросов, но видит: IP-адрес сервера, объём и время передачи трафика и, в большинстве случаев, имя домена — оно передаётся открытым текстом в начале рукопожатия (поле SNI), чтобы сервер с сотней сайтов понял, какой сертификат предъявлять. Расширение ECH шифрует и SNI, но его поддержка пока фрагментарна. Так что HTTPS отвечает на вопрос «что вы делали на сайте» молчанием, а на вопрос «заходили ли вы на этот сайт» — чаще всего нет.

Как перевести сайт на HTTPS и не сломать его

Сама выдача сертификата давно перестала быть проблемой — у большинства хостингов Let's Encrypt подключается одной галочкой в панели. Ломается обычно не выпуск, а переход. Три места, где сайты спотыкаются чаще всего:

Смешанный контент. Страница загружена по HTTPS, а картинки, стили или скрипты в её коде прописаны по http:// — браузер такие ресурсы блокирует или помечает страницу небезопасной. После переезда нужно пройтись по базе и шаблонам и заменить абсолютные http-ссылки на относительные или https. Как найти и вычистить такие хвосты — в статье про смешанный контент.

Редиректы. HTTP-версия должна отдавать 301-редирект на HTTPS — постранично, а не всё на главную. Ошибки здесь стоят дорого и для посетителей, и для SEO: поисковик видит два сайта-дубля или теряет накопленный вес страниц. Какой код редиректа выбирать и почему — в разборе редиректов.

HSTS. Заголовок Strict-Transport-Security говорит браузеру: «на этот сайт — только по HTTPS, без исключений». Он закрывает лазейку для атак с даунгрейдом на HTTP, но включать его стоит после того, как вы убедились, что HTTPS работает стабильно: заголовок кэшируется браузерами на месяцы, и откатиться быстро не выйдет.

Частые вопросы

Замедляет ли HTTPS сайт? На современном железе и TLS 1.3 — на единицы миллисекунд при первом соединении, дальше разница неизмерима. Миф о «тяжёлом шифровании» остался из эпохи SSL и слабых процессоров. Более того, HTTP/2 и HTTP/3, которые реально ускоряют загрузку, в браузерах работают только поверх HTTPS — так что на практике сайт с HTTPS обычно быстрее своей HTTP-версии.

Платный сертификат лучше бесплатного? Криптографически — нет: шифрование одинаковое. Платят за расширенную проверку организации (OV/EV), страховку и wildcard-удобства. Для типового сайта бесплатного DV-сертификата достаточно; важна не цена сертификата, а то, чтобы он не истёк незамеченным.

Почему браузер ругается, хотя сертификат куплен? Чаще всего — неполная цепочка (сервер не отдаёт промежуточный сертификат), сертификат выпущен на www-версию, а открыт домен без www (или наоборот), либо на сервере осталась старая версия после продления. Все три случая наша инструкция по проверке сертификата разбирает с командами.

Что из этого следует владельцу сайта

Первое: HTTPS сегодня обязателен, а не желателен. Браузеры помечают HTTP-страницы с формами как опасные, поисковые системы учитывают протокол при ранжировании, а часть современных возможностей браузера на HTTP просто не работает.

Второе: настроить и забыть не получится. Сертификат истекает, цепочка может стать неполной после переезда на другой сервер, промежуточный сертификат — оказаться отозванным, а конфигурация — включать устаревшие протоколы. Снаружи всё это выглядит одинаково: вчера работало, сегодня посетители видят предупреждение во весь экран. Как вручную проверить свой сертификат, мы разбирали в отдельной инструкции.

Третье: следить за этим должен автомат. Проверка SSL-сертификата смотрит срок действия, цепочку и соответствие домена по расписанию, а проверка доступности (GET) замечает, если сайт перестал отвечать по HTTPS вовсе.

Пруфен следит за сертификатами до того, как их увидит браузер

Проверка SSL в Пруфене заранее предупреждает об истекающем сертификате и проблемах с цепочкой — в Email, Telegram, Макс или звонком. Плюс мониторинг доступности из 13 точек — 11 из них в России — покажет, если HTTPS сломался только для части посетителей. Бесплатного тарифа хватает на 5 проверок.

Была ли статья полезна?

Начните мониторинг прямо сейчас

Бесплатный тариф — до 5 проверок. 150 ₽ на баланс при регистрации.

Создать аккаунт