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

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

Edge 可讓您建立支援單向和雙向傳輸層安全標準 (TLS) 的虛擬主機。透過單向傳輸層安全標準 (TLS),用戶端會向部署於邊緣路由器的虛擬主機發出工作階段要求,而路由器會以包含虛擬主機公開金鑰的憑證回應。如為已簽署的憑證,用戶端就能向憑證授權單位 (CA) 要求驗證憑證。

在雙向 TLS 中,用戶端和 Edge 都會通過要求中驗證的憑證:

  • Edge Router 會將憑證提供給 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 擷取且可在 API Proxy 中存取的傳輸層安全標準 (TLS) 連線資訊。在虛擬主機定義中,將 <ConnectionProperties> 設為 true,系統會針對單向和雙向傳輸層安全標準 (TLS),擷取這項資訊:

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

工作階段 ID。

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

在雙向傳輸層安全標準 (TLS) 期間擷取額外的 TLS 資訊

下表列出流程變數,其中包含 Edge 在雙向傳輸層安全標準 (TLS) 中擷取的用戶端憑證詳細資料。系統會在虛擬主機定義中將 <ClientProperties> 設為 true,藉此擷取雙向傳輸層安全標準 (TLS) 中的資訊:

流程變數 說明
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 for Cloud 或 Private Cloud 邊緣:

  • 雲端邊緣:Apigee 能夠適當設定標頭大小。
  • 私有雲的邊緣:無法使用的功能。

在 API Proxy 中存取流程變數

您可以透過 API Proxy 存取及檢查 TLS 流程變數,舉例來說,您可以透過 AssignMessage 政策進行存取,使用 JavaScript 政策透過 JavaScript 存取這些訊息。

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

相關詳情請參閱: