INTEGRITY Документация

Bring your own CA for mTLS

На этой странице объясняется, как управлять клиентскими сертификатами, которые не были выпущены центром сертификации Cloudflare. Более общий обзор можно найти в учебный курс «mTLS в Cloudflare».

Bring your own CA (BYOCA) особенно полезен, если у вас уже реализован mTLS и клиентские сертификаты уже установлены на устройствах.

Доступность

Требования к сертификату CA

Когда вы загружаете свой CA, Cloudflare проверяет сертификат на соответствие определённым требованиям.

Настройка mTLS с собственным CA

  1. На панели управления Cloudflare перейдите к разделу Client Certificates страницу.

    Перейдите в Client Certificates ↗
  2. Выберите Добавить сертификат.

  3. В Центр сертификации раскрывающемся списке выберите Bring your own CA.

  4. Загрузите файл сертификата CA (в кодировке PEM) и укажите имя для CA.

  5. Выберите Продолжение.

  6. На Привязка имён хостов странице введите имя хоста, которое должно использовать этот CA для проверки mTLS, и выберите Add для каждого из них. Также можно пропустить этот шаг и связать имена хостов позже.

  7. Выберите Save для подтверждения.

  1. Используйте Эндпоинт для загрузки сертификата mTLS чтобы загрузить корневой сертификат CA.
  • ca требуется логическое значение

    • Установите значение true чтобы указать, что сертификат является сертификатом CA.
  • certificates строка обязательно

    • Вставьте содержимое из .pem файл, связанный с сертификатом ЦС, отформатированный как единая строка с \n заменяя разрывы строк.
  • name строка необязательно

    • Укажите уникальное имя для сертификата CA.
  • private_key строка необязательно

    • Вставьте содержимое из .pem файл, связанный с закрытым ключом сертификата, отформатированный как единая строка с \n заменяя разрывы строк.
  1. Запишите ID сертификата (id) которое возвращается в ответе API.
  2. Используйте Конечная точка замены связей имен хостов чтобы включить mTLS для каждого имени хоста, которое должно использовать этот CA для проверки mTLS. Используйте следующие параметры:
  • hostnames требуется массив

    • Перечислите имена хостов, которые будут использовать этот CA для проверки клиентских сертификатов.

  • mtls_certificate_id строка обязательно

    • Укажите ID сертификата, полученный на предыдущем шаге.

  1. (Необязательно) Сделайте 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:

  1. На панели управления Cloudflare перейдите к разделу Client Certificates страницу.

    Перейдите в Client Certificates ↗
  2. На Хосты раздел в Клиентские сертификаты, выпущенные Cloudflare, выберите Изменить.

  3. Выберите крестик рядом с именем хоста, который нужно удалить.

  4. Выберите Save для подтверждения.

  1. Выведите список сопоставлений имен хостов без mtls_certificate_id параметр.

Необходимые разрешения API-токена

Хотя бы одно из следующих права доступа токена требуется:
  • SSL and Certificates Write
  • SSL 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"
  1. Скопируйте hostnames массив, возвращаемый API, и обновите его, удалив имя хоста, для которого больше не должен использоваться центр сертификации, управляемый Cloudflare.
  2. Используйте Конечная точка замены связей имен хостов без 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, сначала удалите все связанные с ним привязки к хостам.

  1. На панели управления Cloudflare перейдите к разделу Client Certificates страницу.

    Перейдите в Client Certificates ↗
  2. Выберите BYOCA на вкладке.

  3. Найдите CA, который нужно удалить, и нажмите на три точки рядом с ним.

  4. Сначала удалите все связанные имена хостов, если они есть.

  5. Выберите пункт удаления и подтвердите действие.

  1. Отправьте запрос к Конечная точка замены связей имен хостов, с пустым массивом для hostnames и указав идентификатор сертификата CA в mtls_certificate_id:
  "hostnames": [],
  "mtls_certificate_id": "<CERTIFICATE_ID>"
  1. Используйте Эндпоинт удаления сертификата mTLS чтобы удалить сертификат.

Список сопоставлений имен хостов с CA

  1. На панели управления Cloudflare перейдите к разделу Client Certificates страницу.

    Перейдите в Client Certificates ↗
  2. Выберите BYOCA на вкладке.

  3. Найдите CA, который нужно просмотреть, и нажмите на три точки рядом с ним.

  4. Выберите Изменение имён хостов. Сведения о сертификате панель отображает связанные имена хостов.

Используйте эндпоинт List Hostname Associations на mtls_certificate_id параметр запроса, установленный в ID сертификата загруженного CA.

Необходимые разрешения API-токена

Хотя бы одно из следующих права доступа токена требуется:
  • SSL and Certificates Write
  • SSL 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"