搭配邊緣使用 SNI

您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件
資訊

伺服器名稱指示 (SNI) 允許從同一個 IP 位址和通訊埠提供多個 HTTPS 目標,而不必要求這些目標使用相同的 TLS 憑證。如果用戶端啟用了 SNI,用戶端會在初始 TLS 握手程序中傳遞目標端點的主機名稱。如此一來,TLS 伺服器就能判斷要使用哪一個 TLS 憑證驗證要求。

舉例來說,如果要求目標為 https://example.com/request/path,則 TLS 用戶端會將 server_name 擴充功能新增至 TLS 握手要求,如下所示:

Edge 支援下列項目的 SNI:

  • 從用戶端應用程式對 API Proxy 發出的要求。在本情境中,Edge 會做為傳輸層安全標準 (TLS) 伺服器。
  • 從 Edge 到後端的要求。在此情況下,Edge 可做為傳輸層安全標準 (TLS) 用戶端。

如要進一步瞭解 SNI,請參閱:

支援 SNI 以向 Edge 上的 API Proxy 發出要求

向 API Proxy 發出的要求適用的 SNI 支援由主機別名和虛擬主機控管。

關於虛擬主機和主機別名

使用 Edge 時,「虛擬主機」會定義公開 API Proxy 的 IP 位址和通訊埠,或是 DNS 名稱和通訊埠,以及應用程式用來存取 API Proxy 的網址。IP 位址/DNS 名稱與邊緣路由器對應,通訊埠編號是路由器上的開放通訊埠。

建立虛擬主機時,您也可以指定虛擬主機的主機別名。通常是虛擬主機的 DNS 名稱。在決定處理要求的 API Proxy 時,路由器會將傳入要求的 Host 標頭與所有虛擬主機定義的可用主機別名清單進行比較。

針對 Edge 安裝中的所有虛擬主機,虛擬主機的主機別名和通訊埠編號組合不得重複。也就是說,如果主機別名不同,多個虛擬主機可以使用相同的通訊埠編號

虛擬主機也會定義 API Proxy 要透過 HTTP 通訊協定,或以採用 TLS 的加密 HTTPS 通訊協定存取。將虛擬主機設定為使用 HTTPS 時,請將虛擬主機與包含虛擬主機在 TLS 握手使用憑證和私密金鑰的 KeyStore 建立關聯。

如要進一步瞭解虛擬主機,請參閱:

SNI 與主機別名搭配運作的方式

SNI 可讓您在同一個通訊埠上定義多個虛擬主機,每個主機都有不同的 TLS 憑證和金鑰。接著,邊緣會根據 TLS 握手要求中的 server_name 擴充功能,判斷虛擬主機和 TLS 使用的憑證/金鑰組。

Edge Router 會讀取 TLS 握手要求中的 server_name 擴充功能,然後使用該擴充功能搜尋所有虛擬主機的主機別名。如果路由器偵測到與主機別名相符,路由器就會使用與主機別名相關聯的虛擬主機的傳輸層安全標準 (TLS) 憑證和金鑰。如果找不到相符項目,TLS 雙手攻擊就會失敗。

您可以定義預設的憑證/金鑰組 (如後續章節所述),而不是讓 TLS 握手失敗。

在 Edge 中定義雲端的預設憑證/金鑰組

Apigee 會提供 TLS 憑證和私密金鑰來支援 HTTPS。雖然許多客戶偏好在部署時使用自己的憑證和私密金鑰,但您可以使用 Apigee 憑證和金鑰來部署 API。

在 Cloud Edge 中,如果路由器無法與 SNI 標頭與主機別名相符,或是用戶端不支援 SNI,則路由器會使用 Apigee 提供的預設憑證 (*.apigee.net)。

在 Edge 中定義私有雲的預設憑證/金鑰組

