您正在查看 Apigee Edge 說明文件。
前往 Apigee X 說明文件。 info
伺服器名稱指示 (SNI) 可讓多個 HTTPS 目標透過相同的 IP 位址和通訊埠提供服務,而不需要這些目標使用相同的 TLS 憑證。在用戶端啟用 SNI 後,用戶端會在初始 TLS 握手期間傳遞目標端點的主機名稱。這可讓 TLS 伺服器決定應使用哪個 TLS 憑證來驗證要求。
舉例來說,如果要求目標是 https://example.com/request/path
,則 TLS 用戶端會在 TLS 握手要求中加入 server_name
擴充功能,如下所示:
Edge 支援下列項目的 SNI:
- 從用戶端應用程式傳送至 API Proxy 的要求。在這種情況下,Edge 會充當 TLS 伺服器
- Edge 傳送至後端的要求。在這種情況下,Edge 會充當 TLS 用戶端。
如要進一步瞭解 SNI,請參閱:
- https://en.wikipedia.org/wiki/Server_Name_Indication
- http://blog.layershift.com/sni-ssl-production-ready/
支援 Edge 上 API Proxy 要求的 SNI
針對 API Proxy 要求的 SNI 支援功能,由主機別名和虛擬主機控制。
關於虛擬主機和主機別名
在 Edge 中,虛擬主機會定義 IP 位址和通訊埠,或 DNS 名稱和通訊埠,並在這些位置公開 API 代理程式,進而擴充應用程式用來存取 API 代理程式的網址。IP 位址/DNS 名稱對應至 Edge Router,而通訊埠號碼則是 Router 上的開放通訊埠。
建立虛擬主機時,您也需要指定虛擬主機的主機別名。通常是虛擬主機的 DNS 名稱。在決定要處理要求的 API proxy 時,路由器會將傳入要求的 Host
標頭,與所有虛擬主機定義的可用主機別名清單進行比較。
虛擬主機的主機別名和通訊埠編號組合,在 Edge 安裝環境中的所有虛擬主機中不得重複。也就是說,如果有多個虛擬主機使用不同的主機別名,這些虛擬主機可以使用相同的通訊埠編號。
虛擬主機也會定義 API Proxy 是使用 HTTP 通訊協定,還是使用 TLS 加密的 HTTPS 通訊協定存取。將虛擬主機設定為使用 HTTPS 時,請將虛擬主機與金鑰庫建立關聯,該金鑰庫包含虛擬主機在 TLS 握手期間使用的憑證和私密金鑰。
如要進一步瞭解虛擬主機,請參閱:
SNI 如何與主機別名搭配運作
透過 SNI,您可以在同一個通訊埠上定義多個虛擬主機,每個虛擬主機都有不同的 TLS 憑證和金鑰。接著,Edge 會根據 TLS 握手要求中的 server_name
擴充功能,判斷 TLS 使用的虛擬主機和憑證/金鑰組。
Edge Router 會讀取 TLS 握手要求中的 server_name
擴充功能,然後根據該擴充功能搜尋所有虛擬主機的主機別名。如果路由器偵測到與主機別名相符的項目,就會使用與主機別名相關聯的虛擬主機中的 TLS 憑證和金鑰。如果找不到相符項目,TLS 握手就會失敗。
您可以定義預設的憑證/金鑰組,避免 TLS 握手失敗,如後續章節所述。
在 Edge 中定義 Cloud 的預設憑證/金鑰組合
Apigee 會提供 TLS 憑證和私密金鑰,以支援 HTTPS。雖然許多客戶在部署時偏好使用自己的憑證和私密金鑰,但您也可以使用 Apigee 憑證和金鑰部署 API。
在 Edge for Cloud 中,如果路由器無法將 SNI 標頭與主機別名配對,或是用戶端不支援 SNI,路由器就會使用 Apigee 提供的預設憑證,也就是 *.apigee.net。
在 Edge for Private Cloud 中定義預設憑證/金鑰組
在私有雲端的 Edge 中,如果 server_name
擴充功能與所有虛擬主機的主機別名不相符,或是要求的用戶端不支援 SNI,您可以設定 Router 使用通訊埠上預設虛擬主機的憑證/金鑰。預設虛擬主機是由機構名稱、環境名稱和虛擬主機名稱組合而成,格式如下:
orgName_envName_vhName
路由器會使用 orgName_envName_vhName 組合中排在字母順序最前面的憑證/金鑰。舉例來說,要求會透過通訊埠 443 傳入,且在環境 prod
中為組織 example
定義了兩個虛擬主機:
- 虛擬主機名稱 =
default
- 虛擬主機名稱 =
test
在本例中,路由器會使用名為 default
的虛擬主機的憑證/金鑰,因為 example_prod_default
在字母順序上排在 example_prod_test
之前。
如要啟用預設虛擬主機,請按照下列步驟操作:
- 在第一個 Router 節點上編輯
/opt/apigee/customer/application/router.properties
。如果該檔案不存在,請建立該檔案。 - 將下列屬性新增至檔案,即可定義預設的虛擬主機:
conf_load_balancing_load.balancing.driver.nginx.fallback.conf.enabled=true
- 重新啟動路由器:
/opt/apigee/apigee-service/bin/apigee-service edge-router restart
- 針對所有剩餘的路由器重複執行這些步驟。
您可以明確在 Router 上定義預設憑證/金鑰,而非使用預設虛擬主機的憑證/金鑰。請按照下列程序定義明確的預設憑證/金鑰組合:
- 在第一個 Router 節點上,將憑證和私密金鑰複製到 Router 節點中 apigee 使用者可存取的位置。例如
/opt/apigee/customer/application
。 - 將檔案的擁有權變更為「apigee. user:
chown apigee:apigee /opt/apigee/customer/application/myCert.pem
chown apigee:apigee /opt/apigee/customer/application/myKey.pem
- 編輯
/opt/apigee/customer/application/router.properties
。如果該檔案不存在,請建立該檔案。 - 將下列屬性新增至檔案,即可指定預設的憑證/金鑰:
conf_load_balancing_load.balancing.driver.nginx.fallback.server.default.ssl.template.enabled=true
conf_load_balancing_load.balancing.driver.nginx.fallback.conf.enabled=true - 在
router.properties
中設定下列屬性,指定憑證和金鑰的位置:conf_load_balancing_load.balancing.driver.nginx.ssl.cert=/opt/apigee/customer/application/myCert.pem conf_load_balancing_load.balancing.driver.nginx.ssl.key=/opt/apigee/customer/application/myKey.pem
- 重新啟動路由器:
/opt/apigee/apigee-service/bin/apigee-service edge-router restart
- 針對所有剩餘的路由器重複執行這些步驟。
支援從 Edge 傳送至後端的要求的 SNI
Edge 支援使用來自訊息處理器的 SNI,以便在 Apigee Edge for Cloud 和 Private Cloud 部署中指定端點。根據預設,系統會在雲端的 Edge Message Processor 上啟用 SNI,並在私有雲中停用。
在 Private Cloud 的 Edge 中使用 SNI 連線至後端
針對私有雲端的 Edge,為了與現有目標後端相容,Apigee 預設會停用 SNI。如果目標後端已設定為支援 SNI,您可以按照下文所述,為 Edge 的版本啟用這項功能。
不需要其他 Edge 專屬設定。如果目標環境已針對 SNI 進行設定,Edge 就會支援 SNI。Edge 會自動從要求網址中擷取主機名稱,並將其新增至 TLS 握手要求。
在 Edge 4.15.07.0x 版本中,在 Edge 和後端之間啟用 SNI
請按照下列程序啟用 SNI:
- 在第一個 Message Processor 節點上,在編輯器中開啟檔案
/opt/apigee4/conf/apigee/message-processor/system.properties
。 - 在
system.properties
中將下列屬性設為 true:jsse.enableSNIExtension=true
- 重新啟動訊息處理工具:
/opt/apigee4/bin/apigee-service message-processor restart
- 針對所有剩餘的 Message Processor 重複執行這些步驟。
在 Edge 4.16.01 以上版本中,啟用 Edge 與後端之間的 SNI
請按照下列程序啟用 SNI:
- 在第一個 Message Processor 節點上,編輯
/opt/apigee/customer/application/message-processor.properties
。 如果該檔案不存在,請建立該檔案。 - 在檔案中新增下列屬性:
conf_system_jsse.enableSNIExtension=true
- 重新啟動訊息處理器:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
- 針對所有剩餘的訊息處理工具重複執行這些步驟。