您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件。 資訊
您可以將入口網站設為使用 TLS。入口網站的 TLS 設定程序取決於您的入口網站部署方式:
- Cloud:從 Pantheon 或 Acquia (入口網站的雲端式託管服務) 設定 TLS。
- Apigee Edge for Private Cloud:在託管入口網站的伺服器上設定傳輸層安全標準 (TLS)。
TLS 和入口網站
下圖顯示入口網站使用傳輸層安全標準 (TLS) 的兩個位置:
- 用於入口網站和 Edge Management API 之間的通訊。
入口網站無法做為獨立系統。而是會將入口網站使用的大部分資訊儲存在 Edge 中。Edge 可將 Edge 部署在雲端或地端部署環境中,當做私有雲安裝。必要時,入口網站會向 Edge Management API 發出 HTTP 或 HTTPS 要求,藉此擷取資訊或傳送資訊。
建立入口網站時,您必須執行的第一步之一是指定 Edge Management API 網址。視 Edge Management API 的設定方式而定,網址可以使用傳輸層安全標準 (TLS)。詳情請參閱「建立開發人員入口網站」。 - 用於開發人員和入口網站之間的通訊。
使用 Developer Services 入口網站部署 API 時,開發人員請登入入口網站註冊應用程式並接收 API 金鑰。登入憑證和 API 金鑰是您可以透過 HTTPS 傳送的專屬資訊,以確保安全。這類專屬資訊應透過 HTTPS 傳送。
您為此情境設定 TLS 的方式取決於您部署入口網站的方式:Cloud 或 Apigee Edge 以私有雲。以下各節將說明這兩種情況。
設定入口網站和 Edge Management API 之間的 TLS
Edge Management API 的設定會決定通訊是否能使用傳輸層安全標準 (TLS)。如果 Edge Management API 設為使用 TLS,入口網站就能使用 HTTPS。否則,入口網站會透過 HTTP 與 Edge 通訊。因此,入口網站開發人員只需要瞭解 Edge 的設定方式,就能設定入口網站和 Edge 之間的連線。
如需設定 Edge Management API 連線的程序,請參閱「建立開發人員入口網站」一文。
雲端式 Edge 版本
如果您的入口網站連線至雲端式 Edge ,則 Apigee 會預先設定 Edge Management API 的網址來使用 TLS。設定入口網站時,您可以透過網址 https://api.enterprise.apigee.com/v1 存取 Edge Management API。
安裝 Edge 的私有雲
如要安裝 Private Cloud 的 Private Cloud,Edge Management API 的網址格式為:
http://EdgePrivateCloudIp:8080/v1
或:
https://EdgePrivateCloudIp:TLSport/v1
其中 EdgePrivateCloudIp 是 Edge Management Server 伺服器的 IP 位址,TLSport 則是 Edge Management API 的 TLS 通訊埠。舉例來說,視 Edge 設定而定,通訊埠編號可能是 8443,甚至是 8080。
設定開發人員和入口網站之間的 TLS
在開發人員與入口網站之間設定 TLS 的方式,取決於您部署入口網站的方式:Cloud 或 Apigee Edge for Private Cloud。
雲端式入口網站
Pantheon
Pantheon 會透過 Pantheon Global CDN 和 Let's Encrypt,為平台上的所有網站提供免費自動 HTTPS。另請參閱 Pantheon 的 Global CDN 上的 HTTPS。
Acquia
如要使用 Acquia 啟用 TLS/SSL,請參閱啟用 SSL。私人雲端入口網站邊緣
所有 Apigee 建議的入口網站私人雲端安裝作業,入口網站都必須位於負載平衡器後方,如下所示:
因此,針對地端部署安裝,您有兩種方法可以設定 TLS:
- 在負載平衡器上設定 TLS:在負載平衡器本身 (而非入口網站) 上設定 TLS。因此用於設定 TLS 的程序取決於負載平衡器。詳情請參閱負載平衡器的說明文件。
- 在入口網站本身設定 TLS:如有需要,您可以在代管入口網站的網路伺服器上設定 TLS。詳情請參閱設定入口網站以使用 HTTPS。
您必須先取得自己的 TLS 憑證,才能將入口網站部署至實際工作環境。
設定其他 TLS 設定
您可以編輯 sites/default/settings.local.php (雲端) 或 sites/default/settings.php (Private Cloud) 檔案,藉此變更入口網站的 TLS 設定。
編輯檔案時,請新增 ini_set() 函式的執行個體來設定屬性。 如要進一步瞭解這個函式,請參閱:http://php.net/manual/en/function.ini-set.php。
您可以在 sites/default/settings.local.php (雲端) 或 sites/default/settings.php (Private Cloud) 檔案中設定下列屬性:
- cookie_httponly:(建議) 指定只能透過 HTTP 通訊協定存取 Cookie。請將這項屬性設為:
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 (雲端) 或 sites/default/settings.php (Private Cloud) 檔案。由於負載平衡器不會自動轉換 HTML 頁面的內容,因此程式碼可確保傳送至用戶端的所有連結的開頭都是 https://。
如要透過負載平衡器設定傳輸層安全標準 (TLS),請在 sites/default/settings.local.php (雲端) 或 sites/default/settings.php (Private 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 (雲端) 或 sites/default/settings.php (Private Cloud) 檔案,將所有入口網站流量重新導向至 HTTPS。視您重新導向至相同主機名稱還是多個主機名稱的 HTTPS 而定,需要更新的項目會有所不同。
重新導向至相同主機名稱的 HTTPS
將下列程式碼新增到您的 sites/default/settings.local.php (雲端) 或 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 檔案 (雲端) 或 sites/default/settings.php 檔案 (Private 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; // 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; } }