Как отключить протокол ECH в Cloudflare

cloudflare

ECH расшифровывается как Encrypted Client Hello. Это расширение протокола в контексте Transport Layer Security (TLS). ECH шифрует часть рукопожатия и маскирует указание имени сервера (SNI), которое используется для согласования сеанса TLS.

Это означает, что при посещении пользователем сайта за Cloudflare с включенным ECH посредники смогут увидеть, что вы посещаете сайт на Cloudflare, но не смогут определить, какой именно.

Проблема

Cloudflare принудительно включить ECH (Encrypted Client Hello) для всех веб-сайтов, при этом нет возможности изменить данную настройку в интерфейсе.

Что делает ECH

ECH ограничивает доступ к информации о том, что конкретный пользователь посещает ваш сайт, гарантируя, что она не будет без необходимости передана посредникам, например поставщикам интернет-услуг (ISP). Благодаря ECH, когда пользователь заходит на ваш сайт, конкретные сведения о его посещении больше не попадают к сетевым посредникам.

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

При обычном рукопожатии TLS клиент отправляет серверу сообщение ClientHello, чтобы инициировать сеанс TLS. Это сообщение содержит важную информацию, включая список поддерживаемых криптографических алгоритмов, версию TLS и запрашиваемое имя сервера (доменное имя веб-сайта, к которому клиент хочет подключиться). Имя сервера указывается с помощью Server Name Indication (SNI).

В ECH часть сообщения ClientHello разделяется на два отдельных сообщения: внутреннюю и внешнюю части. Внешняя часть содержит нечувствительную информацию, такую как используемые шифры и версия TLS, а также «внешнее ClientHello». Внутренняя часть зашифрована и содержит «внутреннее ClientHello».

Внешнее ClientHello содержит общее имя (SNI), которое показывает, что пользователь пытается посетить зашифрованный веб-сайт на Cloudflare. Мы выбрали cloudflare-ech.com в качестве SNI, который будет использоваться всеми веб-сайтами на Cloudflare. Поскольку Cloudflare контролирует этот домен, у нас есть соответствующие сертификаты, чтобы согласовать рукопожатие TLS для этого имени сервера.

Внутреннее ClientHello содержит фактическое имя сервера, который пытается посетить пользователь. Оно зашифровано с помощью открытого ключа и может быть прочитано только Cloudflare. После завершения рукопожатия веб-страница загружается в обычном режиме, как и любой другой сайт, загружаемый по TLS.

На практике это означает, что любой посредник, просматривающий ваш трафик, будет видеть обычные рукопожатия TLS с одной оговоркой: любой трафик на имя сервера с поддержкой ECH на Cloudflare будет выглядеть так же. Каждое рукопожатие TLS будет выглядеть идентично, поскольку оно выглядит так, как будто пытается загрузить веб-сайт cloudflare-ech.com, а не реальный веб-сайт.

Отключение с помощью API

Перед началом работы скрипта, необходимо установить зависимости jq и curl

Создаем скрипт

Со следующим содержимым

и выполняем его с указанными параметрами

Где

  • [Email] - Email адрес аккаунта CloudFlare
  • [api-key] - Глобальный API ключ (Global API Key), получить можно на странице профиля https://dash.cloudflare.com/profile/api-tokens

Скрипт автоматически получит все зоны и отключит для всех сайтов на аккаунте ECH (Encrypted Client Hello).

После окончания работы скрипта, не забудьте проверить настройки SSL/TLS - SSL/TLS encryption и SSL/TLS - Edge Certificates.

Комментарии: 0