Использование TLS на портале

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

Вы можете настроить портал для использования TLS. Процедура настройки TLS для портала зависит от того, как вы развернули портал:

  • Облако : настройте TLS из Pantheon или Acquia, облачных служб хостинга для портала.
  • Apigee Edge для частного облака : настройте TLS локально на сервере, на котором размещен портал.

TLS и портал

На следующем изображении показаны два места, где портал использует TLS:

  1. Для связи между порталом и API управления Edge.

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

    При создании портала одним из первых шагов, которые необходимо выполнить, является указание URL-адреса API управления Edge. В зависимости от того, как настроен API управления Edge, этот URL-адрес может использовать TLS. Дополнительную информацию см. в разделе Создание портала разработчика .
  2. Для связи между разработчиками и порталом.

    Когда вы используете портал служб разработчиков для развертывания своих API, ваши разработчики входят на портал, чтобы регистрировать приложения и получать ключи API. Учетные данные для входа и ключ API — это конфиденциальная информация, которую вы хотите отправить по протоколу HTTPS для обеспечения их безопасности. Конфиденциальную информацию такого типа следует отправлять по протоколу HTTPS.

    Способ настройки TLS для этого сценария зависит от того, как вы развернули портал: облако или Apigee Edge для частного облака. В следующих разделах описаны оба сценария.

Настройка TLS между порталом и API управления Edge

Конфигурация API управления Edge определяет, может ли связь использовать TLS. Если API управления Edge настроен на использование TLS, портал может использовать HTTPS. В противном случае портал взаимодействует с Edge через HTTP. Поэтому как разработчику портала вам нужно знать только, как настроен Edge для установки соединения между порталом и Edge.

Процедуру, которую вы используете для настройки подключения к API управления Edge, см. в разделе Создание портала разработчика .

Облачная версия Edge

Если ваш портал подключается к облачной версии Edge, то URL-адрес API управления Edge предварительно настраивается Apigee для использования TLS. При настройке портала вы получаете доступ к API управления Edge, используя URL-адрес https://api.enterprise.apigee.com/v1 .

Установка Edge в частном облаке

Для установки Edge в частном облаке URL-адрес API управления Edge имеет следующий вид:
http:// EdgePrivateCloudIp : 8080/v1
или:
https:// EdgePrivateCloudIp : TLSport /v1

где EdgePrivateCloudIp — это IP-адрес сервера Edge Management Server, а TLSport — это порт TLS для API управления Edge. Например, номер порта может быть 8443 или даже 8080 в зависимости от конфигурации Edge.

Настройка TLS между разработчиками и порталом

Способ настройки TLS между разработчиками и порталом зависит от того, как вы развернули портал: облако или Apigee Edge для частного облака.

Облачные порталы

Пантеон

Pantheon предоставляет бесплатный автоматизированный HTTPS для всех сайтов на своей платформе через Pantheon Global CDN и с помощью Let's Encrypt . См. также HTTPS в глобальной CDN Pantheon .

Аквиа

Чтобы включить TLS/SSL с помощью Acquia, см. Включение SSL .

Edge для порталов частного облака

Для всех рекомендованных Apigee установок портала в частном облаке требуется, чтобы портал находился за балансировщиком нагрузки, как показано ниже:

Таким образом, для локальных установок у вас есть два варианта настройки TLS:

  • Настройте TLS на балансировщике нагрузки . Настройте TLS на самом балансировщике нагрузки, а не на портале. Таким образом, процедура, которую вы используете для настройки TLS, зависит от балансировщика нагрузки. Дополнительную информацию см. в документации по вашему балансировщику нагрузки.
  • Настройте TLS на самом портале . При необходимости вы можете настроить TLS на веб-сервере, на котором размещен портал. Дополнительную информацию см. в разделе Настройка портала для использования HTTPS .

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

Настройка дополнительных параметров TLS

Вы можете отредактировать файл site/default/settings.local.php (облако) или site/default/settings.php (частное облако), чтобы внести изменения в конфигурацию TLS для портала.

При редактировании файла добавьте экземпляры функции ini_set() для установки свойства. Дополнительную информацию об этой функции см.: http://php.net/manual/en/function.ini-set.php .

Вы можете установить следующие свойства в файле site/default/settings.local.php (облако) или site/default/settings.php (частное облако):

  • cookie_httponly : (рекомендуется) Указывает, что файл cookie доступен только по протоколу HTTP. Установите это свойство как:

    ini_set('session.cookie_httponly', правда);
  • session.cookie_secure — (необязательно) Указывает, что файлы cookie могут отправляться только через защищенные соединения. Однако это означает, что весь контент должен передаваться через HTTPS. Если этот параметр включен, сайт не будет работать по HTTP. Установите это свойство как:

    ini_set('session.cookie_secure', правда);
  • gc_maxlifetime и cookie_lifetime : (необязательно) gc_lifeteime указывает количество секунд, по истечении которых данные потенциально могут быть очищены, а cookie_lifetime указывает время жизни файла cookie в секундах. Установите эти свойства как:

    ini_set('session.gc_maxlifetime', 3600);
    ini_set('session.cookie_lifetime', 3600);

Дополнительные сведения о настройке TLS между порталом разработчика и клиентами см. в разделе «Включение SSL для безопасной связи HTTPS» на сайте документации Pantheon.

