← Cloudflare SSL/TLS / ssl / client-certificates
Bring your own CA for mTLS
На этой странице объясняется, как управлять клиентскими сертификатами, которые не были выпущены центром сертификации Cloudflare. Более общий обзор можно найти в учебный курс «mTLS в Cloudflare».
Bring your own CA (BYOCA) особенно полезен, если у вас уже реализован mTLS и клиентские сертификаты уже установлены на устройствах.
Доступность
- Эта функция доступна только на аккаунтах Enterprise.
- Каждая учётная запись Enterprise может загрузить до пяти CA. Эта квота не распространяется на CA, загруженные через Cloudflare Access.
- Квота на сертификаты CA является общей для API Shield, Workers mTLS, а также Cloudflare Gateway.
- Чтобы увеличить эту квоту, обратитесь в свою команду по работе с клиентами.
Требования к сертификату CA
Когда вы загружаете свой CA, Cloudflare проверяет сертификат на соответствие определённым требованиям.
-
Сертификат CA может быть выдан общедоступным доверенным удостоверяющим центром или быть самоподписанным.
-
В сертификате
Basic Constraints, атрибутCAдолжен быть установлен наTRUE. -
Сертификат должен использовать один из перечисленных ниже алгоритмов подписи:
Разрешённые алгоритмы подписи
x509.SHA1WithRSAx509.SHA256WithRSAx509.SHA384WithRSAx509.SHA512WithRSAx509.ECDSAWithSHA1x509.ECDSAWithSHA256x509.ECDSAWithSHA384x509.ECDSAWithSHA512
Настройка mTLS с собственным CA
-
На панели управления Cloudflare перейдите к разделу Client Certificates страницу.
Перейдите в Client Certificates ↗ -
Выберите Добавить сертификат.
-
В Центр сертификации раскрывающемся списке выберите Bring your own CA.
-
Загрузите файл сертификата CA (в кодировке PEM) и укажите имя для CA.
-
Выберите Продолжение.
-
На Привязка имён хостов странице введите имя хоста, которое должно использовать этот CA для проверки mTLS, и выберите Add для каждого из них. Также можно пропустить этот шаг и связать имена хостов позже.
-
Выберите Save для подтверждения.
- Используйте Эндпоинт для загрузки сертификата mTLS чтобы загрузить корневой сертификат CA.
-
caтребуется логическое значение- Установите значение
trueчтобы указать, что сертификат является сертификатом CA.
- Установите значение
-
certificatesстрока обязательно- Вставьте содержимое из
.pemфайл, связанный с сертификатом ЦС, отформатированный как единая строка с\nзаменяя разрывы строк.
- Вставьте содержимое из
-
nameстрока необязательно- Укажите уникальное имя для сертификата CA.
-
private_keyстрока необязательно- Вставьте содержимое из
.pemфайл, связанный с закрытым ключом сертификата, отформатированный как единая строка с\nзаменяя разрывы строк.
- Вставьте содержимое из
- Запишите ID сертификата (
id) которое возвращается в ответе API. - Используйте Конечная точка замены связей имен хостов чтобы включить mTLS для каждого имени хоста, которое должно использовать этот CA для проверки mTLS. Используйте следующие параметры:
-
hostnamesтребуется массив-
Перечислите имена хостов, которые будут использовать этот CA для проверки клиентских сертификатов.
-
-
mtls_certificate_idстрока обязательно-
Укажите ID сертификата, полученный на предыдущем шаге.
-
- (Необязательно) Сделайте GET-запрос чтобы подтвердить связи между CA и именами хостов.
После загрузки удостоверяющего центра и привязки имён хостов создайте пользовательское правило для принудительной проверки клиентского сертификата. Сделать это можно через панель управления или через API.
"expression": "(http.host in {\"<HOSTNAME_1>\" \"<HOSTNAME_2>\"} and not cf.tls_client_auth.cert_verified)",
"action": "block"Несколько CA для одного имени хоста
С одним и тем же именем хоста может быть связано несколько CA (управляемых Cloudflare или BYOCA). Для сертификатов BYOCA приоритет отдаётся сертификату, развёрнутому последним.
Если вы хотите убрать привязку к сертификату, управляемому Cloudflare, и использовать только собственные сертификаты BYOCA:
-
На панели управления Cloudflare перейдите к разделу Client Certificates страницу.
Перейдите в Client Certificates ↗ -
На Хосты раздел в Клиентские сертификаты, выпущенные Cloudflare, выберите Изменить.
-
Выберите крестик рядом с именем хоста, который нужно удалить.
-
Выберите Save для подтверждения.
- Выведите список сопоставлений имен хостов без
mtls_certificate_idпараметр.
Необходимые разрешения API-токена
Хотя бы одно из следующих права доступа токена требуется:SSL and Certificates WriteSSL and Certificates Read
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/certificate_authorities/hostname_associations" \
--request GET \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"- Скопируйте
hostnamesмассив, возвращаемый API, и обновите его, удалив имя хоста, для которого больше не должен использоваться центр сертификации, управляемый Cloudflare. - Используйте Конечная точка замены связей имен хостов без
mtls_certificate_idпараметр, чтобы выполнить действие в отношении CA, управляемого Cloudflare. Дляhostnamesиспользуйте список из предыдущего шага.
Необходимые разрешения API-токена
Хотя бы одно из следующих права доступа токена требуется:SSL and Certificates Write
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/certificate_authorities/hostname_associations" \
--request PUT \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"hostnames": [
"<UPDATED_HOSTNAME_ASSOCIATIONS>"
]
}'Удаление загруженного CA
Если вы хотите удалить ранее загруженный CA, сначала удалите все связанные с ним привязки к хостам.
-
На панели управления Cloudflare перейдите к разделу Client Certificates страницу.
Перейдите в Client Certificates ↗ -
Выберите BYOCA на вкладке.
-
Найдите CA, который нужно удалить, и нажмите на три точки рядом с ним.
-
Сначала удалите все связанные имена хостов, если они есть.
-
Выберите пункт удаления и подтвердите действие.
- Отправьте запрос к Конечная точка замены связей имен хостов, с пустым массивом для
hostnamesи указав идентификатор сертификата CA вmtls_certificate_id:
"hostnames": [],
"mtls_certificate_id": "<CERTIFICATE_ID>"- Используйте Эндпоинт удаления сертификата mTLS чтобы удалить сертификат.
Список сопоставлений имен хостов с CA
-
На панели управления Cloudflare перейдите к разделу Client Certificates страницу.
Перейдите в Client Certificates ↗ -
Выберите BYOCA на вкладке.
-
Найдите CA, который нужно просмотреть, и нажмите на три точки рядом с ним.
-
Выберите Изменение имён хостов. Сведения о сертификате панель отображает связанные имена хостов.
Используйте эндпоинт List Hostname Associations на mtls_certificate_id параметр запроса, установленный в ID сертификата загруженного CA.
Необходимые разрешения API-токена
Хотя бы одно из следующих права доступа токена требуется:SSL and Certificates WriteSSL and Certificates Read
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/certificate_authorities/hostname_associations?mtls_certificate_id=ID_FROM_STEP_2" \
--request GET \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"