設定邊緣訊息處理器和後端伺服器之間的 SNI

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

伺服器名稱指示 (SNI) 允許從同一個 IP 位址和通訊埠提供多個 HTTPS 後端伺服器,而不必要求這些後端伺服器使用相同的傳輸層安全標準 (TLS) 憑證。是 TLS 通訊協定的擴充功能。當用戶端啟用 SNI 時,用戶端會在初始 TLS 握手時傳遞後端伺服器的主機名稱。如此一來,TLS 伺服器就能判斷要使用哪項 TLS 憑證驗證來自用戶端的要求。

根據預設,Private Cloud 邊緣的訊息處理器元件會停用 SNI,藉此確保與現有後端伺服器回溯相容。如果您的後端伺服器設定為支援 SNI,則必須在訊息處理器元件中啟用 SNI。否則,透過 Apigee Edge 發出的 API 要求會失敗,並顯示 TLS 握手失敗

本文件將說明如何執行下列操作:

事前準備

已啟用 SNI 的伺服器識別

本節說明如何判斷後端伺服器是否已啟用 SNI。

  1. 執行 openssl 指令,並嘗試在不傳送伺服器名稱的情況下連線至相關伺服器主機名稱 (Edge Router 或後端伺服器),如下所示:
    openssl s_client -connect hostname:port
    
  2. 您可能會收到憑證,有時甚至可能會在 openssl 指令中發現握手失敗,如下所示:
    CONNECTED(00000003) 9362:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-64.50.6/src/ssl/s23_clnt.c:593
    
  3. 執行 openssl 指令,並傳送伺服器名稱,嘗試連線至相關伺服器主機名稱 (邊緣路由器或後端伺服器),如下所示:
    openssl s_client -connect hostname:port -servername hostname
    
  4. 如果您在步驟 1 中收到握手失敗,或在步驟 1 和步驟 2 取得不同憑證,就表示指定的伺服器已啟用 SNI。
  5. 如果您要為多個後端伺服器進行這項驗證,請為每個後端伺服器重複上述步驟。

如果您發現一或多個已啟用 SNI 的後端伺服器,就必須按照以下說明在「訊息處理器」元件中啟用 SNI。否則,透過 Apigee Edge 發出的 API 要求會失敗,並顯示 TLS 握手失敗

在邊緣訊息處理器與後端伺服器之間啟用 SNI

本節說明如何在邊緣訊息處理器與後端伺服器之間啟用 SNI。您可以透過訊息處理器元件上的 jsse.enableSNIExtension 屬性啟用 SNI。如要在訊息處理器上設定任何屬性,請根據「如何設定 Edge」一節所述的語法使用權杖。

如要啟用訊息處理器的 SNI,請執行下列步驟:

  1. 找出 jsse.enableSNIExtension 屬性的權杖
  2. 在訊息處理器上啟用 SNI

找出 jsse.enableSNIExtension 屬性的權杖

下列步驟說明如何找出 jsse.enableSNIExtension 屬性的權杖:

  1. 使用下列指令,在訊息處理器來源目錄 /opt/apigee/edge-message-processor/source 中搜尋 jsse.enableSNIExtension 屬性:
    grep -ri "jsse.enableSNIExtension" /opt/apigee/edge-message-processor/source
    
  2. 這個指令的輸出內容顯示訊息處理器屬性 jsse.enableSNIExtension 的權杖,如下所示:
    /opt/apigee/edge-message-processor/source/conf/system.properties:jsse.enableSNIExtension={T}conf_system_jsse.enableSNIExtension{/T}
    

    其中 {T}{/T} 標記之間的字串是您可以在訊息處理器的 .properties 檔案中設定的憑證名稱。

    因此,屬性 jsse.enableSNIExtension 的權杖如下:

    conf_system_jsse.enableSNIExtension
    

在訊息處理器上啟用 SNI