在私有雲的邊緣中,如果 server_name 擴充功能與所有虛擬主機的主機別名之間不相符,或者要求的用戶端不支援 SNI,您可以將路由器設定為使用通訊埠預設虛擬主機提供的憑證/金鑰。預設虛擬主機是由機構名稱、環境名稱和虛擬主機名稱的組合定義,格式如下:

orgName_envName_vhName

路由器會使用 orgName_envName_vhName 組合中的憑證/金鑰 (依字母順序排列)。舉例來說,要求傳入通訊埠 443,且環境 prod 中的機構 example 定義了兩個虛擬主機:

  • 虛擬主機名稱 = default
  • 虛擬主機名稱 = test

在本範例中,路由器會使用名為 default 的虛擬主機的憑證/金鑰,因為 example_prod_default 的字母順序在 example_prod_test 之前。

如何啟用預設虛擬主機:

  1. 在第一個路由器節點上編輯 /opt/apigee/customer/application/router.properties。如果該檔案不存在,請建立一個。
  2. 在檔案中加入下列屬性,以便定義預設虛擬主機:
    conf_load_balancing_load.balancing.driver.nginx.fallback.conf.enabled=true
  3. 重新啟動路由器:
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
  4. 針對其餘所有路由器重複上述步驟。

除了使用預設虛擬主機的憑證/金鑰,您可以在路由器上明確定義預設憑證/金鑰。請使用下列程序定義明確的預設憑證/金鑰組:

  1. 在第一個路由器節點上,將憑證和私密金鑰複製到 Apigee 使用者可存取的路由器節點上的位置。例如 /opt/apigee/customer/application
  2. 將檔案的擁有權變更為「apigee. user」:
    chown apigee:apigee /opt/apigee/customer/application/myCert.pem
    chown apigee:apigee /opt/apigee/customer/application/myKey.pem
  3. 編輯 /opt/apigee/customer/application/router.properties。如果該檔案不存在,請建立一個。
  4. 在檔案中加入下列屬性,即可指定預設的憑證/金鑰:
    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
  5. 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
  6. 重新啟動路由器:
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
  7. 針對其餘所有路由器重複上述步驟。

支援從 Edge 傳送至後端的要求 SNI

Edge 支援使用訊息處理器的 SNI 來將 SNI 應用至雲端和私有雲部署的 Apigee Edge 目標端點。根據預設,系統會在雲端的邊緣訊息處理器上啟用 SNI,並在 Private Cloud 中停用。

在私有雲使用 Edge 中的後端

針對私有雲的邊緣,如要回溯相容於現有的目標後端,Apigee 預設會停用 SNI。如果目標後端設為支援 SNI,您可以按照下方說明為 Edge 版本啟用這項功能。

無須採取其他 Edge 專屬設定。如果您已經設定了 SNI 的目標環境,Edge 支援該環境。Edge 會自動從要求網址擷取主機名稱,並將該主機名稱新增至 TLS 握手要求。

為 Edge 4.15.07.0x 版 Edge 和後端之間啟用 SNI

請按照下列程序啟用 SNI:

  1. 在第一個訊息處理器節點中,透過編輯器開啟 /opt/apigee4/conf/apigee/message-processor/system.properties 檔案。
  2. system.properties 中將下列屬性設為 true:
    jsse.enableSNIExtension=true
  3. 重新啟動訊息處理器:
    /opt/apigee4/bin/apigee-service message-processor restart
  4. 對其餘所有訊息處理器重複執行這些步驟。

為 Edge 4.16.01 以上版本啟用 Edge 和後端之間的 SNI

請按照下列程序啟用 SNI:

  1. 在第一個「訊息處理器」節點上編輯 /opt/apigee/customer/application/message-processor.properties。 如果該檔案不存在,請建立一個。
  2. 在檔案中新增下列屬性:
    conf_system_jsse.enableSNIExtension=true
  3. 重新啟動訊息處理器:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
  4. 對其餘所有訊息處理器重複執行這些步驟。