Edge Message Processor とバックエンド サーバー間の SNI を構成する

Apigee Edge のドキュメントを表示しています。
Apigee X のドキュメントに移動します。
情報

Server Name Indication(SNI)を使用すると、複数の HTTPS バックエンド サーバーが、同じ TLS 証明書を使用せずに同じ IP アドレスとポートからサービスを提供できます。これは TLS プロトコルの拡張機能です。SNI が有効になっているクライアントは、初期 TLS handshake の一環としてバックエンド サーバーのホスト名を渡します。これにより、TLS サーバーは、クライアントからのリクエストの検証に使用する TLS 証明書を判断できます。

デフォルトでは、既存のバックエンド サーバーとの下位互換性を確保するため、Edge for Private Cloud の Message Processor コンポーネントで SNI が無効になっています。バックエンド サーバーが SNI をサポートするように構成されている場合は、Message Processor コンポーネントで SNI を有効にする必要があります。それ以外の場合、Apigee Edge を通過する API リクエストは TLS ハンドシェイクの失敗で失敗します。

このドキュメントでは、次の操作を行う方法について説明します。

始める前に

SNI が有効になったサーバーの識別

このセクションでは、バックエンド サーバーで SNI が有効になっているかどうかを確認する方法について説明します。

  1. 次のように openssl コマンドを実行します。その際、サーバー名を渡さずに、該当するサーバーホスト名(Edge Router またはバックエンド サーバー)への接続を試みます。
    openssl s_client -connect hostname:port
  2. 証明書を取得できることもありますが、次に示すように、openssl コマンドで handshake の失敗が発生することもあります。
    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 コマンドを実行し、サーバー名を渡して、該当するサーバーホスト名(Edge Router またはバックエンド サーバー)への接続を試みます。
    openssl s_client -connect hostname:port -servername hostname
  4. ステップ 1 で handshake の失敗が発生した場合、またはステップ 1 とステップ 2 で異なる証明書が得られた場合は、この特定のサーバーで SNI が有効であることを示しています。
  5. 複数のバックエンド サーバーでこれを確認する場合は、バックエンド サーバーごとに上記の手順を繰り返す必要があります。

SNI が有効なバックエンド サーバーが 1 つ以上ある場合は、以下で説明するように、Message Processor コンポーネントで SNI を有効にする必要があります。それ以外の場合、Apigee Edge を通過する API リクエストは TLS ハンドシェイクの失敗で失敗します。

Edge Message Processor とバックエンド サーバーの間で SNI を有効にする

このセクションでは、Edge Message Processor とバックエンド サーバー間の SNI を有効にする方法について説明します。SNI は、Message Processor コンポーネントのプロパティ jsse.enableSNIExtension を使用して有効にできます。Message Processor のプロパティを構成するには、Edge の構成方法で説明されている構文に従ってトークンを使用します。

Message Processor で SNI を有効にするには、次の操作を行います。

  1. jsse.enableSNIExtension プロパティのトークンを探す
  2. Message Processor で SNI を有効にする

jsse.enableSNIExtension プロパティのトークンを見つける

次の手順では、jsse.enableSNIExtension プロパティのトークンを見つける方法について説明します。

  1. 次のコマンドを使用して、Message Processor のソース ディレクトリ /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} タグで囲まれた文字列は、Message Processor の .properties ファイルで設定できるトークンの名前です。

    したがって、プロパティ jsse.enableSNIExtension のトークンは次のようになります。

    conf_system_jsse.enableSNIExtension

Message Processor で SNI を有効にする

次の手順では、Apigee Message Processor コンポーネントで SNI を有効にする方法について説明します。

  1. Message Processor マシンで、次のファイルをエディタで開きます。存在しない場合は作成します。
    /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. 次のように Message Processor を再起動します。
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
  6. Message Processor で SNI 構成が更新されたことを確認します。
  7. 複数の Message Processor がある場合は、すべての Message Processor で上記の手順を繰り返します。

Edge Message Processor とバックエンド サーバー間の SNI を無効にする

通常、SNI を有効にすると問題は発生しません。ただし、SNI を有効にした後に Edge Message Processor とバックエンド サーバー間の接続の問題が発生した場合は、次の手順で SNI を無効にできます。

SNI を無効にするには、Message Processor コンポーネントでプロパティ jsse.enableSNIExtensionfalse に設定します。

Message Processor で SNI を無効にする

次の手順では、Apigee メッセージ プロセッサで SNI を無効にする方法について説明します。

  1. Message Processor マシンで、次のファイルをエディタで開きます。存在しない場合は作成します。
    /opt/apigee/customer/application/message-processor.properties

    たとえば、vi を使用してファイルを開くには、次のコマンドを入力します。

    vi /opt/apigee/customer/application/message-processor.properties
  2. /opt/apigee/customer/application/message-processor.propertiesconf_system_jsse.enableSNIExtension=true の行が存在する場合は、次のように変更します。
    conf_system_jsse.enableSNIExtension=false
  3. 変更を保存します。
  4. このプロパティ ファイルの所有者が apigee ユーザーであることを確認します。
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  5. 次のように Message Processor を再起動します。
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
  6. Message Processor で SNI 構成が更新されたことを確認します。
  7. 複数の Message Processor がある場合は、すべての Message Processor で上記の手順を繰り返します。

Message Processor での SNI 構成の確認

このセクションでは、メッセージ プロセッサで SNI 構成が正常に更新されたことを確認する方法について説明します。

トークン conf_system_jsse.enableSNIExtension を使用して Message Processor で SNI を構成しても、実際のプロパティ jsse.enableSNIExtension が新しい値で設定されていることを確認する必要があります。

  1. Message Processor マシンで、/opt/apigee/edge-message-processor/conf ディレクトリのプロパティ jsse.enableSNIExtension を検索し、次のように新しい値が設定されているかどうかを確認します。
    grep -ri "jsse.enableSNIExtension" /opt/apigee/edge-message-processor/conf
  2. Message Processor で SNI 構成が正常に更新されると、上記のコマンドは system.properties ファイルに新しい値を表示します。

    Message Processor で SNI を有効にした後の上記のコマンドの出力例は次のとおりです。

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

    同様に、Message Processor で SNI を無効にした後の上記のコマンドの出力例は次のようになります。

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

    上記の出力例では、プロパティ jsse.enableSNIExtensionsystem.properties の新しい値 true または false に更新されています。これは、Message Processor で SNI が正常に有効または無効になったことを示します。

  3. プロパティ jsse.enableSNIExtension の古い値が引き続き表示される場合は、適切なセクションで説明されている手順に沿って SNI を正しく有効または無効にしていることを確認してください。手順を間違えた場合は、すべての手順をもう一度正しく繰り返します。
  4. それでも SNI を有効または無効にできない場合は、Apigee Edge サポートにお問い合わせください。