評估 API Proxy 中的傳輸層安全標準 (TLS) 連線資訊

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

Edge 可讓您建立支援單向和雙向 TLS 的虛擬主機。使用單向 TLS 時,用戶端會向部署在 Edge 路由器上的虛擬主機發出工作階段要求,而路由器會以包含虛擬主機公開金鑰的憑證回應。如果是簽署的憑證,用戶端可以向憑證授權單位 (CA) 提出要求,驗證憑證。

在雙向 TLS 中,用戶端和 Edge 都會傳遞憑證,並在要求中驗證:

  • Edge 路由器會向 TLS 用戶端出示憑證,以驗證自身。用戶端接著會先驗證伺服器的身分,再將憑證傳送至伺服器。
  • TLS 用戶端會向 Edge 提出憑證,以驗證自身。

詳情請參閱「關於虛擬主機」一文。

擷取 TLS 連線資訊

透過支援 TLS 的虛擬主機向 API Proxy 提出要求時,Edge 可以擷取 TLS 連線的相關資訊。API Proxy 接著就能透過流程變數存取該資訊,執行額外的分析和驗證。

Edge 擷取的 TLS 資訊類型,取決於虛擬主機是否支援單向或雙向 TLS。舉例來說,如果是單向 TLS,Edge 可以擷取 TLS 連線中使用的 TLS 密碼或 TLS 通訊協定相關資訊。

如果是雙向 TLS,Edge 可以擷取與單向 TLS 相同的資訊,也可以擷取用戶端憑證的相關資訊。舉例來說,Edge 可以擷取用戶端憑證的 SHA1 指紋,以及 PEM 格式的用戶端憑證。

擷取單向和雙向 TLS 的資訊

下表列出包含 Edge 擷取 TLS 連線資訊的流程變數,可在 API Proxy 中存取。如要擷取單向和雙向 TLS 的這項資訊,請在虛擬主機定義中將 <ConnectionProperties> 設為 true:

流程變數 說明
tls.cipher TLS 連線使用的密碼。
tls.protocol TLS 連線使用的通訊協定。
tls.server.name 要求的 SNI 伺服器名稱。
tls.session.id

工作階段 ID。

當您將 <ConnectionProperties><ClientProperties> 或 設為 true 時,即可使用這個流程變數。

在雙向 TLS 期間擷取額外的 TLS 資訊

下表列出包含 Edge 在雙向 TLS 中擷取用戶端憑證詳細資料的流程變數。如要擷取這項資訊以進行雙向 TLS,請在虛擬主機定義中將 <ClientProperties> 設為 true:

流程變數 說明
tls.client.s.dn 用戶端憑證的主體辨別名稱 (DN)。
tls.client.i.dn 用戶端憑證的核發者辨別名稱 (DN)。
tls.client.raw.cert PEM 格式的用戶端憑證。
tls.client.cert.serial 用戶端憑證的序號。
tls.client.cert.fingerprint 用戶端憑證的 SHA1 指紋。
tls.session.id

工作階段 ID。

<ConnectionProperties><ClientProperties> 設為 true 時,即可使用這個流程變數。

設定虛擬主機以擷取 TLS 資訊

如要設定虛擬主機來擷取 TLS 資訊,請在 <PropagateTLSInformation> 下方設定下列屬性為 true

  • <ConnectionProperties>:啟用單向和雙向 TLS 的 TLS 連線資訊擷取功能。預設值為 false
  • <ClientProperties>:啟用雙向 TLS 的額外資訊擷取功能。預設值為 false

舉例來說,下列虛擬主機定義會使用雙向 TLS,並啟用兩種 TLS 資訊的擷取作業:

<VirtualHost name="secure">
    ....
    <SSLInfo>
        <Enabled>true</Enabled>
        # Enable two-way TLS.
        <ClientAuthEnabled>true</ClientAuthEnabled>
        <IgnoreValidationErrors>false</IgnoreValidationErrors>
        <KeyAlias>ks-alias</KeyAlias>
        <KeyStore>ref://ks-ref</KeyStore>
        <TrustStore>ref://ts-ref</TrustStore>
    </SSLInfo>
    <PropagateTLSInformation>
        <ConnectionProperties>true</ConnectionProperties>
        <ClientProperties>true</ClientProperties>
    </PropagateTLSInformation>
</VirtualHost>

如要傳遞 JSON 主體,請將屬性設為:

  "propagateTLSInformation" : {
    "connectionProperties" : true,
    "clientProperties" : true
  }

設定標頭大小限制

在虛擬主機上啟用 TLS 資訊擷取功能後,Edge 會使用 HTTP 標頭傳遞該資訊。因此,您必須根據使用的 Edge 版本 (Cloud 或 Private Cloud),確保標頭大小限制設定適當:

  • 雲端專用 Edge:Apigee 會適當設定標頭大小。
  • Private Cloud 的 Edge:這項功能不適用。

存取 API Proxy 中的流程變數

您可以在 API Proxy 中存取及檢查 TLS 流程變數。 舉例來說,您可以使用 AssignMessage 政策存取這些變數,也可以使用 JavaScript 政策在 JavaScript 中存取這些變數。

您也可以在 Proxy 或目標流程的 <Condition> 元素中,或在 <Step><RouteRule> 中參照流程變數。舉例來說,您可以根據用戶端 SN,將要求轉送至不同目標。

詳情請參閱: