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

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

Функция Server Name Indication (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-имя соответствует маршрутизатору Edge, а номер порта — это открытый порт на маршрутизаторе.

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

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

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

Дополнительную информацию о виртуальных хостах см. в:

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

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

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

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

Определение пары сертификат/ключ по умолчанию в Edge для облака

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

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

Определение пары сертификат/ключ по умолчанию в Edge для частного облака

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

orgName_envName_vhName

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

  • виртуальное имя хоста = default
  • виртуальное имя хоста = 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. Измените права доступа к файлам на пользователя 'apigee.user':
    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 в частном облаке, чтобы обеспечить обратную совместимость с существующими целевыми бэкэндами, Apigee по умолчанию отключила SNI. Если ваш целевой бэкэнд настроен на поддержку SNI, вы можете включить эту функцию, как описано ниже для вашей версии Edge.

Никакой дополнительной настройки, специфичной для Edge, не требуется. Если ваша целевая среда настроена для SNI, Edge поддерживает её. Edge автоматически извлекает имя хоста из URL-адреса запроса и добавляет его к запросу на установление TLS-соединения.

Включите SNI между Edge и бэкэндом для версии Edge 4.15.07.0x.

Для включения SNI выполните следующую процедуру:

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