Протоколы TLS и управление сертификатами

Application Delivery Controller поддерживает настройку версий протокола TLS для каждого SNI. Конфигурация включает выбор версий протокола и загрузку сертификатов.

Поддерживаются следующие версии протокола:

  • TLSv1.3

  • TLSv1.2

  • TLSv1.1

  • TLSv1

Добавление SSL-сертификата через веб-интерфейс

Для настройки TLS перейдите в раздел SSL-сертификаты и нажмите Добавить.

crypto protocols 1

Откроется окно создания сертификата. Остальные настройки выполняются в этом окне.

crypto protocols 2

В блоке Основная информация укажите:

  • Описание — произвольное описание сертификата.

  • Метки — пары key:value, которые можно использовать для поиска и фильтрации объектов в интерфейсе. Метки являются метаданными и не влияют на работу TLS, маршрутизацию или выбор сертификата.

  • Тип — тип сертификата. Выберите Серверный для сертификата, который применяется к соединению клиент-Application Delivery Controller и Клиентский для соединений Application Delivery Controller-upstream.

  • Статус — состояние сертификата. Чтобы сертификат применялся, выберите Включён.

  • TLS-протоколы — допустимые версии протокола TLS для этого сертификата.

В блоке SNI укажите доменные имена, для которых должен применяться сертификат:

  • SNI (одиночный) — основное доменное имя, например example.com.

  • SNI (список) — список дополнительных доменных имён. Введите SNI и нажмите Enter.

В блоке Сертификат и приватный ключ укажите:

  • Сертификат (PEM) — содержимое сертификата в формате PEM.

  • Приватный ключ (PEM) — закрытый ключ в формате PEM.

После создания сертификату присваивается уникальный ID.

Настройка TLS для соединения с upstream

TLS можно использовать для защищённого соединения между нашей системой и upstream:

клиент → HTTPS → Application Delivery Controller → HTTPS → upstream

Если upstream требует клиентский сертификат от Application Delivery Controller, укажите его в настройках маршрута. Для этого откройте раздел Маршруты и перейдите к редактированию существующего маршрута или созданию нового. Нужные параметры находятся в блоке TLS.

crypto protocols 2'1

Клиентский сертификат можно задать одним из двух способов:

  • загрузить пару Сертификат клиента и Ключ клиента;

  • указать ID сертификата ранее созданного сертификата.

В блоке TLS настройте параметры соединения с upstream:

  • Верификация — включает проверку сертификата upstream при TLS-соединении с ним.

  • Сертификат клиента — клиентский сертификат в формате PEM, который наша система предъявляет upstream.

  • Ключ клиента — приватный ключ клиентского сертификата в формате PEM.

  • ID сертификата — ID ранее созданного сертификата. Используйте этот способ, если сертификат уже добавлен в разделе Сертификаты.

Применение серверного сертификата к соединению клиент-Application Delivery Controller

Наша система выбирает серверный сертификат по SNI во время TLS-handshake. Для этого при создании сертификата укажите доменное имя в поле SNI (одиночный) или добавьте доменные имена в поле SNI (список).

Сертификат применяется к HTTPS-соединению, если SNI в запросе клиента совпадает с SNI, указанным в настройках включённого серверного сертификата.

Настройка TLS через API

Пример создания SSL-объекта через API:

curl http://127.0.0.1:9180/apisix/admin/ssls/1 \
-H "X-API-KEY: $admin_key" -X PUT -d '
{
    "cert": "'"$(cat server.crt)"'",
    "key": "'"$(cat server.key)"'",
    "snis": ["test.com"],
    "ssl_protocols": [
        "TLSv1.1"
    ]
}'

Список допустимых версий протокола по умолчанию задаётся в конфигурационном файле:

/usr/local/apisix/conf/config.yml

Пример конфигурации:

apisix:
  ssl:
    enable: true
    ssl_protocols: TLSv1 TLSv1.1 TLSv1.2 TLSv1.3