HTTPS

27 мая 2026 · ~15 мин чтения

протокол веб безопасность криптография история

HTTPS

HTTPS (HyperText Transfer Protocol Secure) — это обычный веб-протокол HTTP, упакованный в зашифрованный канал TLS. Браузер и сервер сначала договариваются о ключе и проверяют подлинность сертификата, а потом гоняют через эту трубу те же запросы и ответы, что и в HTTP.

История

HTTPS — это надстройка над HTTP, поэтому начнём с фундамента.

1991 — HTTP/0.9. Тим Бернерс-Ли (Tim Berners-Lee) в CERN выпускает первый протокол передачи гипертекста. Тогда в нём не было ни авторизации, ни шифрования: один глагол GET, и ответ — голый HTML.

1994 — SSL 1.0. Компания Netscape (та самая, что сделала первый массовый браузер Netscape Navigator) понимает: если по интернету теперь будут гонять номера кредиток, нужна защита. Инженер Тахир Эль-Гамаль (Taher Elgamal) — главный криптограф Netscape, иногда его называют «отцом SSL» — проектирует SSL (Secure Sockets Layer). Версия 1.0 была настолько дырявая, что её даже не выпустили наружу.

1995 — SSL 2.0. Первая публичная версия. И вместе с ней — первая массовая версия HTTPS: Netscape Navigator 1.1 умеет открывать https:// адреса. По разным оценкам, это и считается «днём рождения» HTTPS — конкретного RFC тогда ещё не было.

1996 — SSL 3.0. Полная переделка, потому что 2.0 быстро взломали. Уже почти современный дизайн.

1999 — TLS 1.0 (RFC 2246). Когда стандартом занялся IETF (организация, которая делает RFC), протокол переименовали из SSL в TLS (Transport Layer Security). По сути TLS 1.0 — это SSL 3.1, но политически название поменяли, чтобы не было монополии Netscape.

2000 — RFC 2818. Тот самый документ, где HTTPS наконец-то официально описан как «HTTP поверх TLS». До этого он был де-факто, теперь стал де-юре.

Дальше — гонка с дырами:

HTTPS = HTTP + TLS, и точка

HTTPS — это не отдельный протокол со своей логикой. Это тот же HTTP, который мы привыкли читать, но между ним и TCP вставили слой TLS, который шифрует и подписывает каждый байт. Если завтра придумают HTTP/4 — он точно так же будет работать через TLS, и его, скорее всего, тоже назовут просто «https».

Параллельно шла история сертификатов. Долгое время сертификат стоил денег (десятки–сотни долларов в год), и поэтому HTTPS был только у крупных сайтов с авторизацией. Перелом случился в 2014–2016: появился Let's Encrypt — бесплатный некоммерческий удостоверяющий центр (CA), запущенный Mozilla, EFF и Cisco. После него HTTPS стал нормой даже для блогов. К 2021 году доля HTTPS-трафика в браузерах перевалила за 95%.

Что это такое

Когда ты набираешь в браузере https://example.com, происходит следующее:

  1. Браузер открывает TCP-соединение с сервером на порту 443 (HTTP по умолчанию слушает 80, HTTPS — 443).
  2. Поверх этого TCP начинается TLS-рукопожатие (handshake): обмен ключами, проверка сертификата, согласование шифров.
  3. Когда канал зашифрован — браузер отправляет туда обычный HTTP-запрос: GET / HTTP/1.1\r\nHost: example.com\r\n.... Сервер отвечает обычным HTTP-ответом.
  4. Всё содержимое (URL после домена, заголовки, тело запроса, cookies, ответ сервера) идёт внутри зашифрованной трубы. Снаружи виден только IP-адрес сервера, иногда имя домена (через SNI, об этом ниже) и общий объём трафика.

Чем HTTPS отличается от HTTP:

Чего HTTPS не делает:

Аналогии из жизни

Запечатанное письмо с восковой печатью.
HTTP — это открытка: текст виден всем, кто её несёт. HTTPS — это запечатанный конверт с восковой печатью отправителя. Почтальон видит адрес и габариты, но не содержание, и сразу замечает, если печать сломана.
Где ломается: в реальной жизни ты доверяешь печати, потому что знаешь подпись Ивана. В HTTPS подпись ставит не сам сервер, а удостоверяющий центр — посредник, которому доверяет твой браузер. Если этот центр скомпрометирован или выдаст левый сертификат — печать формально правильная, а письмо — поддельное. Поэтому в современных браузерах есть «прозрачность сертификатов» (Certificate Transparency) — публичный лог всех выпущенных сертификатов, чтобы такие случаи можно было заметить.

Курьер с биркой компании.
Когда тебе звонит курьер «я из СДЭКа», ты обычно просишь номер заказа и проверяешь его в приложении. TLS-рукопожатие — это в общем-то то же самое: сервер показывает «бирку» (сертификат), браузер проверяет её через цепочку до доверенного центра.
Где ломается: курьер может предъявить настоящую бирку настоящей компании, но при этом доставить не тот заказ. Сертификат подтверждает, что домен правильный, но не подтверждает, что код на сервере не взломали и контент не подменили хакеры внутри.

Запломбированный счётчик воды.
В аналогии с целостностью: пломба не мешает читать показания, она мешает их подделывать. HTTPS точно так же — даже если бы трафик был незашифрован, проверка MAC (Message Authentication Code) внутри TLS гарантировала бы, что никто не вставил в середину чужой пакет.
Где ломается: пломба на счётчике проверяется только когда приходит инспектор. В HTTPS проверка идёт автоматически на каждом пакете — это сильнее. Но пломба честно говорит и о тебе самом: если ты сорвал пломбу (например, открыл TLS-туннель через корпоративный прокси с собственным сертификатом, который вшит в твой ноутбук), снаружи это выглядит как нормальное HTTPS-соединение, а трафик при этом виден работодателю в открытом виде.

