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

Security2026-11-10TryQuickToolBox

Вы наверняка видели значок замка в браузере и знаете, что он означает «безопасно». Но что на самом деле происходит, когда вы заходите на сайт с HTTPS? Откуда браузер знает, что общается с настоящим сервером, а не с самозванцем? И почему TLS иногда замедляет работу? Это руководство разбирает HTTPS и TLS на практических примерах, чтобы вы могли уверенно настраивать, отлаживать и защищать свои веб-приложения.

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

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

Без TLS протокол HTTP передаёт всё в открытом виде: пароли, куки и личные данные видны любому на сетевом пути. HTTPS решает эту проблему.

Рукопожатие TLS простыми словами

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

  1. Client Hello: браузер отправляет список поддерживаемых шифров, версий TLS и случайное значение.
  2. Server Hello: сервер выбирает шифр, отправляет своё случайное значение и предоставляет цепочку сертификатов.
  3. Обмен ключами: обе стороны используют алгоритм обмена ключами (например, ECDHE), чтобы вывести общий секрет, никогда не передавая его напрямую.
  4. Проверка сертификата: клиент проверяет сертификат сервера по доверенным корневым ЦС, проверяет доменное имя и срок действия.
  5. Finished: обе стороны отправляют MAC для подтверждения целостности рукопожатия, и начинается передача зашифрованных данных приложения.

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

Сертификаты: якорь доверия

Сертификат связывает открытый ключ с доменным именем и подписан удостоверяющим центром (CA). Браузеры и операционные системы поставляются с хранилищем доверенных корневых ЦС. Когда сервер предъявляет свой сертификат, клиент проверяет цепочку до доверенного корня.

Распространённые типы сертификатов:

Сертификаты истекают, поэтому автоматизация необходима. Инструменты вроде Certbot или ACME-клиенты, интегрированные с вашим обратным прокси, автоматически продлевают сертификаты.

Настройка HTTPS на вашем сервере

Вот минимальная конфигурация Nginx, включающая HTTPS с современными настройками TLS:

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;

    # HSTS (включайте после тестирования)
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

    location / {
        proxy_pass http://localhost:3000;
    }
}

server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

Ключевые моменты: используйте только TLS 1.2 и 1.3, предпочитайте шифры ECDHE для прямой секретности и перенаправляйте HTTP на HTTPS. HSTS указывает браузерам всегда использовать HTTPS для вашего домена, но тщательно протестируйте перед включением с большим max-age.

Распространённые ошибки и как их избежать

TLS 1.2 против TLS 1.3: что изменилось

ФункцияTLS 1.2TLS 1.3
Круговые обходы рукопожатия2-RTT1-RTT (0-RTT с возобновлением)
Обмен ключамиRSA или ECDHEТолько ECDHE (прямая секретность обязательна)
ШифрыМного, включая слабыеСокращённый набор, все AEAD
Данные 0-RTTНе поддерживаетсяПоддерживается (с риском повторного воспроизведения)

TLS 1.3 быстрее и проще, удалены устаревшие алгоритмы. Большинство современных клиентов поддерживают его, но сохраняйте TLS 1.2 для старых устройств.

Отладка проблем TLS

Когда HTTPS не работает, проверьте следующее:

Если вы регулярно работаете с логами Nginx, Анализатор логов Nginx поможет быстро выявить сбои рукопожатия TLS и другие проблемы.

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

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

HTTPS — это HTTP поверх TLS. TLS — криптографический протокол, обеспечивающий шифрование, целостность и аутентификацию. HTTPS — безопасная версия HTTP, использующая TLS.

Нужен ли сертификат для внутренних сервисов?

Да, для production внутренних сервисов используйте сертификаты от собственного ЦС или публичного ЦС. Самоподписанные сертификаты вызывают проблемы с доверием; рассмотрите использование частной PKI или инструментов вроде mkcert для разработки.

Как часто нужно обновлять сертификаты?

Современная лучшая практика — 90-дневные сертификаты с автоматическим продлением, как предлагает Let's Encrypt. Более короткие сроки снижают риск при компрометации ключа.

Готовы защитить свой сайт? Начните с проверки текущей конфигурации TLS с помощью SSL-тестера, затем примените настройки Nginx выше. Для более глубокого погружения в веб-безопасность изучите наши другие руководства по OWASP Top 10 и предотвращению XSS.