Использование SNI с Edge

Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X.
Информация

Функция указания имени сервера (SNI) позволяет обслуживать несколько целевых страниц HTTPS с одного IP-адреса и порта, не требуя, чтобы эти целевые страницы использовали один и тот же сертификат TLS. Если на клиенте включена функция SNI, клиент передает имя хоста целевой конечной точки в рамках первоначального рукопожатия TLS. Это позволяет серверу TLS определить, какой сертификат TLS следует использовать для проверки запроса.

Например, если целевой объект запроса – https://example.com/request/path, клиент TLS добавляет расширение server_name в запрос подтверждения TLS, как показано ниже:

Edge поддерживает SNI для:

  • Запросы от клиентского приложения к прокси-серверу API. В этом случае Edge выступает в роли TLS-сервера.
  • Запросы от Edge к серверной части. В этом случае Edge выступает в роли клиента TLS.

Дополнительную информацию о SNI можно найти в следующих статьях:

Поддержка SNI для запроса к прокси-серверу API в Edge

Поддержка SNI для запросов к прокси API контролируется псевдонимами хостов и виртуальными хостами.

О виртуальных хостах и псевдонимах хостов

В Edge виртуальный хост определяет IP-адрес и порт или DNS-имя и порт, на которых представлен прокси-сервер API, а также URL, который приложения используют для доступа к прокси-серверу API. IP-адрес или имя DNS соответствует пограничному маршрутизатору, а номер порта – открытому порту на маршрутизаторе.

При создании виртуального хоста вы также указываете его псевдоним. Обычно это имя DNS виртуального хоста. При определении прокси-сервера API, который обрабатывает запрос, маршрутизатор сравнивает заголовок Host входящего запроса со списком доступных псевдонимов хостов, определенных всеми виртуальными хостами.

Сочетание псевдонима хоста и номера порта для виртуального хоста должно быть уникальным для всех виртуальных хостов в установке Edge. Это означает, что несколько виртуальных хостов могут использовать один и тот же номер порта, если у них разные псевдонимы хостов.

Виртуальный хост также определяет, как осуществляется доступ к прокси-серверу API: по протоколу HTTP или по зашифрованному протоколу HTTPS с использованием TLS. При настройке виртуального хоста для использования HTTPS свяжите его с хранилищем ключей, содержащим сертификат и закрытый ключ, которые используются виртуальным хостом во время рукопожатия TLS.

Дополнительную информацию о виртуальных хостах можно найти в следующих статьях:

Как SNI работает с псевдонимами хостов

SNI позволяет определить несколько виртуальных хостов на одном порту, каждый из которых будет использовать разные сертификаты TLS и ключи. Затем Edge определяет виртуальный хост и пару сертификата и ключа, используемую TLS, на основе расширения server_name в запросе на установку соединения по TLS.

Пограничный маршрутизатор считывает расширение server_name в запросе подтверждения TLS и использует его для поиска по псевдонимам хостов из всех виртуальных хостов. Если маршрутизатор обнаруживает совпадение с псевдонимом хоста, он использует сертификат TLS и ключ из виртуального хоста, связанного с псевдонимом хоста. Если совпадений не найдено, подтверждение TLS завершится неудачно.

Чтобы избежать сбоя при установлении TLS-подключения, можно задать пару сертификата и ключа по умолчанию, как описано в следующих разделах.

Как задать пару сертификата и ключа по умолчанию в Edge для облака

Apigee предоставляет сертификат TLS и закрытый ключ для поддержки HTTPS. Многие клиенты предпочитают использовать собственные сертификаты и закрытые ключи во время развертывания, но вы можете развернуть свои API, используя сертификат и ключ Apigee.

Если в Edge для облака маршрутизатор не может сопоставить заголовок SNI с псевдонимом хоста или если клиент не поддерживает SNI, маршрутизатор использует сертификат по умолчанию, предоставленный Apigee, – *.apigee.net.

Как задать пару сертификата и ключа по умолчанию в Edge для частного облака

Если в Edge для частного облака не удается найти соответствие между расширением server_name и псевдонимами хостов из всех виртуальных хостов или если запрашивающий клиент не поддерживает SNI, вы можете настроить маршрутизатор на использование сертификата и ключа из виртуального хоста по умолчанию на порту. Виртуальный хост по умолчанию определяется сочетанием названия организации, названия среды и названия виртуального хоста в следующем формате:

