設定從邊緣至後端的傳輸層安全標準 (TLS) (雲端和私有雲)

您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件
info

API Proxy 的功能是將公開端點對應至後端服務。虛擬主機會定義向應用程式公開 API Proxy 的方式。舉例來說,虛擬主機會決定是否能使用 TLS 存取 API Proxy。設定 API Proxy 時,請編輯 ProxyEndpoint 定義,設定 Proxy 使用的虛擬主機。

TargetEndpoint 是 ProxyEndpoint 的出站對應項目。TargetEndpoint 會做為 Edge 到後端服務的 HTTP 用戶端。建立 API Proxy 時,您可以將其設定為使用零或多個 TargetEndpoint。

瞭解詳情:

設定 TargetEndpoint 或 TargetServer

如要設定 TargetEndpoint,請編輯定義 TargetEndpoint 的 XML 物件。如要編輯 TargetEndpoint,請編輯 API Proxy 中定義 TargetEndpoint 的 XML 檔案,或在 Edge 管理使用者介面中編輯。

如要使用 Edge 管理 UI 編輯 TargetEndpoint,請按照下列步驟操作:

  1. 前往 https://enterprise.apigee.com 登入 Edge 管理 UI。
  2. 選取要更新的 API Proxy 名稱。
  3. 選取「開發」分頁標籤。
  4. 在「目標端點」下方,選取「預設」
  5. 程式碼區域會顯示 TargetEndpoint 定義,如下所示:
    <TargetEndpoint name="default">
      <Description/>
      <FaultRules/>
      <Flows/>
      <PreFlow name="PreFlow">
        <Request/>
        <Response/>
      </PreFlow>
      <PostFlow name="PostFlow">
        <Request/>
        <Response/>
      </PostFlow>
      <HTTPTargetConnection>
        <Properties/>
        <SSLInfo>
          <Enabled>true</Enabled>
          <TrustStore>ref://myTrustStoreRef</TrustStore>
        </SSLInfo>
        <URL>https://mocktarget.apigee.net</URL>
      </HTTPTargetConnection>
    </TargetEndpoint>
  6. 請按照「關於後端的 TLS 設定」一節的說明,設定信任儲存區。
  7. 進行變更並儲存 Proxy。如果 API Proxy 已部署,儲存後會以新設定重新部署。

請注意,TargetEndpoint 定義包含 name 屬性。您可以使用 name 屬性的值,設定 API Proxy 的 ProxyEndpoint 定義,以使用 TargetEndpoint。詳情請參閱 API Proxy 設定參考資料

您可以設定 TargetEndpoint 參照 TargetServer,而非明確的目標網址。TargetServer 設定會將具體端點網址與 TargetEndpoint 設定分離。TargetServer 可用於支援多個後端伺服器執行個體之間的負載平衡和容錯移轉。

以下是 TargetServer 定義範例:

<TargetServer name="target1">
  <Host>mocktarget.apigee.net</Host>
  <Port>80</Port>
  <IsEnabled>true</IsEnabled>
</TargetServer> 

TargetServer 會在 TargetEndpoint 定義的 <HTTPTargetConnection> 元素中依名稱參照。您可以設定一或多個具名 TargetServer,如下所示。

<TargetEndpoint name="default">
  ...
  <HTTPTargetConnection>
    <LoadBalancer>
      <Server name="target1" />
      <Server name="target2" />
    </LoadBalancer>
    <Path>/test</Path>
  </HTTPTargetConnection>
  ...
</TargetEndpoint>

詳情請參閱跨後端伺服器負載平衡

關於後端的 TLS 設定

設定後端的 TLS 存取權之前,請先瞭解兩項重要事項:

  1. 根據預設,Edge 不會驗證後端憑證。您必須建立信任儲存庫,才能設定 Edge 驗證憑證。
  2. 使用參照指定 Edge 使用的 KeyStore 或 TrustStore。

