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

現在、Apigee Edge のドキュメントを表示しています。
Apigee X のドキュメントをご確認ください
情報

Server Name Indication(SNI)を使用すると、複数の HTTPS バックエンド サーバーを同じ IP アドレスとポートで処理でき、それらのバックエンド サーバーで同じ TLS 証明書を使用する必要はありません。TLS プロトコルの拡張版です。SNI がクライアントで有効になっている場合、クライアントは最初の TLS handshake の一環としてバックエンド サーバーのホスト名を渡します。これにより、TLS サーバーは、クライアントからのリクエストの検証に使用する TLS 証明書を決定できます。

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

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

始める前に

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 Handshake の失敗で失敗します。

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. このコマンドの出力には、Message Processor のプロパティ 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 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 という行が /opt/apigee/customer/application/message-processor.properties に存在する場合は、次のように変更します。
    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 構成を確認する

このセクションでは、Message Processor で 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 サポートにお問い合わせください。