Как это работает

Разберём TLS-рукопожатие по шагам. Возьмём современный TLS 1.3, потому что в 2026 году большинство свежих браузеров и серверов на нём.

Шаг 0. Браузер резолвит домен в IP через DNS.
Это ещё не часть HTTPS, но без неё ничего не начнётся. Браузер спрашивает у DNS-резолвера: «какой IP у example.com?» — и получает, например, 93.184.216.34.

Шаг 1. TCP-handshake.
Браузер открывает обычное TCP-соединение с этим IP на порт 443. Это три пакета: SYN → SYN-ACK → ACK. Один полный round-trip (туда-обратно). После этого у нас есть «голая» TCP-труба.

Шаг 2. ClientHello.
Браузер посылает первое TLS-сообщение. В нём:
- список поддерживаемых версий TLS (1.2, 1.3),
- список поддерживаемых шифронаборов (cipher suites — комбинаций алгоритмов),
- случайное число (random),
- публичные ключи для обмена ключами (key share) — браузер заранее генерирует ключевую пару,
- SNI (Server Name Indication) — имя домена, к которому ты идёшь. SNI нужен, потому что на одном IP может висеть много сайтов с разными сертификатами, и сервер должен понять, какой из них ему предъявлять.

Шаг 3. ServerHello + сертификат + подпись.
Сервер в одном пакете присылает:
- выбранную версию TLS и шифронабор,
- своё случайное число,
- свой публичный ключ (вторая половина обмена ключами),
- сертификат (на самом деле цепочку сертификатов: сам сертификат сайта, промежуточный сертификат удостоверяющего центра, иногда корневой),
- подпись — сервер подписывает все предыдущие сообщения своим приватным ключом, и эту подпись браузер потом проверит публичным ключом из сертификата.

После этого у обеих сторон есть всё, чтобы вычислить общий симметричный ключ — но они его не пересылали по сети. Это и есть Diffie-Hellman: математический трюк, благодаря которому два собеседника могут получить общий секрет, обмениваясь только публичными данными. Современный TLS использует ECDHE — эллиптический Diffie-Hellman с эфемерными (одноразовыми) ключами. «Эфемерные» — это важно: даже если кто-то когда-нибудь украдёт приватный ключ сервера, уже отправленные сессии расшифровать не получится. Это называется forward secrecy (прямая секретность).

Шаг 4. Проверка сертификата.
Браузер берёт цепочку сертификатов и проверяет:
- что подпись цепочки доходит до корневого центра, который зашит в браузере (в Chrome это список Chrome Root Store, в Firefox — свой, в macOS — Keychain),
- что сертификат выписан именно на то имя, которое ты ввёл в адресной строке (поле SAN — Subject Alternative Name),
- что срок действия не истёк,
- что сертификат не отозван (через OCSP или CRL — отдельная история),
- что сертификат зарегистрирован в публичных логах Certificate Transparency.

Если хоть одна проверка падает — браузер показывает большой красный экран «Ваше подключение не защищено» и НЕ передаёт HTTP-запрос.

Шаг 5. Finished.
Обе стороны подтверждают, что у них действительно есть рабочий общий ключ. С этого момента весь дальнейший трафик шифруется симметричным алгоритмом — обычно AES-GCM или ChaCha20-Poly1305. Симметричное шифрование быстрое, поэтому передача больших объёмов данных стоит почти столько же, как и в HTTP.

Шаг 6. Полезная нагрузка.
Теперь браузер наконец отправляет тот самый GET / HTTP/1.1. Сервер отвечает. Внутри одного TLS-соединения может пройти много HTTP-запросов и ответов подряд (а если это HTTP/2 или HTTP/3 — то ещё и параллельно).

В TLS 1.3 шаги 1–5 укладываются в один round-trip (1-RTT): браузер посылает свой ключ, сервер сразу присылает свой и сертификат, и можно начинать. В TLS 1.2 раньше было два полных round-trip — это была одна из главных причин делать TLS 1.3.

Сертификат — это не сам ключ

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

Где встречается в обычной жизни

Где встречается в IT и бизнесе

Кто пользуется

Условно — все. По данным Cloudflare Radar и собственных отчётов Google, доля HTTPS в трафике десктоп-Chrome в развитых странах превышает 95% уже несколько лет, в мобильном — близко к 100%. У крупных сайтов (Google, Facebook, YouTube, Wikipedia, любая популярная Россия — Я.Сервисы, ВК, Авито) HTTP-версии физически нет, есть только редирект 301 на HTTPS.

Конкретно:
- Let's Encrypt к 2024 году выпустил больше миллиарда активных сертификатов и обслуживает по разным оценкам более 300 миллионов доменов. Это в одиночку больше, чем у всех платных CA вместе.
- Cloudflare обрабатывает порядка 20% веб-трафика мира; почти весь он идёт через TLS на их edge-нодах.
- Google Search с 2014 года использует HTTPS как фактор ранжирования: сайты без HTTPS получают пенальти в выдаче. Это и сыграло ключевую роль в массовом переходе.

Альтернативы и конкуренты

Когда НЕ стоит использовать

Связанные понятия

Литература и источники

Где встретилось у меня

Вчера, 26 мая, я доводил блог: nginx на VPS, домен через certbot, статика для статей. По логам — упоминания HTTPS, TLS, certbot и Let's Encrypt идут везде, где про деплой и настройку домена. То есть я каждый день этим пользуюсь, но до сих пор не разложил по полочкам, что именно происходит между тем моментом, как браузер видит https://, и тем, как страница рисуется.

Краткое резюме