以下將說明這兩項考量。

定義信任儲存區,啟用憑證驗證

透過 TargetEndpoint 或 TargetServer 發出 TLS 要求時,Edge 預設不會 驗證從後端伺服器收到的 TLS 憑證。 也就是說,Edge 不會驗證下列項目:

  • 憑證已由信任的 CA 簽署。
  • 憑證尚未過期。
  • 憑證會顯示一般名稱。如果存在一般名稱,Edge 不會驗證一般名稱是否與網址中指定的主機名稱相符。

如要設定 Edge 驗證後端憑證,請完成下列步驟:

  1. 在 Edge 上建立信任儲存區。
  2. 將伺服器的憑證或憑證鏈結上傳至信任儲存區。 如果伺服器憑證是由第三方簽署,您必須將完整憑證鏈結 (包括根 CA 憑證) 上傳至信任儲存庫。沒有隱含信任的 CA。
  3. 將信任儲存區新增至 TargetEndpoint 或 TargetServer 定義。

詳情請參閱「金鑰儲存區和信任儲存區」。

例如:

<TargetEndpoint name="default">
  …
  <HTTPTargetConnection>
    <SSLInfo>
      <Enabled>true</Enabled>
      <TrustStore>ref://myTrustStoreRef</TrustStore>
    </SSLInfo>
    <URL>https://myservice.com</URL>
  </HTTPTargetConnection>
  …
</TargetEndpoint>

使用對金鑰儲存區或信任儲存區的參照

以下範例說明如何設定 TargetEndpoint 或 TargetServer,以支援 TLS。設定 TLS 時,您會指定信任儲存區和金鑰儲存區,做為 TargetEndpoint 或 TargetServer 定義的一部分。

Apigee 強烈建議您在 TargetEndpoints 或 TargetServer 定義中,使用金鑰儲存區和信任儲存區的參照。使用參照的優點是,您只需要更新參照,指向其他金鑰儲存區或信任儲存區,即可更新 TLS 憑證。

TargetEndpoints 或 TargetServer 定義中對 KeyStore 和 TrustStore 的參照,與虛擬主機的參照方式相同。

將 TargetEndpoint 或 TargetServer 轉換為使用參照

您可能已有 TargetEndpoint 或 TargetServer 定義,其中使用金鑰儲存區和信任儲存區的常值名稱。如要轉換 TargetEndpoint 或 TargetServer 定義以使用參照,請按照下列步驟操作:

  1. 更新 TargetEndpoint 或 TargetServer 定義,以使用參照。
  2. 重新啟動 Edge 訊息處理器:
    • 公有雲客戶請與 Apigee Edge 支援團隊聯絡,重新啟動訊息處理器。
    • 私有雲客戶請一次重新啟動一個 Edge 訊息處理器。
  3. 確認 TargetEndpoint 或 TargetServer 運作正常。

設定後端伺服器的單向 TLS

使用 TargetEndpoint 定義時,從 Edge (TLS 用戶端) 設定單向 TLS 存取權至後端伺服器 (TLS 伺服器),不需要在 Edge 上進行任何額外設定。後端伺服器必須正確設定 TLS。

您只需要確保 TargetEndpoint 定義中的 <URL> 元素會透過 HTTPS 通訊協定參照後端服務,並啟用 TLS:

<TargetEndpoint name="default">
  …
  <HTTPTargetConnection>
    <SSLInfo>
      <Enabled>true</Enabled>
    </SSLInfo>
    <URL>https://myservice.com</URL>
  </HTTPTargetConnection>
  …
</TargetEndpoint>

如果您使用 TargetServer 定義後端服務,請在 TargetServer 定義中啟用 TLS:

<TargetServer name="target1">
  <Host>mocktarget.apigee.net</Host>
  <Port>443</Port>
  <IsEnabled>true</IsEnabled>
  <SSLInfo>
    <Enabled>true</Enabled>
  </SSLInfo> 
