Одна из крупнейших сетей доставки контента (CDN) Cloudflare в октябре 2024 года внедрила на своих серверах расширение протокола TLS – ECH (Encrypted Client Hello). Данное расширение обеспечивает дополнительную защиту приватности пользователей при установке HTTPS-соединений. ECH скрывает метаданные, присутствующие в сообщении ClientHello
, включая имя домена (SNI), к которому производится подключение. Шифрование ClientHello
, содержащего SNI, делает трафик менее доступным для анализа, значительно затрудняя мониторинг и отслеживание активности пользователей в сети.
Роскомнадзор активно использует анализ SNI для реализации выборочной блокировки интернет-ресурсов через технические средства противодействия угрозам (ТСПУ). Однако ECH полностью исключает возможность точечного ограничения доступа к сайтам, расположенным за инфраструктурой Cloudflare. Столкнувшись с этой проблемой, РКН начал блокировать соединения с сайтами, использующими ECH на платформе Cloudflare. Результатом этих действий явилось то, что доступ к множеству ресурсов оказался заблокирован. В том числе это коснулось законных и безопасных сайтов, таких как новостные порталы и форумы.
В данной заметке разберём, как можно отключить ECH для домена на Cloudflare.
Отключение ECH с использованием утилиты curl
Во-первых, проверьте, действительно ли ECH включён для вашего домена. Чтобы это сделать, перейдите по адресу, где your-domain.host
замените на доменное имя вашего сайта:
https://dns.google/resolve?name=your-domain.host&type=HTTPS
Данный запрос предназначен для получения информации через Google Public DNS о DNS-записях типа HTTPS для указанного домена, в данном случае — your-domain.host
.

В рассматриваемом примере значение ech
содержит закодированную в формате Base64 конфигурацию ECH. Это явный признак того, что сервер поддерживает ECH, и клиент может использовать эту информацию для зашифровки ClientHello
.
Далее, перейдите на сайт Cloudflare по ссылке, где найдите и скопируйте ваш Global API Key.

Затем, там же на сайте Cloudflare, перейдите к управлению вашим доменом, где пролистав вниз страницы, в разделе API найдите Zone ID. Значение данного параметра также необходимо скопировать.

Теперь запустите утилиту curl
для отключения ECH. В данном случае необходимо:
global_api_key
заменить на ваш Global API Key;zone_id
— на ваш Zone ID;your@mail.com
— на адрес электронной почты, привязанный к вашему аккаунту на Cloudflare.
curl -X PATCH "https://api.cloudflare.com/client/v4/zones/zone_id/settings/ech" \ -H "X-Auth-Email: your@mail.com" \
-H "X-Auth-Key: global_api_key" \
-H "Content-Type:application/json" --data '{"id":"ech","value":"off"}'
Если запрос выполнен правильно, Cloudflare вернёт ответ, подтверждающий отключение:
{"result":{"id":"ech","value":"off","modified_on":null,"editable":true},"success":true,"errors":[],"messages":[]}
Повторное выполнение запроса https://dns.google/resolve?name=your-domain.host&type=HTTPS
должно подтвердить отключение ECH:

Отключение ECH при помощи Postman
Ту же процедуру можно проделать при помощи Postman. Postman — инструмент для тестирования API, который позволяет отправлять запросы к серверу, получать от него ответы и анализировать их. Он поддерживает работу с протоколом HTTPS и позволяет создавать запросы с использованием заголовков, параметров и тела. Это позволяет тестировать API, которые используют шифрованные соединения для обеспечения безопасности передачи данных.
Для отключения ECH в Postman создайте следующий запрос, выбрав метод PATCH. В запросе замените zone_id
на ваш Zone ID.:
https://api.cloudflare.com/client/v4/zones/zone_id/settings/ech
Во вкладке Headers
добавьте ключи:
X-Auth-Email
— адрес электронной почты, привязанный к вашему аккаунту Cloudflare;X-Auth-Key
— ваш Global API Key;Content-Type
— в столбцеValue
укажите значениеapplication/json
.

Затем во вкладку Body
скопируйте следующий JSON-объект:
{"id": "ech", "value": "off"}

И наконец, нажмите кнопку Send
.

Проверку отключения ECH можно осуществить при помощи уже использованного ранее DNS-запроса через API сервиса Google DNS:
https://dns.google/resolve?name=your-domain.host&type=HTTPS