Настройка TLS от Edge до серверной части (облако и частное облако)

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

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

TargetEndpoint — это исходящий эквивалент ProxyEndpoint. TargetEndpoint функционирует как HTTP-клиент от Edge к бэкэнд-сервису. При создании API-прокси вы можете настроить его на использование нуля или более TargetEndpoint.

Узнать больше:

Настройка целевой конечной точки или целевого сервера

Для настройки TargetEndpoint отредактируйте XML-объект, определяющий TargetEndpoint. Вы можете отредактировать TargetEndpoint, отредактировав XML-файл, определяющий TargetEndpoint в вашем API-прокси, или отредактировать его в пользовательском интерфейсе управления Edge.

Чтобы отредактировать TargetEndpoint с помощью пользовательского интерфейса управления Edge:

  1. Войдите в пользовательский интерфейс управления Edge по адресу https://enterprise.apigee.com .
  2. Выберите имя API-прокси для обновления.
  3. Выберите вкладку «Разработка» .
  4. В разделе «Целевые конечные точки» выберите «по умолчанию» .
  5. В кодовой области отображается определение TargetEndpoint, аналогичное приведенному ниже:
    <TargetEndpoint name="default">
      <Description/>
      <FaultRules/>
      <Flows/>
      <PreFlow name="PreFlow">
        <Request/>
        <Response/>
      </PreFlow>
      <PostFlow name="PostFlow">
        <Request/>
        <Response/>
      </PostFlow>
      <HTTPTargetConnection>
        <Properties/>
        <SSLInfo>
          <Enabled>true</Enabled>
          <TrustStore>ref://myTrustStoreRef</TrustStore>
        </SSLInfo>
        <URL>https://mocktarget.apigee.net</URL>
      </HTTPTargetConnection>
    </TargetEndpoint>
  6. Настройте хранилище доверенных сертификатов, как описано ниже в разделе «О настройке TLS с бэкэндом» .
  7. Внесите необходимые изменения и сохраните прокси. Если API-прокси уже развернут, сохранение приведет к его повторному развертыванию с новыми настройками.

Обратите внимание, что определение TargetEndpoint содержит свойство name . Значение свойства name используется для настройки определения ProxyEndpoint API-прокси таким образом, чтобы оно использовало TargetEndpoint. Дополнительную информацию см. в справочнике по настройке API-прокси .

Конфигурации TargetEndpoints можно настроить таким образом, чтобы они ссылались на TargetServer, а не на явный целевой URL. Конфигурация TargetServer отделяет конкретные URL-адреса конечных точек от конфигураций TargetEndpoint. TargetServers используются для поддержки балансировки нагрузки и отказоустойчивости между несколькими экземплярами бэкэнд-серверов.

Ниже приведён пример определения TargetServer:

<TargetServer name="target1">
  <Host>mocktarget.apigee.net</Host>
  <Port>80</Port>
  <IsEnabled>true</IsEnabled>
</TargetServer> 

В определении TargetEndpoint объект TargetServer указывается по имени в элементе <HTTPTargetConnection> . Вы можете настроить один или несколько именованных объектов TargetServer, как показано ниже.

<TargetEndpoint name="default">
  ...
  <HTTPTargetConnection>
    <LoadBalancer>
      <Server name="target1" />
      <Server name="target2" />
    </LoadBalancer>
    <Path>/test</Path>
  </HTTPTargetConnection>
  ...
</TargetEndpoint>

Дополнительную информацию см. в разделе «Балансировка нагрузки между серверными бэкэндами» .

О настройке TLS с бэкэндом

Прежде чем настраивать TLS-доступ к бэкэнду, следует учесть два важных момента:

  1. По умолчанию Edge не проверяет сертификат бэкэнда. Для настройки проверки сертификата в Edge необходимо создать хранилище доверенных сертификатов.
  2. Используйте ссылку для указания хранилища ключей или доверенных сертификатов, используемого Edge.

Оба аспекта рассмотрены ниже.

Определение хранилища доверенных сертификатов для обеспечения проверки сертификатов.

При выполнении TLS-запроса через TargetEndpoint или TargetServer, Edge по умолчанию не проверяет полученный от бэкэнд-сервера TLS-сертификат. Это означает, что Edge не проверяет его следующим образом:

  • Сертификат подписан доверенным центром сертификации.
  • Срок действия сертификата не истёк.
  • Сертификат содержит общее имя. Если общее имя присутствует, Edge не проверяет, совпадает ли оно с именем хоста, указанным в URL-адресе.

Для настройки Edge на проверку сертификата бэкэнда необходимо:

  1. Создайте хранилище доверенных сертификатов в Edge.
  2. Загрузите сертификат сервера или цепочку сертификатов в хранилище доверенных сертификатов. Если сертификат сервера подписан третьей стороной, вам потребуется загрузить в хранилище доверенных сертификатов полную цепочку сертификатов, включая корневой сертификат центра сертификации. Центры сертификации, которым не доверяют неявно, отсутствуют.
  3. Добавьте хранилище доверенных сертификатов в определение TargetEnpoint или TargetServer.

Более подробную информацию можно найти в разделах Keystores и Truststores .

Например:

<TargetEndpoint name="default">
  …
  <HTTPTargetConnection>
    <SSLInfo>
      <Enabled>true</Enabled>
      <TrustStore>ref://myTrustStoreRef</TrustStore>
    </SSLInfo>
    <URL>https://myservice.com</URL>
  </HTTPTargetConnection>
  …
</TargetEndpoint>

Использование ссылки на хранилище ключей или хранилище доверенных сертификатов.

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

Компания Apigee настоятельно рекомендует использовать ссылки на хранилище ключей и хранилище доверенных сертификатов в определении TargetEndpoints или TargetServer. Преимущество использования ссылки заключается в том, что для обновления TLS-сертификата достаточно просто изменить ссылку, указав на другое хранилище ключей или хранилище доверенных сертификатов.

Ссылки на хранилища ключей и доверенных сертификатов в определениях TargetEndpoints или TargetServer работают так же, как и для виртуальных хостов .

Преобразование объекта TargetEndpoint или TargetServer для использования ссылки.

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

  1. Обновите определение TargetEnpoint или TargetServer, чтобы использовать ссылку.
  2. Перезапустите обработчики сообщений Edge:
    • Для клиентов публичного облака обратитесь в службу поддержки Apigee Edge для перезапуска обработчиков сообщений.
    • Для клиентов, использующих частное облако , перезапускайте обработчики сообщений Edge по одному.
  3. Убедитесь, что ваш TargetEndpoint или TargetServer работает корректно.

Настройка одностороннего TLS-соединения с бэкэнд-сервером.

При использовании определения TargetEndpoint настройка одностороннего доступа TLS от Edge (TLS-клиент) к бэкэнд-серверу (TLS-сервер) не требует дополнительной настройки на Edge. Правильная настройка TLS — задача бэкэнд-сервера.

Вам нужно лишь убедиться, что элемент <URL> в определении TargetEndpoint ссылается на серверную службу по протоколу HTTPS и что вы включили TLS:

<TargetEndpoint name="default">
  …
  <HTTPTargetConnection>
    <SSLInfo>
      <Enabled>true</Enabled>
    </SSLInfo>
    <URL>https://myservice.com</URL>
  </HTTPTargetConnection>
  …
</TargetEndpoint>

Если вы используете TargetServer для определения серверной части, включите TLS в определении TargetServer:

<TargetServer name="target1">
  <Host>mocktarget.apigee.net</Host>
  <Port>443</Port>
  <IsEnabled>true</IsEnabled>
  <SSLInfo>
    <Enabled>true</Enabled>
  </SSLInfo> 
</TargetServer> 

Однако, если вы хотите, чтобы Edge проверял сертификат бэкэнда, вам необходимо создать хранилище доверенных сертификатов, содержащее сертификат бэкэнда или цепочку сертификатов. Затем вы указываете хранилище доверенных сертификатов в определении TargetEndpoint:

<TargetEndpoint name="default">
  …
  <HTTPTargetConnection>
    <SSLInfo>
      <Enabled>true</Enabled>
      <TrustStore>ref://myTrustStoreRef</TrustStore>
    </SSLInfo>
    <URL>https://myservice.com</URL>
  </HTTPTargetConnection>
  …
</TargetEndpoint>

Или в определении TargetServer:

<TargetServer name="target1">
  <Host>mockserver.apigee.net</Host>
  <Port>443</Port>
  <IsEnabled>true</IsEnabled>
  <SSLInfo>
    <Enabled>true</Enabled>
    <TrustStore>ref://myTrustStoreRef</TrustStore>
  </SSLInfo> 
</TargetServer>

Для настройки одностороннего TLS:

  1. Чтобы проверить подлинность сертификата бэкэнда , создайте хранилище доверенных сертификатов в Edge и загрузите сертификат бэкэнда или цепочку центров сертификации, как описано в разделах «Хранилища ключей» и «Хранилища доверенных сертификатов» . В этом примере, если вам необходимо создать хранилище доверенных сертификатов, назовите его myTrustStore .
  2. Если вы создали хранилище доверенных сертификатов, используйте следующий POST-запрос API для создания ссылки с именем myTrustStoreRef на созданное вами выше хранилище доверенных сертификатов:

    curl -X POST  -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
      -d '<ResourceReference name="myTrustStoreRef">
        <Refers>myTrustKeystore</Refers>
        <ResourceType>KeyStore</ResourceType>
      </ResourceReference>' -u email:password
    
  3. Используйте пользовательский интерфейс управления Edge для обновления определения TargetEndpoint для прокси-сервера API (или, если вы определяете прокси-сервер API в формате XML, отредактируйте XML-файлы для прокси):
    1. Войдите в пользовательский интерфейс управления Edge по адресу https://enterprise.apigee.com .
    2. В меню пользовательского интерфейса управления Edge выберите API .
    3. Выберите имя API-прокси для обновления.
    4. Выберите вкладку «Разработка» .
    5. В разделе «Целевые конечные точки» выберите «по умолчанию» .
    6. В области кода отредактируйте элемент <HTTPTargetConnection> , добавив элемент <SSLInfo> . Убедитесь, что указана правильная ссылка на хранилище доверенных сертификатов, и установите значение <Enabled> в true:
      <TargetEndpoint name="default">
        …
        <HTTPTargetConnection>
          <SSLInfo>
            <Enabled>true</Enabled>
            <TrustStore>ref://myTrustStoreRef</TrustStore>
          </SSLInfo>
          <URL>https://myservice.com</URL>
        </HTTPTargetConnection>
        …
      </TargetEndpoint>
    7. Сохраните настройки API-прокси. Если API-прокси уже развернут, сохранение настроек приведет к его повторному развертыванию с новыми параметрами.

Настройка двустороннего TLS-соединения с бэкэнд-сервером.

Если вы хотите обеспечить двустороннюю связь TLS между Edge (TLS-клиент) и бэкэнд-сервером (TLS-сервером):

  • Создайте хранилище ключей в Edge и загрузите туда сертификат и закрытый ключ Edge.
  • Для проверки подлинности сертификата бэкэнда создайте в Edge хранилище доверенных сертификатов, содержащее сертификат и цепочку центров сертификации, полученные от бэкэнд-сервера.
  • Обновите параметр TargetEndpoint во всех API-прокси, которые ссылаются на бэкэнд-сервер, чтобы настроить доступ по протоколу TLS.

Использование псевдонима ключа для указания сертификата хранилища ключей.

В одном хранилище ключей можно определить несколько сертификатов, каждый со своим псевдонимом. По умолчанию Edge использует первый сертификат, определенный в хранилище ключей.

При желании вы можете настроить Edge на использование сертификата, указанного в свойстве <KeyAlias> . Это позволяет определить одно хранилище ключей для нескольких сертификатов, а затем выбрать тот, который вы хотите использовать, в определении TargetServer. Если Edge не может найти сертификат с псевдонимом, соответствующим <KeyAlias> , он использует действие по умолчанию — выбор первого сертификата в хранилище ключей.

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