</TargetServer> 

不過,如要讓 Edge 驗證後端憑證,就必須建立包含後端憑證或憑證鏈的信任儲存區。接著,您可以在 TargetEndpoint 定義中指定信任儲存區:

<TargetEndpoint name="default">
  …
  <HTTPTargetConnection>
    <SSLInfo>
      <Enabled>true</Enabled>
      <TrustStore>ref://myTrustStoreRef</TrustStore>
    </SSLInfo>
    <URL>https://myservice.com</URL>
  </HTTPTargetConnection>
  …
</TargetEndpoint>

或在 TargetServer 定義中:

<TargetServer name="target1">
  <Host>mockserver.apigee.net</Host>
  <Port>443</Port>
  <IsEnabled>true</IsEnabled>
  <SSLInfo>
    <Enabled>true</Enabled>
    <TrustStore>ref://myTrustStoreRef</TrustStore>
  </SSLInfo> 
</TargetServer>

如要設定單向 TLS,請按照下列步驟操作:

  1. 如要驗證後端憑證,請在 Edge 上建立信任儲存區,然後按照「金鑰儲存區和信任儲存區」一文的說明,上傳後端憑證或 CA 鏈結。 以這個範例來說,如果必須建立信任儲存庫,請將其命名為「myTrustStore」myTrustStore
  2. 如果您已建立信任儲存區,請使用下列 POST API 呼叫,為您在上方建立的信任儲存區建立名為 myTrustStoreRef 的參照:

    curl -X POST  -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
      -d '<ResourceReference name="myTrustStoreRef">
        <Refers>myTrustKeystore</Refers>
        <ResourceType>KeyStore</ResourceType>
      </ResourceReference>' -u email:password
    
  3. 使用 Edge 管理 UI 更新 API Proxy 的 TargetEndpoint 定義 (或編輯 Proxy 的 XML 檔案,前提是您以 XML 定義 API Proxy):
    1. 前往 https://enterprise.apigee.com 登入 Edge 管理 UI。
    2. 在 Edge 管理 UI 選單中,選取「API」
    3. 選取要更新的 API Proxy 名稱。
    4. 選取「開發」分頁標籤。
    5. 在「目標端點」下方,選取「預設」
    6. 在程式碼區域中,編輯 <HTTPTargetConnection> 元素,加入 <SSLInfo> 元素。請務必指定正確的信任儲存區參照,並將 <Enabled> 設為 true:
      <TargetEndpoint name="default">
        …
        <HTTPTargetConnection>
          <SSLInfo>
            <Enabled>true</Enabled>
            <TrustStore>ref://myTrustStoreRef</TrustStore>
          </SSLInfo>
          <URL>https://myservice.com</URL>
        </HTTPTargetConnection>
        …
      </TargetEndpoint>
    7. 儲存 API Proxy。如果 API Proxy 已部署,儲存後會以新設定重新部署。

設定後端伺服器的雙向 TLS

如要在 Edge (TLS 用戶端) 和後端伺服器 (TLS 伺服器) 之間支援雙向 TLS:

  • 在 Edge 上建立 KeyStore,並上傳 Edge 憑證和私密金鑰。
  • 如要驗證後端憑證,請在 Edge 上建立信任儲存庫,其中包含您從後端伺服器收到的憑證和 CA 鏈結。
  • 更新參照後端伺服器的所有 API Proxy 的 TargetEndpoint,以設定 TLS 存取權。

使用金鑰別名指定 KeyStore 憑證

您可以在同一個金鑰儲存區中定義多個憑證,每個憑證都有自己的別名。根據預設,Edge 會使用金鑰儲存區中定義的第一個憑證。

您可以選擇設定 Edge,使用 <KeyAlias> 屬性指定的憑證。這樣一來,您就能為多個憑證定義單一金鑰儲存區,然後在 TargetServer 定義中選取要使用的憑證。如果 Edge 找不到別名與 <KeyAlias> 相符的憑證,就會使用預設動作,選取金鑰儲存區中的第一個憑證。

