查看 Apigee Edge 說明文件。
前往
Apigee X說明文件。 資訊
您可以將入口網站設為使用傳輸層安全標準 (TLS)。入口網站的 TLS 設定程序 視您部署入口網站的方式而定:
- 雲端:從 Pantheon 或 Acquia (雲端式代管服務) 設定 TLS 付費服務
- Apigee Edge for Private Cloud:在伺服器上設定傳輸層安全標準 (TLS) 用於託管入口網站
TLS 和入口網站
下圖顯示入口網站使用 TLS 的兩個位置:
- 用於入口網站和 Edge Management API 之間的通訊。
入口網站無法做為獨立系統。相反地 入口網站實際上儲存在 Edge 上,邊緣可部署在雲端或 部署在地端部署系統之中,以私有雲的方式安裝。入口網站會在必要時建立 HTTP 或 HTTPS 要求 Edge Management API 擷取資訊或傳送資訊。
建立入口網站時,您必須執行的第一步是指定 Edge Management API根據 Edge Management API 的設定方式,這個網址會有所不同 可以使用 TLS請參閱建立 開發人員入口網站。 - 用於開發人員與入口網站之間的通訊。
您的開發人員使用「開發人員服務」入口網站部署 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_maxlifetime
和 cookie_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://drupal.org/node/425990
- https://drupal.org/node/313145
- http://drupal.stackexchange.com/questions/102091/drupal-behind-a-ssl-offloading-reverse-proxy-is-this-config-correct
正在將入口網站流量重新導向至 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; } }