Настройка двустороннего TLS

Для настройки двустороннего TLS:

  1. Создайте хранилище ключей в Edge и загрузите сертификат и закрытый ключ, используя процедуру, описанную здесь: Хранилища ключей и хранилища доверенных сертификатов . В этом примере создайте хранилище ключей с именем myTestKeystore , используя псевдоним myKey для сертификата и закрытого ключа.
  2. Используйте следующий POST-запрос API для создания ссылки с именем myKeyStoreRef на созданное вами выше хранилище ключей:

    curl -X POST  -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
    -d '<ResourceReference name="myKeyStoreRef">
        <Refers>myTestKeystore</Refers>
        <ResourceType>KeyStore</ResourceType>
    </ResourceReference>' -u email:password
    

    В ссылке указывается имя хранилища ключей и тип ссылки как KeyStore .

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

    curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/myKeyStoreRef /
    -u email:password
    
  3. Если вы хотите проверить подлинность сертификата бэкэнда , создайте хранилище доверенных сертификатов (truststore) в Edge и загрузите сертификат и цепочку центров сертификации, как описано здесь: Хранилища ключей и хранилища доверенных сертификатов . В этом примере, если вам нужно создать хранилище доверенных сертификатов, назовите его myTrustStore .
  4. Если вы создали хранилище доверенных сертификатов, используйте следующий POST-запрос API для создания ссылки с именем myTrustStoreRef на созданное вами выше хранилище доверенных сертификатов:

    curl -X POST  -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
    -d '<ResourceReference name="myTrustStoreRef">
        <Refers>myTrustKeystore</Refers>
        <ResourceType>KeyStore</ResourceType>
    </ResourceReference>' -u email:password
    
  5. Используйте пользовательский интерфейс управления Edge для обновления определения TargetEndpoint для прокси-сервера API (или, если вы определяете прокси-сервер API в формате XML, отредактируйте XML-файлы для прокси):
    1. Войдите в пользовательский интерфейс управления Edge по адресу https://enterprise.apigee.com .
    2. В меню пользовательского интерфейса управления Edge выберите API .
    3. Выберите имя API-прокси для обновления.
    4. Выберите вкладку «Разработка» .
    5. В разделе «Целевые конечные точки» выберите «по умолчанию» .
    6. В области кода отредактируйте элемент <HTTPTargetConnection> , добавив элемент <SSLInfo> . Убедитесь, что указаны правильные хранилище ключей и псевдонимы ключей, а также установите для элементов <Enabled> и <ClientAuthEnabled> значение true:
      <TargetEndpoint name="default">
        ...
        <HTTPTargetConnection>
          <SSLInfo>
            <Enabled>true</Enabled>
            <ClientAuthEnabled>true</ClientAuthEnabled>
            <KeyStore>ref://myKeyStoreRef</KeyStore>
            <KeyAlias>myKey</KeyAlias>
          </SSLInfo>
          <URL>https://myservice.com</URL>
        </HTTPTargetConnection>
        ...
      </TargetEndpoint>
    7. Сохраните настройки API-прокси. Если API-прокси уже развернут, сохранение настроек приведет к его повторному развертыванию с новыми параметрами.

Для получения дополнительной информации о доступных параметрах в <TargetEndpoint> , включая использование переменных для передачи значений <SSLInfo> в TargetEndpoint, см. справочник по настройке прокси-сервера API .

Включение SNI

Edge поддерживает использование Server Name Indication (SNI) от обработчиков сообщений для целевых конечных точек в развертываниях Apigee Edge для облака и для частного облака.

Для Edge в частном облаке, чтобы обеспечить обратную совместимость с существующими целевыми бэкэндами, Apigee по умолчанию отключил SNI. Если ваш целевой бэкэнд настроен на поддержку SNI, вы можете включить эту функцию. Подробнее см. раздел «Использование SNI с Edge» .