Настройка TLS с балансировщиками нагрузки

Для повышения производительности балансировщики нагрузки иногда настраиваются на завершение TLS. При прекращении TLS балансировщики нагрузки расшифровывают сообщения, отправленные через https://, и пересылают сообщения на внутренние серверы через http:// . Это экономит внутренние серверы на расшифровке самих сообщений https:// .

Если балансировщики нагрузки пересылают незашифрованные http-сообщения на серверы в том же центре обработки данных, безопасность не является проблемой. Однако если балансировщики нагрузки пересылают сообщения через http:// на серверы за пределами центра обработки данных, например на ваш портал разработчиков Apigee, сообщения не зашифрованы, что открывает дыру в безопасности.

Если ваш портал разработчика находится за балансировщиками нагрузки, использующими терминацию TLS, и вы хотите, чтобы весь трафик обслуживался через https:// , страницы веб-сайта должны будут содержать только ссылки https:// , и вам нужно будет добавить следующий код в свой Файл site/default/settings.local.php (облако) или site/default/settings.php (частное облако) портала разработчика. Поскольку балансировщик нагрузки не преобразует содержимое HTML-страниц автоматически, код гарантирует, что все ссылки, передаваемые клиенту, начинаются с https:// .

Чтобы настроить TLS с балансировщиками нагрузки, добавьте следующие строки в файл site/default/settings.local.php (облако) или site/default/settings.php (частное облако):

// Only check for SSL if we are not using PHP from the command line.
if (PHP_SAPI != 'cli') {
  // Assume we can't detect SSL unless proven otherwise.
  $can_detect_ssl = FALSE;

  // Set HTTPS URL of portal 
  $base_url = 'https://developers.myCo.com';

  if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) || (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on')) {
    $can_detect_ssl = TRUE;
  }

  if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https') {
    $_SERVER['HTTPS'] = 'on';
  }

  if ($can_detect_ssl && $_SERVER['HTTPS'] != 'on') {
    header('HTTP/1.0 301 Moved Permanently');
    // You could optionally substitute a canonical server name for $_SERVER['HTTP_HOST'] here.
    header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
    exit;
  }
}

Для получения дополнительной информации см.:

Перенаправление трафика портала на HTTPS

Вы можете перенаправить весь трафик портала на HTTPS, обновив файл site/default/settings.local.php (облако) или site/default/settings.php (частное облако). Требуемые обновления различаются в зависимости от того, перенаправляете ли вы на HTTPS на одно и то же имя хоста или на несколько имен хостов.

Перенаправление на HTTPS на том же имени хоста

Добавьте следующий код в файл site/default/ settings.local.php (облако) или site/default/ settings.php (частное облако), чтобы перенаправить весь трафик портала на HTTPS с тем же именем хоста (например, *.devportal). .apigee.io ).

В этом сценарии, если разработчик посещает ваш портал live-example.devportal.apigee.io , но ему необходимо получить доступ к сертификату, который был загружен для devportal.example.com , запрос завершится неудачно.

// Only check for SSL if we are not using PHP from the command line.
if (PHP_SAPI != 'cli') {
  // Assume we can't detect SSL unless proven otherwise.
  $can_detect_ssl = FALSE;

  if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) || (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on')) {
    $can_detect_ssl = TRUE;
  }

  if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https') {
    $_SERVER['HTTPS'] = 'on';
  }

  if ($can_detect_ssl && $_SERVER['HTTPS'] != 'on') {
    header('HTTP/1.0 301 Moved Permanently');
    header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
    exit;
  }
}

Перенаправление на HTTPS на нескольких именах хостов

Добавьте следующий код в файл site/default/ settings.local.php (облако) или файл site/default/ settings.php (частное облако), чтобы перенаправить весь трафик портала на HTTPS на нескольких именах хостов.

  // Only check for SSL if we are not using PHP from the command line.
if (PHP_SAPI != 'cli') {
  // Assume we can't detect SSL unless proven otherwise.
  $can_detect_ssl = FALSE;
  // Assume we are not forcing a redirect until proven otherwise.
  $force_redirect = FALSE;

  if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) || (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on')) {
    $can_detect_ssl = TRUE;
  }

  if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https') {
    $_SERVER['HTTPS'] = 'on';
  }
  
  if ($can_detect_ssl && $_SERVER['HTTPS'] != 'on') {
    // We will force a redirect because HTTPS is required.
    $force_redirect = TRUE;
  }
  
  // This works on Pantheon only; the constant is undefined elsewhere.
  switch (PANTHEON_ENVIRONMENT) {
    case 'dev':
      $canonical_hostname = 'dev.devportal.example.com';
      break;
    case 'test':
      $canonical_hostname = 'test.devportal.example.com';
      break;
    case 'live':
      $canonical_hostname = 'devportal.example.com';
      break;
    default:
      $canonical_hostname = strtolower($_SERVER['HTTP_HOST']);
      break;
  }
  if ($canonical_hostname != strtolower($_SERVER['HTTP_HOST'])) {
    // We will force a redirect because hostname is not canonical.
    $force_redirect = TRUE;
  }

  if ($force_redirect) {
    header('HTTP/1.0 301 Moved Permanently');
    header('Location: https://' . $canonical_hostname . $_SERVER['REQUEST_URI']);
    exit;
  }
}