下列步驟說明如何在 Apigee 訊息處理器元件中啟用 SNI。

  1. 在訊息處理器電腦上,在編輯器中開啟下列檔案。如果尚未存在,請建立一個。
    /opt/apigee/customer/application/message-processor.properties
    

    舉例來說,如要使用 vi 開啟檔案,請輸入下列指令:

    vi /opt/apigee/customer/application/message-processor.properties
    

  2. 在屬性檔案中加入以下格式的一行:
    conf_system_jsse.enableSNIExtension=true
    
  3. 儲存變更。
  4. 請確認這個屬性檔案的擁有者為 apigee 使用者,如下所示:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
    
  5. 按照下方說明重新啟動訊息處理器:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
    
  6. 確認訊息處理器的 SNI 設定已更新。
  7. 如果您有多個訊息處理器,請對所有訊息處理器重複上述步驟。

在邊緣訊息處理器與後端伺服器之間停用 SNI

一般來說,啟用 SNI 後應該不會出現任何問題。不過,如果您在啟用 SNI 後發現 Edge Message Processor 和後端伺服器之間出現連線問題,隨時可以執行下列步驟來停用 SNI。

如要停用 SNI,請在訊息處理器元件上將屬性 jsse.enableSNIExtension 設回 false

停用訊息處理器的 SNI

下列步驟說明如何在 Apigee 訊息處理器上停用 SNI。

  1. 在訊息處理器電腦上,在編輯器中開啟下列檔案。如果尚未存在,請建立一個。
    /opt/apigee/customer/application/message-processor.properties
    

    舉例來說,如要使用 vi 開啟檔案,請輸入下列指令:

    vi /opt/apigee/customer/application/message-processor.properties
    

  2. 如果 /opt/apigee/customer/application/message-processor.properties 中有 conf_system_jsse.enableSNIExtension=true 行,請按照下列步驟修改:
    conf_system_jsse.enableSNIExtension=false
    
  3. 儲存變更。
  4. 請確認這個屬性檔案的擁有者為 apigee 使用者,如下所示:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
    
  5. 按照下方說明重新啟動訊息處理器:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
    
  6. 確認訊息處理器的 SNI 設定已更新。
  7. 如果您有多個訊息處理器,請對所有訊息處理器重複上述步驟。

在訊息處理器上驗證 SNI 設定

本節說明如何確認訊息處理器的 SNI 設定已成功更新。

即使您使用權杖 conf_system_jsse.enableSNIExtension 在訊息處理器上設定 SNI,仍須確認實際的 jsse.enableSNIExtension 屬性已設定新的值。

  1. 在訊息處理器機器中,在 /opt/apigee/edge-message-processor/conf 目錄中搜尋 jsse.enableSNIExtension 屬性,然後查看是否已以新的值設定,如下所示:
    grep -ri "jsse.enableSNIExtension" /opt/apigee/edge-message-processor/conf
    
  2. 如果訊息處理器上的 SNI 設定成功更新,則上述指令會在 system.properties 檔案中顯示新的值。

    在訊息處理器中啟用 SNI 後,上述指令的範例結果如下:

    /opt/apigee/edge-message-processor/conf/system.properties:jsse.enableSNIExtension=true
    

    同樣地,在訊息處理器上停用 SNI 後,上述指令的結果範例如下:

    /opt/apigee/edge-message-processor/conf/system.properties:jsse.enableSNIExtension=false
    

    請注意,在上述的輸出範例中,請注意 system.properties 中的 jsse.enableSNIExtension 屬性已更新為新的值 truefalse。這表示訊息處理器已成功啟用或停用 SNI。

  3. 如果還是看到屬性 jsse.enableSNIExtension 的舊值,請確認您已按照相關章節中列出的所有步驟,正確啟用或停用 SNI。如果您錯過任何步驟,請再次正確重複所有步驟。
  4. 如果仍無法啟用/停用 SNI,請與 Apigee Edge 支援團隊聯絡。