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

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

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

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

TLS и портал

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

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

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

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

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

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

Настройка 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, а TLSport — это TLS-порт для API управления Edge. Например, номер порта может быть 8443 или даже 8080 в зависимости от конфигурации Edge.

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

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

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

Пантеон

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

Аквиа

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

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

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

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

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

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

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

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

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

Следующие параметры можно задать в файле sites/default/settings.local.php (для облачной среды) или sites/default/settings.php (для частной облачной среды):

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

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

    ini_set('session.cookie_secure', true);
  • gc_maxlifetime и cookie_lifetime : (Необязательно) gc_lifetime задает количество секунд, по истечении которых данные потенциально могут быть удалены, а 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:// , и вам необходимо добавить следующий код в файл sites/default/settings.local.php (облачная версия) или sites/default/settings.php (версия Private Cloud) вашего портала разработчика. Поскольку балансировщик нагрузки не преобразует содержимое HTML-страниц автоматически, этот код гарантирует, что все ссылки, передаваемые клиенту, начинаются с https:// .

Для настройки TLS с балансировщиками нагрузки добавьте следующие строки в файл sites/default/settings.local.php (облачная среда) или sites/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, обновив файл sites/default/settings.local.php (облачная версия) или sites/default/settings.php (версия для частного облака). Необходимые обновления зависят от того, перенаправляете ли вы на HTTPS с одного и того же имени хоста или с нескольких.

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

Добавьте следующий код в файл sites/default/ settings.local.php (облачная версия) или sites/default/ settings.php (версия Private Cloud), чтобы перенаправить весь трафик портала на 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 для нескольких имен хостов

Добавьте следующий код в файл sites/default/ settings.local.php (облачная версия) или sites/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;
  }
}