Public Cloud 版 Edge 使用者必須與 Apigee Edge 支援團隊聯絡,才能啟用這項功能。

設定雙向 TLS

如要設定雙向 TLS,請按照下列步驟操作:

  1. 在 Edge 上建立 KeyStore,並按照「KeyStore 和 TrustStore」一文所述程序,上傳憑證和私密金鑰。 在本範例中,請建立名為 myTestKeystore 的金鑰儲存區,並為憑證和私密金鑰使用別名 myKey
  2. 使用下列 POST API 呼叫,為您在上方建立的 KeyStore 建立名為 myKeyStoreRef 的參照:

    curl -X POST  -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
    -d '<ResourceReference name="myKeyStoreRef">
        <Refers>myTestKeystore</Refers>
        <ResourceType>KeyStore</ResourceType>
    </ResourceReference>' -u email:password
    

    參照會指定金鑰儲存區的名稱,以及 KeyStore 參照類型。

    使用下列 GET API 呼叫查看參照:

    curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/myKeyStoreRef /
    -u email:password
    
  3. 如要驗證後端憑證,請在 Edge 上建立信任儲存區,然後上傳憑證和 CA 鏈結,如「金鑰儲存區和信任儲存區」一文所述。 以這個範例來說,如果您必須建立信任儲存庫,請將其命名為「myTrustStore」myTrustStore
  4. 如果您已建立信任儲存區,請使用下列 POST API 呼叫,為您在上方建立的信任儲存區建立名為 myTrustStoreRef 的參照:

    curl -X POST  -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
    -d '<ResourceReference name="myTrustStoreRef">
        <Refers>myTrustKeystore</Refers>
        <ResourceType>KeyStore</ResourceType>
    </ResourceReference>' -u email:password
    
  5. 使用 Edge 管理 UI 更新 API Proxy 的 TargetEndpoint 定義 (或編輯 Proxy 的 XML 檔案,前提是您以 XML 定義 API Proxy):
    1. 前往 https://enterprise.apigee.com 登入 Edge 管理 UI。
    2. 在 Edge 管理 UI 選單中,選取「API」
    3. 選取要更新的 API Proxy 名稱。
    4. 選取「開發」分頁標籤。
    5. 在「目標端點」下方,選取「預設」
    6. 在程式碼區域中,編輯 <HTTPTargetConnection> 元素,加入 <SSLInfo> 元素。請務必指定正確的 KeyStore 和金鑰別名,並將 <Enabled><ClientAuthEnabled> 元素都設為 true:
      <TargetEndpoint name="default">
        ...
        <HTTPTargetConnection>
          <SSLInfo>
            <Enabled>true</Enabled>
            <ClientAuthEnabled>true</ClientAuthEnabled>
            <KeyStore>ref://myKeyStoreRef</KeyStore>
            <KeyAlias>myKey</KeyAlias>
          </SSLInfo>
          <URL>https://myservice.com</URL>
        </HTTPTargetConnection>
        ...
      </TargetEndpoint>
    7. 儲存 API Proxy。如果 API Proxy 已部署,儲存後會以新設定重新部署。

如要進一步瞭解 <TargetEndpoint> 中提供的選項,包括使用變數提供 TargetEndpoint <SSLInfo> 值,請參閱 API Proxy 設定參考資料

啟用 SNI

Edge 支援從訊息處理器使用伺服器名稱指標 (SNI),以 Apigee Edge for Cloud 和 Private Cloud 部署作業中的端點為目標。

為與現有目標後端向後相容,Edge for the Private Cloud 預設會停用 SNI。如果目標後端已設定為支援 SNI,您就可以啟用這項功能。詳情請參閱「搭配 Edge 使用 SNI」。