Если используется HTTPS, зашифрован ли URL?

«Если используется HTTPS, зашифрован ли URL?» — вопрос из категории Безопасность, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При использовании HTTPS URL шифруется частично. Шифрование обеспечивается протоколом TLS, который инкапсулирует HTTP.

Что шифруется в TLS-туннеле:

  • Путь (Path) и строка запроса (Query String): Часть URL после хоста и порта. Например, в https://example.com/search?q=secret зашифрованы /search?q=secret.
  • Тело запроса (Request Body): Все данные, отправляемые методами POST, PUT и т.д.
  • Заголовки HTTP (Headers): Включая cookies, authorization tokens, user-agent.
  • Статус и тело ответа (Response).

Что НЕ шифруется и видно на сетевом уровне:

  • Доменное имя (Hostname): Оно раскрывается в процессе:
    1. DNS-запроса (если не используется DNS over HTTPS/ TLS).
    2. ClientHello пакета TLS в расширении SNI (Server Name Indication), необходимо для того, чтобы сервер представил правильный сертификат при размещении нескольких сайтов на одном IP.
  • IP-адрес назначения.
  • Номер порта (обычно 443).

Практические последствия для DevOps/безопасности:

  1. Мониторинг и фильтрация: Провайдеры или корпоративные файрволы могут видеть, к каким доменам вы обращаетесь (через SNI/DNS), но не видят полный URL или данные.
  2. Угрозы: Атакующий в позиции "человек посередине" (MITM) может узнать, какие сайты посещает жертва.
  3. Меры усиления: Для сокрытия SNI можно использовать:
    • Encrypted Client Hello (ECH) или его предшественник ESNI (Encrypted SNI), который шифрует имя сервера в TLS 1.3.
    • DNS over HTTPS (DoH) или DNS over TLS (DoT) для шифрования DNS-запросов.
    • VPN/Tor для маскировки всего трафика, включая IP-адрес.

Вывод: HTTPS защищает конфиденциальность передаваемых данных и параметров, но метаданные соединения (домен, IP) остаются видимыми.