API プロキシの TLS 接続情報へのアクセス

Edge を使用すると、一方向 TLS と双方向 TLS をサポートする仮想ホストを作成できます。一方向 TLS の場合、クライアントは Edge Router にデプロイされた仮想ホストにセッション リクエストを発行し、Edge Router は仮想ホストの公開鍵を含む証明書をレスポンスとして返します。署名付き証明書の場合、クライアントはその証明書を認証するよう認証局(CA)にリクエストできます。

双方向 TLS の場合、クライアントと Edge の両方から証明書が渡され、証明書はリクエストの一環として検証されます。

  • Edge Router は、自身を認証するための証明書を TLS クライアントに提示します。次に、クライアントはサーバーの ID を検証してから、クライアントの証明書をサーバーに送信します。
  • TLS クライアントは、自身を認証するための証明書を Edge に提示します。

詳細については、仮想ホストについてをご覧ください。

TLS 接続情報のキャプチャ

TLS をサポートする仮想ホスト経由での API プロキシへのリクエスト時に、Edge では TLS 接続に関する情報をキャプチャできます。API プロキシでは、フロー変数を使用してその情報にアクセスし、追加の分析と検証を実施できます。

Edge によってキャプチャされる TLS 情報の種類は、仮想ホストでサポートされる TLS が一方向か双方向かによって異なります。たとえば、一方向 TLS の場合、TLS 接続で使用される TLS 暗号や TLS プロトコルに関する情報がキャプチャされます。

双方向 TLS の場合、一方向 TLS でキャプチャされるすべての情報に加え、クライアントの証明書に関する情報もキャプチャされます。たとえば、クライアント証明書の SHA1 フィンガープリントや PEM 形式のクライアント証明書がキャプチャされます。

一方向と双方向の両方の TLS に関する情報のキャプチャ

次の表に示すフロー変数には、Edge によってキャプチャされ、API プロキシでのアクセスに使用できる、TLS 接続情報が含まれています。仮想ホストの定義で <ConnectionProperties> を true に設定すると、一方向と双方向の両方の TLS でこの情報がキャプチャされます。

フロー変数 説明
tls.cipher TLS 接続で使用される暗号。
tls.protocol TLS 接続で使用されるプロトコル。
tls.server.name リクエストされた SNI サーバー名。
tls.session.id

セッション ID。

このフロー変数を使用できるのは、<ConnectionProperties> または <ClientProperties> を true に設定した場合です。

双方向 TLS での追加の TLS 情報のキャプチャ

次の図は、双方向 TLS で Edge によってキャプチャされるクライアント証明書の詳細を含むフロー変数を示しています。仮想ホストの定義で <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 the Cloud、Edge for the Private Cloud のどちらを使用しているかに応じて、ヘッダーサイズの制限を適切に設定する必要があります。

  • Edge for the Cloud: Apigee によってヘッダーサイズが適切に設定されます。
  • Edge for the Private Cloud: この機能は利用できません。

API プロキシでのフロー変数へのアクセス

TLS フロー変数へのアクセスとこの変数の確認は、API プロキシ内から行えます。たとえば、AssignMessage ポリシーを使用してアクセスしたり、JavaScript ポリシーを使用して JavaScript でアクセスしたりできます。

また、プロキシの <Condition> 要素内、またはターゲット フロー内、あるいは <Step> 内または <RouteRule> 内のフロー変数を参照することもできます。たとえば、クライアントの SN に基づいて、さまざまなターゲットにリクエストをルーティングできます。

詳細については、以下をご覧ください。