Протоколы TLS и управление сертификатами
Application Delivery Controller поддерживает настройку версий протокола TLS для каждого SNI. Конфигурация включает выбор версий протокола и загрузку сертификатов.
Поддерживаются следующие версии протокола:
-
TLSv1.3
-
TLSv1.2
-
TLSv1.1
-
TLSv1
Добавление SSL-сертификата через веб-интерфейс
Для настройки TLS перейдите в раздел SSL-сертификаты и нажмите Добавить.
Откроется окно создания сертификата. Остальные настройки выполняются в этом окне.
В блоке Основная информация укажите:
-
Описание— произвольное описание сертификата. -
Метки— пары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.
|
Клиентский сертификат можно задать одним из двух способов:
|
В блоке 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