搭配邊緣使用 SNI

您目前查看的是 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,請參閱:

支援對 Edge 上 API Proxy 的要求使用 SNI

對 API Proxy 的要求是否支援 SNI,取決於主機別名和虛擬主機。

關於虛擬主機和主機別名

在 Edge 中,虛擬主機會定義 API Proxy 公開的 IP 位址和通訊埠,或 DNS 名稱和通訊埠,以及應用程式用來存取 API Proxy 的網址。IP 位址/DNS 名稱對應至 Edge 路由器,而通訊埠號碼是路由器上開啟的通訊埠。

建立虛擬主機時,您也會指定虛擬主機的別名。通常是虛擬主機的 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 for the Cloud 中定義預設憑證/金鑰組合

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

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

在 Edge for Private Cloud 中定義預設憑證/金鑰組

在 Edge for Private Cloud 中,如果系統在所有虛擬主機的 server_name 擴充功能和主機別名之間找不到相符項目,或者要求用戶端不支援 SNI,您可以設定路由器,在通訊埠上使用預設虛擬主機的憑證/金鑰。預設虛擬主機是由機構名稱、環境名稱和虛擬主機名稱組合而成,格式如下:

orgName_envName_vhName

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

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

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

如要啟用預設虛擬主機,請按照下列步驟操作:

  1. 在第一個 Router 節點上,編輯 /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. 對其餘所有路由器重複上述步驟。

您可以在 Router 上明確定義預設憑證/金鑰,而非使用預設虛擬主機的憑證/金鑰。如要定義明確的預設憑證/金鑰組,請按照下列程序操作:

  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,以鎖定 Apigee Edge for Cloud 和 Private Cloud 部署項目的端點。Edge 訊息處理器預設會在 Cloud 中啟用 SNI,並在 Private Cloud 中停用。

在 Edge for Private Cloud 中,使用 SNI 連線至後端

為與現有目標後端向後相容,Apigee 預設會停用 Edge for Private Cloud 的 SNI。如果目標後端已設定為支援 SNI,您可以為 Edge 版本啟用這項功能,方法如下所述。

無須進行其他 Edge 專屬設定。如果目標環境已設定 SNI,Edge 支援此設定。Edge 會自動從要求網址擷取主機名稱,並將其新增至 TLS 交握要求。

在 Edge 與後端之間啟用 SNI (適用於 Edge 4.15.07.0x 版)

請按照下列程序啟用 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. 對所有其餘的訊息處理器重複執行這些步驟。