查看 Apigee Edge 說明文件。
前往
Apigee X說明文件。 資訊
您可以將入口網站設為使用傳輸層安全標準 (TLS)。入口網站的 TLS 設定程序取決於您部署入口網站的方式:
- 雲端:從 Pantheon 或 Acquia (入口網站的雲端式託管服務) 設定 TLS。
- Apigee Edge for Private Cloud:在託管入口網站的伺服器中設定傳輸層安全標準 (TLS)。
TLS 和入口網站
下圖顯示入口網站使用 TLS 的兩個位置:
- 用於入口網站和 Edge Management API 之間的通訊。
入口網站無法做為獨立系統。相反地,入口網站使用的大部分資訊實際上會儲存在 Edge 上,因此 Edge 可部署到雲端或內部部署,做為 Private Cloud 安裝。必要時,入口網站會向 Edge Management API 發出 HTTP 或 HTTPS 要求,以擷取資訊或傳送資訊。
建立入口網站時,您必須執行的第一步是指定 Edge Management API 網址。視 Edge Management API 的設定方式而定,這個網址可以使用 TLS。詳情請參閱「開始建構開發人員入口網站」。 - 用於開發人員與入口網站之間的通訊。
當您使用「開發人員服務」入口網站部署 API 時,您的開發人員必須登入入口網站來註冊應用程式並接收 API 金鑰。登入憑證和 API 金鑰是您希望透過 HTTPS 傳送,以確保安全性。這類專屬資訊必須透過 HTTPS 傳送。
針對此情境設定 TLS 的方式取決於您部署入口網站的方式:雲端或私有雲的 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 安裝 Edge,則 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 的方式,取決於您部署入口網站的方式:雲端或私有雲的 Apigee Edge。
雲端入口網站
Pantheon
Pantheon 透過 Pantheon Global CDN 並使用 Let's Encrypt 為其平台上所有網站提供免費的自動 HTTPS。另請參閱 Pantheon 全球 CDN 上的 HTTPS。
Acquia
如要使用 Acquia 啟用 TLS/SSL,請參閱啟用 SSL。Edge for Private Cloud 入口網站
使用 Apigee 建議的入口網站私有雲安裝作業時,入口網站都必須位於負載平衡器後方,如下所示:
因此,針對地端部署安裝作業,您有兩種設定 TLS 的方法:
- 在負載平衡器上設定 TLS:請在負載平衡器本身設定 TLS,而非在入口網站上設定。因此,用來設定 TLS 的程序會因負載平衡器而異。詳情請參閱負載平衡器的說明文件。
- 在入口網站上設定 TLS:如有需要,您可以在代管入口網站的網路伺服器上設定 TLS。根據預設,Apigee 會安裝 Apache 網路伺服器。如要瞭解如何為 Apache 設定 TLS,請參閱啟用 HTTP 安全 (HTTPS) 一文 。
您必須先取得自己的 TLS 憑證,才能將入口網站部署至正式環境。
指定其他 TLS 設定
您可以編輯 sites/default/settings.local.php (雲端) 或 sites/default/settings.php (Private Cloud) 檔案,變更入口網站的 TLS 設定。
在編輯檔案時,新增 ini_set() 函式的執行個體來設定屬性。如要進一步瞭解這個函式,請參閱:ini_set。
您可以在 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_maslifetime 和 cookie_lifetime:(選用) gc_lifeteime 會指定 Cookie 的生命週期秒數,而 cookie_lifetime 則指定 Cookie 的效期 (以秒為單位)。將這些屬性設為:
ini_set('session.gc_maxlifetime', 3600);
ini_set('session.cookie_lifetime', 3600);
如要進一步瞭解如何在開發人員入口網站和用戶端之間設定 TLS,請參閱 Pantheon 文件網站上的「為安全的 HTTPS 通訊啟用 SSL」一文。
設定負載平衡器的 TLS
為提高效能,負載平衡器有時會設定執行 TLS 終止作業。啟用 TLS 終止功能時,負載平衡器會解密透過 https:// 傳送的訊息,並透過 http:// 將郵件轉送至後端伺服器。這樣可以節省後端伺服器自行解密 https:// 訊息的負擔。
如果負載平衡器將未加密的 http 訊息轉送至同一個資料中心內的伺服器,則不必擔心安全性的問題。不過,如果負載平衡器透過 http:// 將訊息轉寄至資料中心以外的伺服器 (例如 Apigee 開發人員入口網站),訊息就不會經過加密,因而開啟安全性漏洞。
如果開發人員入口網站位於使用 TLS 終止功能的負載平衡器後方,而且您希望所有流量透過 https:// 提供,那麼網站上只需包含 https:// 連結,且您必須將下列程式碼新增至開發人員入口網站 sites/default/settings.local.php (cloud) 或 sites/default/settings.php (Private Cloud) 檔案。由於負載平衡器不會自動轉換 HTML 網頁的內容,因此程式碼可確保傳遞至用戶端的所有連結開頭都是 https://。
如要為負載平衡器設定 TLS,請在 sites/default/settings.local.php (cloud) 或 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
您可以更新 sites/default/settings.local.php (雲端) 或 sites/default/settings.php (Private Cloud) 檔案,將所有入口網站流量重新導向至 HTTPS。根據您要重新導向至相同主機名稱的 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 檔案 (雲端) 或 sites/default/settings.php 檔案 (Private Cloud),以便將流量重新導向至多個主機名稱上的 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; } }