在门户上使用 TLS

<ph type="x-smartling-placeholder"></ph> 您正在查看 Apigee Edge 文档。
转到 Apigee X 文档
信息

您可以将门户配置为使用 TLS。门户的 TLS 配置过程 取决于您部署门户的方式:

  • :通过 Pantheon 或 Acquia(云端托管)配置 TLS 为门户服务
  • 适用于私有云的 Apigee Edge:在服务器上配置本地 TLS 托管门户

TLS 和门户

下图显示了该门户在两个位置使用 TLS:

  1. 用于门户与 Edge Management API 之间的通信。

    门户不能作为独立系统运行。相反,网站使用的大部分信息 该门户实际上存储在 Edge 上,而 Edge 可以部署在云端或 作为 Private Cloud 安装在本地。如有必要,门户会发出 HTTP 或 HTTPS 向 Edge Management API 发送检索信息或发送信息的请求。

    创建入口时,您必须执行的首要步骤之一是指定 Edge Management API根据 Edge Management API 的配置方式,该网址 可以使用 TLS请参阅创建 开发者门户了解详情。
  2. 用于开发者与门户之间的通信。

    当您使用开发者服务门户部署 API 时,您的开发者会登录 来注册应用并接收 API 密钥。登录凭据和 API 密钥 您希望通过 HTTPS 发送的专有信息,以确保其安全性。这个 应通过 HTTPS 发送

    为此场景配置 TLS 的方式取决于您部署 门户:云端或适用于私有云的 Apigee Edge。以下部分介绍了 两种情况。

在门户之间配置 TLS 和 Edge Management API

Edge Management API 的配置决定着能否使用 TLS。如果将 Edge Management API 配置为使用 TLS,则此门户可以使用 HTTPS。 否则,门户将通过 HTTP 与 Edge 进行通信。因此,作为门户开发者 只需要知道 Edge 的配置方式,以便在门户和 Edge。

如需了解用于配置与 Edge Management API 的连接的过程,请参阅 创建开发者 门户网站

基于云的 Edge 版本

如果您的门户连接到基于云的 Edge,则此 Edge 的网址 Management API 已由 Apigee 预先配置为使用 TLS。配置门户时,您可以访问 Edge Management API(使用网址 https://api.enterprise.apigee.com/v1)。

Edge 的私有云安装

在安装 Edge 的私有云中,Edge Management API 的网址位于 表单:
http://EdgePrivateCloudIp:8080/v1
或者:
https://EdgePrivateCloudIp:TLSport/v1

其中,EdgePrivateCloudIp 是边缘管理的 IP 地址 “服务器服务器”和 TLSport 是 Edge Management API 的 TLS 端口。 例如,根据 Edge 配置,端口号可能是 8443 甚至是 8080。

在开发者和 门户

在开发者和门户之间配置 TLS 的方式取决于您部署 门户:云端或适用于私有云的 Apigee Edge。

云端门户

万神殿

Pantheon 通过 Pantheon 全球 CDNLet's Encrypt 为其平台上的所有网站提供免费的自动 HTTPS。另请参阅 Pantheon 全球 CDN 上的 HTTPS

Acquia

要使用 Acquia 启用 TLS/SSL,请参阅启用 SSL

专用 Edge 云门户

该门户的所有 Apigee 推荐私有云安装都需要该门户 如下所示:

因此,对于本地安装,您可以通过以下两种方式配置 TLS:

  • 在负载平衡器上配置 TLS:在负载平衡器上配置 TLS 而不是在门户上因此,您配置 TLS 的过程 具体取决于负载平衡器如需了解详情,请参阅关于负载平衡器的文档 信息。
  • 在门户本身上配置 TLS:如有必要,您可以在 托管该门户的网络服务器请参阅配置要使用的门户 HTTPS

您必须先获取自己的 TLS 证书,然后才能将该门户部署到生产环境中 环境

正在配置 其他 TLS 设置

您可以修改 sites/default/settings.local.php (cloud) 或 sites/default/settings.php(不公开) Cloud)文件对门户的 TLS 进行配置更改。

编辑文件时,添加 ini_set() 函数的实例以设置属性。 如需详细了解此函数,请参阅:http://php.net/manual/en/function.ini-set.php

您可以在 sites/default/settings.local.php (cloud) 中设置以下属性 或 sites/default/settings.php(不公开) Cloud)文件:

  • cookie_httponly: (推荐)将该 Cookie 指定为仅可通过 HTTP 协议访问。设置此项 属性为:

    ini_set('session.cookie_httponly', true);
  • session.cookie_secure -(可选)指定 Cookie 只能通过安全连接发送。不过, 意味着所有内容都必须通过 HTTPS 提供。如果您启用了此设置,该网站就不会 通过 HTTP 运行将此属性设置为:

    ini_set('session.cookie_secure', true);
  • gc_maxlifetimecookie_lifetime: (可选)gc_lifeteime 指定可以清理数据的秒数,以及 cookie_lifetime 用于指定 的有效期(以秒为单位)。将这些属性设置为:

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

如需详细了解如何在开发者门户和客户端之间设置 TLS,请参阅 在 Pantheon 文档网站上启用 SSL 以实现安全的 HTTPS 通信

正在配置 TLS 与负载平衡器

为了获得更好的性能,负载平衡器有时会配置为执行 TLS 终止。 借助 TLS 终止,负载平衡器可以解密通过 https:// 发送的消息,并将这些消息转发到后端 通过 http:// 访问服务器。这样可以节省 解密 https:// 消息本身的开销。

如果负载平衡器将未加密的 http 消息转发到同一数据中心内的服务器, 不是问题但是,如果负载平衡器通过 http:// 将消息转发到数据之外的服务器, (例如您的 Apigee 开发者门户),则消息未加密,这会打开一个 一个安全漏洞

如果您的开发者门户位于使用 TLS 终结功能的负载平衡器后面,并且您 希望所有流量都通过 https:// 传送,则网页需要 仅包含 https:// 链接 您需要将以下代码添加到您的开发者门户 sites/default/settings.local.php (cloud) 或 sites/default/settings.php(不公开) Cloud) 文件。由于负载平衡器不会自动转换 HTML 网页,该代码可确保传递到客户端的所有链接都以 https:// 开头。

要使用负载平衡器配置 TLS,请将以下行添加到 sites/default/settings.local.php (cloud) 或 sites/default/settings.php(不公开) Cloud)文件:

// 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

您可以通过更新 sites/default/settings.local.php (cloud),将所有门户流量都重定向到 HTTPS 或 sites/default/settings.php(不公开) Cloud) 文件。所需的更新取决于您是否在同一页面重定向到 HTTPS 主机名或多个主机名。

重定向到 HTTPS 位于同一个主机名上

将以下代码添加到您的 sites/default/settings.local.php (cloud) 或 sites/default/settings.php(私有云)文件复制到 重定向到同一主机名(例如 *.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 文件 (cloud) 或 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;
  }
}