← Cloudflare API Shield / api-shield / security / mtls
Настройка mTLS
Если вы указываете хосты API в аутентификация mTLS, Cloudflare будет блокировать все запросы, у которых нет клиентский сертификат для аутентификации mTLS.
Предварительные требования
Прежде чем защищать API или веб-приложение с помощью правил mTLS, необходимо выполнить следующее:
- Убедитесь, что сертификат, установленный на вашем origin-сервере, соответствует хосту клиентского сертификата, например
api.example.com. Wildcard-сертификаты исходного сервера, такие как*.example.comне поддерживаются. - Создание клиентского сертификата.
- Настройка мобильного приложения или IoT устройства чтобы использовать клиентский сертификат, выданный Cloudflare.
- Включение взаимной защиты транспортного уровня (mTLS) для хоста в вашей зоне.
Создание правила mTLS через панель управления Cloudflare
-
В панели управления Cloudflare перейдите в Client Certificates страницу.
Перейдите в Client Certificates ↗ -
Выберите Создание правила mTLS.
-
В Custom rules, несколько параметров правила уже заполнены. Введите путь URI, который нужно защитить, в поле Значение.
-
(Необязательно) Добавьте
Hostnameполе и введите хосты с включенным mTLS, которые вы хотите защитить, в Значение. -
В Выберите действие, выберите
Block. -
Выберите Развернуть чтобы активировать правило.
После развёртывания правила mTLS все запросы без действительный клиентский сертификат будет заблокирован.
Expression Builder
Чтобы просмотреть правило mTLS в Expression Builder, выберите значок гаечного ключа связанный с вашим правилом.
В Expression Preview, ваше правило mTLS включает составное выражение образованный из двух простые выражения объединённых с помощью and оператор.
Первое выражение: not cf.tls_client_auth.cert_verified возвращает true когда запрос на доступ к вашему API или веб-приложению не содержит действительного клиентского сертификата.
Второе выражение использует http.request.uri.path поле в сочетании с in оператор, чтобы охватить пути URI, к которым применяется ваше правило mTLS.
Поскольку действие для вашего правила составляет Block, доступ к указанным хостам получат только запросы с действительным клиентским сертификатом.
Cloudflare рекомендует также проверять хеш Subject Key Identifier (SKI) издателя. Без этой проверки принимается любой действительный клиентский сертификат независимо от того, каким центром сертификации (CA) он был выпущен. Добавление проверки хеша SKI ограничивает доступ сертификатами конкретного центра сертификации.
Это можно реализовать с помощью выражения, подобного следующему:
not (cf.tls_client_auth.cert_verified and cf.tls_client_auth.cert_issuer_ski eq "A5AC554235DBA6D963B9CDE0185CFAD6E3F55E9F")Чтобы получить хеш Subject Key Identifier (SKI) издателя клиентского сертификата, хранящегося в mtls.crt файл, выполните следующую команду OpenSSL:
openssl x509 -noout -ext authorityKeyIdentifier -in mtls.crt | tail -n1 | tr -d ': 'A5AC554235DBA6D963B9CDE0185CFAD6E3F55E9FПроверьте наличие отозванных сертификатов
Чтобы проверить наличие отозванные клиентские сертификаты, вы можете либо добавить новое правило mTLS, либо добавить новое выражение в правило по умолчанию. Чтобы проверить отозванные сертификаты, необходимо использовать Expression Builder.
Если запрос содержит отозванный сертификат, cf.tls_client_auth.cert_revoked поле имеет значение true. Если объединить это с правило mTLS по умолчанию, это будет выглядеть примерно так:
((not cf.tls_client_auth.cert_verified or cf.tls_client_auth.cert_revoked) and http.request.uri.path in {"/admin"})