Menu Close

第4章 Camel ActiveMQ コンポーネントのセキュア化

概要

Camel ActiveMQ コンポーネントを使用すると、Apache ActiveMQ ブローカーに接続できるルートに JMS エンドポイントを定義できます。Camel ActiveMQ エンドポイントをセキュアにするには、セキュアな接続ファクトリーを使用する Camel ActiveMQ コンポーネントのインスタンスを作成する必要があります。

4.1. Secure ActiveMQ 接続ファクトリー

概要

Apache Camel は、ルートで Apache ActiveMQ エンドポイントを定義するための Apache ActiveMQ コンポーネントを提供します。Apache ActiveMQ エンドポイントはブローカーの Java クライアントです。また、コンシューマーエンドポイント (通常は JMS メッセージをポーリングするためルートの開始時に使用される) か、プロデューサーエンドポイント (通常は JMS メッセージをブローカーに 送信するルートの最後または途中で使用される) のいずれかを定義できます。

リモートブローカーがセキュア (SSL セキュリティー、JAAS セキュリティー、または両方) な場合、Apache ActiveMQ コンポーネントを必要なクライアントセキュリティー設定で設定する必要があります。

セキュリティープロパティーのプログラミング

Apache ActiveMQ では、ActiveMQSslConnectionFactory JMS 接続ファクトリーのインスタンスを作成および設定することで、SSL セキュリティー設定 (および JAAS セキュリティー設定) をプログラムできます。JMS 接続ファクトリーのプログラミングは、OSGi、J2EE、Tomcat などのコンテナーのコンテキストで使用する正しいアプローチです。これらの設定は JMS 接続ファクトリーインスタンスを使用するアプリケーションのローカル設定であるためです。

注記

スタンドアロンブローカーは、Java システムプロパティーを使用して SSL を設定できます。ただし、コンテナーにデプロイされたクライアントの場合、この設定は OSGi コンテナー全体ではなく、個別のバンドルのみに適用される必要があるため、実用的なアプローチではありません。Camel ActiveMQ エンドポイントは事実上一種の Apache ActiveMQ Java クライアントであるため、この制限は Camel ActiveMQ エンドポイントにも適用されます。

セキュアな接続ファクトリーの定義

例4.1「セキュアな接続ファクトリー Bean の定義」 は、Blueprint でセキュアな接続ファクトリー Bean を作成し、SSL/TLS セキュリティー JAAS 認証の両方を有効にする方法を表しています。

例4.1 セキュアな接続ファクトリー Bean の定義

<bean id="jmsConnectionFactory"
      class="org.apache.activemq.ActiveMQSslConnectionFactory">
  <property name="brokerURL" value="ssl://localhost:61617" />
  <property name="userName" value="Username"/>
  <property name="password" value="Password"/>
  <property name="trustStore" value="/conf/client.ts"/>
  <property name="trustStorePassword" value="password"/>
</bean>

以下のプロパティーは ActiveMQSslConnectionFactory クラスで指定されます。

brokerURL
接続するリモートブローカーの URL。この例ではローカルホストの SSL 対応 OpenWire ポートに接続します。ブローカーは、互換性のあるポート設定を持つ対応するトランスポートコネクターを定義する必要もあります。
userName および password
有効な JAAS ログインクレデンシャル、Username および Password
trustStore
SSL 接続の証明書トラストストアが含まれる Java キーストアファイルの場所。場所はクラスパスリソースとして指定されます。相対パスを指定すると、リソースの場所はクラスパスの org/jbossfuse/example ディレクトリーからの相対パスになります。
trustStorePassword
トラストストアが含まれるキーストアファイルのロックを解除するパスワード。

keyStore および keyStorePassword プロパティーを指定することもできますが、これらのプロパティーは、SSL 相互認証が有効になっている場合にのみ必要になります (クライアントが SSL ハンドシェイク中に X.509 証明書をブローカーに提示)。

4.2. Camel ActiveMQ コンポーネントの設定例

概要

本セクションでは、Camel ルートで ActiveMQ エンドポイントを定義するために使用できる Camel ActiveMQ コンポーネントインスタンスのサンプルを初期化および設定する方法を説明します。これにより、Camel ルートがブローカーからメッセージを送受信できます。

前提条件

Camel ActiveMQ コンポーネントに必要なバンドルを定義する camel-activemq 機能は、デフォルトではインストールされませんcamel-activemq 機能をインストールするには、以下のコンソールコマンドを入力します。

JBossFuse:karaf@root> features:install camel-activemq

Camel ActiveMQ コンポーネントのサンプル

以下の Blueprint の例は、SSL/TLS セキュリティーと JAAS 認証の両方が有効になっている Camel ActiveMQ コンポーネントの完全な設定を示しています。Camel ActiveMQ コンポーネントインスタンスは activemqssl Bean ID と定義されます。つまり、Camel ルート内でエンドポイントを定義するときに使用する activemqssl スキームに関連付けられています。

<?xml version="1.0" encoding="UTF-8"?>
<beans ... >
  ...
  <!--
    Configure the activemqssl component:
  -->
  <bean id="jmsConnectionFactory"
        class="org.apache.activemq.ActiveMQSslConnectionFactory">
    <property name="brokerURL" value="ssl://localhost:61617" />
    <property name="userName" value="Username"/>
    <property name="password" value="Password"/>
    <property name="trustStore" value="/conf/client.ts"/>
    <property name="trustStorePassword" value="password"/>
  </bean>

  <bean id="pooledConnectionFactory"
        class="org.apache.activemq.pool.PooledConnectionFactory">
    <property name="maxConnections" value="8" />
    <property name="maximumActive" value="500" />
    <property name="connectionFactory" ref="jmsConnectionFactory" />
  </bean>

  <bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration">
    <property name="connectionFactory" ref="pooledConnectionFactory"/>
    <property name="transacted" value="false"/>
    <property name="concurrentConsumers" value="10"/>
  </bean>

  <bean id="activemqssl"
        class="org.apache.activemq.camel.component.ActiveMQComponent">
    <property name="configuration" ref="jmsConfig"/>
  </bean>

</beans>

Camel ルートの例

以下の Camel ルートは、前述の例で定義された Camel ActiveMQ コンポーネントを参照する activemqssl スキームを使用して、ブローカーの security.test キューにメッセージを安全に送信するサンプルエンドポイントを定義します。

<?xml version="1.0" encoding="UTF-8"?>
<beans ...>
  ...
  <camelContext xmlns="http://camel.apache.org/schema/spring">
    <route>
      <from uri="timer://myTimer?fixedRate=true&period=5000"/>
      <transform><constant>Hello world!</constant></transform>
      <to uri="activemqssl:security.test"/>
    </route>
  </camelContext>
  ...
</beans>