Форум
Как отключить TLS-расширение ECH для решения проблем с Cloudflare в РФ
Роскомнадзор начал блокировать в РФ соединения к сайтам, использующим
TLS-расширение ECH (Encrypted Client Hello). Блокировка привела к массовым
проблемам с сайтами, работающими через сеть доставки контента Cloudflare,
которую используют примерно 19% всех сайтов в интернете (по другим данным
16% (31 млн) активных сайтов или 23.83% из миллиона самых популярных сайтов).
О масштабе сбоев можно судить хотя бы по тому, что из-за блокировки ECH была
нарушена работа сайта самого Роскомнадзора, на котором для загрузки шрифтов
использовался сервис webfontfree.com, работающий через Cloudflare (первая
попытка открытия rkn.gov.ru приводила к минутному зависанию до истечения таймаута).
ECH продолжает развитие TLS-расширений SNI и ESNI (Encrypted Server Name
Indication) и предназначен для шифрования информации о параметрах TLS-сеансов,
таких как запрошенное доменное имя. Если без ECH на стороне интернет-провайдера
можно выборочно фильтровать HTTPS-трафик и анализировать какие сайты открывает
пользователь, то ECH позволяет добиться полной конфиденциальности при
применении HTTPS при обращении к сайтам, использующим сети доставки контента с
поддержкой ECH. После включения поддержки ECH в Cloudflare Роскомнадзор потерял
возможность блокировать сайты, использующие данную сеть доставки контента, и
поэтому просто начал блокировать HTTPS-запросы с ECH (судя по всему блокировка
ECH пока ограничивается отдельными подсетями Cloudflare).
На стороне пользователя в Firefox доступ к сайтам, работающим через Cloudflare,
можно решить двумя путями:
* отключить настройки network.dns.echconfig.enabled и
network.dns.http3_echconfig.enabled на странице about:config
* отключить использование протокола TLS 1.3 выставив в about:config параметр
security.tls.version.max в значение "3". При этом может быть нарушена работа с
серверами, поддерживающими только протокол TLS 1.3 и отключившими поддержку TLS 1.2.
В Chrome раньше ECH можно было отключить через параметр
chrome://flags#encrypted-client-hello, но с февраля этого года он удалён и ECH
всегда включён по умолчанию. Для отключения ECH в Chrome обходным путём можно
создать файл /etc/opt/chrome/policies/managed/conf.json c содержимым:
{ "EncryptedClientHelloEnabled": false }
Владельцы сайтов, использующих Cloudflare, могут отключить ECH в личном
кабинете dash.cloudflare.com в секции "SSL > Edge Certificates > Encrypted
ClientHello (ECH)".
Если тарифный план не предусматривает возможность изменения данной настройки
через web-интерфейс, для отключения ECH можно использовать API:
curl -X PATCH "https://api.cloudflare.com/client/v4/zones/ID_ZONE/settings/ech" -H "X-Auth-Key: YOUR_GLOBAL_API_KEY" -H "X-Auth-Email: YOUR_EMAIL" -H "Content-Type: application/json" --data '{"id":"ech","value":"off"}'
Отключение ECH через API Cloudflare
Теперь, когда у вас есть Global API Key и Zone ID, вы можете отключить ECH с помощью команды curl. Выполните следующую команду, заменив {ID_ZONE} на ваш Zone ID, а {ACCOUNT_EMAIL} и {GLOBAL_API_KEY} на ваш email и API-ключ соответственно:
curl -X PATCH "https://api.cloudflare.com/client/v4/zones/{ID_ZONE}/settings/ech" \ -H "X-Auth-Email: {ACCOUNT_EMAIL}" \ -H "X-Auth-Key: {GLOBAL_API_KEY}" \ -H "Content-Type:application/json" --data '{"id":"ech","value":"off"}'
Отключение ECH через Postman
Вы также можете выполнить отключение через Postman:
- В Postman выберите метод PATCH и введите URL:
https://api.cloudflare.com/client/v4/zones/{ID_ZONE}/settings/ech - В Headers добавьте следующие поля:
- X-Auth-Email: ваш email-адрес Cloudflare.
- X-Auth-Key: ваш Global API Key.
- Content-Type: application/json
- В Body выберите raw и введите следующий JSON:
{"id": "ech", "value": "off"}
А для пользователей платных тарифов CloudFlare есть более простой вариант:
- Зайдите в настройки SSL/TLS на панели Cloudflare.
- В разделе "Edge Certificates" найдите "Encrypted ClientHello (ECH)" и выберите "Disabled", если хотите отключить шифрование.