Как на самом деле работают HTTPS и TLS: под капотом

Security2026-11-08TryQuickToolBox

Вы вводите URL, нажимаете Enter и видите замок. Но что на самом деле происходит между вашим браузером и сервером, чтобы это соединение стало безопасным? Многие разработчики воспринимают HTTPS как чёрный ящик — пока что-то не сломается, например, ошибка сертификата или проблема с производительностью. Эта статья приоткрывает завесу над HTTPS и TLS, объясняя рукопожатие, шифрование и проверку сертификатов на практических примерах.

Что такое HTTPS на самом деле

HTTPS — это просто HTTP, работающий поверх TLS (Transport Layer Security). TLS обеспечивает три гарантии:

TLS произошёл от SSL (Secure Sockets Layer). Современные версии (TLS 1.2 и 1.3) — это то, что следует использовать; SSL устарел.

Рукопожатие TLS: шаг за шагом

Прежде чем пойдут какие-либо HTTP-данные, клиент и сервер выполняют рукопожатие, чтобы согласовать ключи шифрования. Вот что происходит в типичном рукопожатии TLS 1.3 (упрощённо):

  1. Client Hello: Браузер отправляет список поддерживаемых наборов шифров, случайное значение и свой ключевой обмен для обмена ключами.
  2. Server Hello: Сервер выбирает набор шифров, отправляет своё случайное значение и ключевой обмен, а также предъявляет свой сертификат.
  3. Выработка ключей: Обе стороны вычисляют общий секрет с помощью обмена ключами Диффи-Хеллмана. Из него они выводят сеансовые ключи для симметричного шифрования.
  4. Finished: Обе стороны отправляют MAC (код аутентификации сообщения) для проверки целостности рукопожатия. Теперь может передаваться зашифрованные данные приложения.

TLS 1.3 сократил рукопожатие до одного кругового обхода (1-RTT) и даже поддерживает 0-RTT для возобновлённых сессий, улучшая задержку.

Обмен ключами: Диффи-Хеллман

Магия современного TLS в том, что клиент и сервер могут согласовать общий секрет, никогда не передавая его. Диффи-Хеллман (конкретно ECDHE для эллиптических кривых) позволяет это. Даже если злоумышленник запишет всё рукопожатие, он не сможет вывести сеансовый ключ — это свойство называется прямая секретность (forward secrecy).

Симметричное шифрование: AES или ChaCha20

Как только общий секрет установлен, TLS переключается на симметричное шифрование (например, AES-GCM или ChaCha20-Poly1305), потому что оно намного быстрее асимметричной криптографии. Сеансовые ключи используются для шифрования всех данных приложения.

Проверка сертификата: доверяй, но проверяй

Сертификат сервера имеет центральное значение для аутентификации. Он содержит открытый ключ сервера и подписан удостоверяющим центром (CA). Вот как браузер его проверяет:

Если какая-либо проверка не пройдена, вы получите предупреждение — например, «Ваше подключение не защищено».

Распространённые ошибки конфигурации TLS

Даже при включённом HTTPS ошибки могут ослабить безопасность:

Используйте такие инструменты, как SSL Test от SSL Labs, для проверки вашей конфигурации.

Практический пример: включение HTTPS в Nginx

Вот минимальная конфигурация Nginx для безопасного HTTPS-сервера:

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
    ssl_prefer_server_ciphers off;

    add_header Strict-Transport-Security "max-age=63072000" always;

    location / {
        root /var/www/html;
        index index.html;
    }
}

Эта конфигурация использует сертификаты Let's Encrypt, включает только TLS 1.2 и 1.3 и устанавливает HSTS.

Часто задаваемые вопросы

В чём разница между TLS и SSL?

TLS — преемник SSL. Версии SSL (2.0, 3.0) устарели из-за уязвимостей. Когда говорят «SSL-сертификат», обычно имеют в виду TLS-сертификат.

Замедляет ли HTTPS мой сайт?

Современный TLS (1.3) добавляет минимальную задержку — часто всего несколько миллисекунд. С возобновлением сессий и HTTP/2 HTTPS может быть таким же быстрым или быстрее, чем HTTP.

Как получить бесплатный TLS-сертификат?

Let's Encrypt предоставляет бесплатные автоматизированные сертификаты. Инструменты вроде Certbot могут получить и продлить их для вас.

Заключение

HTTPS и TLS — не магия, а хорошо спроектированные протоколы, сочетающие криптографию с открытым ключом для аутентификации с симметричным шифрованием для скорости. Понимание рукопожатия и проверки сертификатов помогает отлаживать проблемы и безопасно настраивать серверы. Всегда используйте TLS 1.2 или 1.3, поддерживайте сертификаты в актуальном состоянии и включайте HSTS.

Для анализа серверных логов с целью выявления ошибок TLS или проблем с производительностью попробуйте наш Анализатор логов Nginx.