orgName_envName_vhName

Маршрутизатор использует сертификат/ключ из комбинации orgName_envName_vhName, которая идет первой в алфавитном порядке. Например, запрос поступает через порт 443, и для организации example в среде prod определены два виртуальных хоста:

  • virtual host name = default
  • virtual host name = test

В этом примере маршрутизатор использует сертификат и ключ из виртуального хоста с именем default, поскольку example_prod_default предшествует example_prod_test в алфавитном порядке.

Чтобы включить виртуальный хост по умолчанию:

  1. В первом узле маршрутизатора измените /opt/apigee/customer/application/router.properties. Если такого файла нет, создайте его.
  2. Добавьте в файл следующее свойство, чтобы задать виртуальный хост по умолчанию:
    conf_load_balancing_load.balancing.driver.nginx.fallback.conf.enabled=true
  3. Перезапустите маршрутизатор.
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
  4. Повторите эти шаги для всех остальных маршрутизаторов.

Вместо того чтобы использовать сертификат и ключ из виртуального хоста по умолчанию, вы можете явно задать сертификат и ключ по умолчанию на маршрутизаторе. Чтобы задать пару сертификата и ключа по умолчанию, выполните следующие действия:

  1. На первом узле маршрутизатора скопируйте сертификат и закрытый ключ в местоположение на узле маршрутизатора, доступное пользователю apigee. например /opt/apigee/customer/application (2-е издание).
  2. Измените владельца файлов на пользователя apigee:
    chown apigee:apigee /opt/apigee/customer/application/myCert.pem
    chown apigee:apigee /opt/apigee/customer/application/myKey.pem
  3. Изменить набор "/opt/apigee/customer/application/router.properties". Если такого файла нет, создайте его.
  4. Добавьте в файл следующие свойства, чтобы указать сертификат и ключ по умолчанию:
    conf_load_balancing_load.balancing.driver.nginx.fallback.server.default.ssl.template.enabled=true
    conf_load_balancing_load.balancing.driver.nginx.fallback.conf.enabled=true
  5. Чтобы указать местоположение сертификата и ключа, задайте следующие свойства в элементе router.properties:
    conf_load_balancing_load.balancing.driver.nginx.ssl.cert=/opt/apigee/customer/application/myCert.pem
    conf_load_balancing_load.balancing.driver.nginx.ssl.key=/opt/apigee/customer/application/myKey.pem
  6. Перезапустите маршрутизатор.
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
  7. Повторите эти шаги для всех остальных маршрутизаторов.

Поддержка SNI для запросов от Edge к серверной части

Edge поддерживает использование SNI от процессоров сообщений для конечных точек в Apigee Edge для облачных и частных облачных развертываний. По умолчанию SNI включен в процессорах сообщений Edge для облака и отключен в частном облаке.

Использование SNI для передачи данных в серверную часть в Edge для частного облака

Чтобы обеспечить обратную совместимость с существующими целевыми серверами, в Edge для частного облака по умолчанию отключена функция SNI. Если целевая серверная часть поддерживает SNI, вы можете включить эту функцию, как описано ниже, для вашей версии Edge.

Другие настройки Edge не требуются. Если целевая среда настроена для SNI, Edge поддерживает ее. Edge автоматически извлекает имя хоста из URL запроса и добавляет его в запрос на установление соединения TLS.

Как включить SNI между Edge и внутренним сервером для Edge версии 4.15.07.0x

Чтобы включить SNI, выполните следующие действия:

  1. На первом узле Message Processor откройте файл /opt/apigee4/conf/apigee/message-processor/system.properties в редакторе.
  2. В system.properties задайте для следующего свойства значение true:
    jsse.enableSNIExtension=true
  3. Перезапустите процессоры сообщений:
    /opt/apigee4/bin/apigee-service message-processor restart
  4. Повторите эти шаги для всех оставшихся процессоров сообщений.

Как включить SNI между Edge и внутренним сервером для Edge версии 4.16.01 и более поздних

Чтобы включить SNI, выполните следующие действия:

  1. В первом узле Message Processor измените /opt/apigee/customer/application/message-processor.properties. Если такого файла нет, создайте его.
  2. Добавьте в файл следующее свойство:
    conf_system_jsse.enableSNIExtension=true
  3. Перезапустите Message Processor:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
  4. Повторите эти шаги для всех оставшихся процессоров сообщений.