在入口網站上使用傳輸層安全標準 (TLS)

查看 Apigee Edge 說明文件。
前往 Apigee X說明文件
資訊

您可以將入口網站設為使用傳輸層安全標準 (TLS)。入口網站的 TLS 設定程序 視您部署入口網站的方式而定:

  • 雲端:從 Pantheon 或 Acquia (雲端式代管服務) 設定 TLS 付費服務
  • Apigee Edge for Private Cloud:在伺服器上設定傳輸層安全標準 (TLS) 用於託管入口網站
,瞭解如何調查及移除這項存取權。

TLS 和入口網站

下圖顯示入口網站使用 TLS 的兩個位置:

  1. 用於入口網站和 Edge Management API 之間的通訊。

    入口網站無法做為獨立系統。相反地 入口網站實際上儲存在 Edge 上,邊緣可部署在雲端或 部署在地端部署系統之中,以私有雲的方式安裝。入口網站會在必要時建立 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 Management API 連線的程序,請參閱 建立開發人員 入口網站

雲端式 Edge 版本

如果您的入口網站連線至雲端型 Edge 版本,則邊緣網址 Apigee 預先將 management API 設為使用傳輸層安全標準 (TLS)。設定入口網站時 Edge Management API (使用網址:https://api.enterprise.apigee.com/v1)。

Edge 的私人雲端安裝

如要為 Private Cloud 安裝 Edge,Edge Management API 的網址位於 表單:
http://EdgePrivateCloudIp:8080/v1
或:
https://EdgePrivateCloudIp:TLSport/v1

其中 EdgePrivateCloudIp 是 Edge Management 的 IP 位址 伺服器伺服器和 TLSport 是 Edge Management API 的 TLS 通訊埠。 舉例來說,根據 Edge 設定,通訊埠編號可以是 8443,甚至是 8080。

設定開發人員和 入口網站

開發人員與入口網站之間的 TLS 設定方式,取決於您部署 入口網站:雲端或 Apigee Edge

雲端入口網站

Pantheon

Pantheon 透過 Pantheon Global CDN 並使用 Let's Encrypt 為其平台上所有網站提供免費的自動 HTTPS。另請參閱 Pantheon 全球 CDN 上的 HTTPS

Acquia

如要使用 Acquia 啟用 TLS/SSL,請參閱啟用 SSL

不公開的邊緣 Cloud 入口網站

使用 Apigee 推薦的入口網站私有雲安裝作業時,都必須使用入口網站 負載平衡器後端,如下所示:

因此,針對地端部署安裝作業,您有兩種設定 TLS 的方法:

  • 在負載平衡器上設定 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 會指定 Cookie 的生命週期 (以秒為單位)將這些屬性設為:

    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 (Private Cloud) 檔案 重新導向至相同主機名稱上的所有入口網站流量 (例如 *.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 檔案 (私有雲) 至 重新導向至多個主機名稱上的所有入口網站流量。

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