Red Hat Training

A Red Hat training course is available for Red Hat Fuse

164.8. SSL サポート(HTTPS)

JSSE 設定ユーティリティーの使用

Camel 2.8 より、Jetty コンポーネントは Camel JSSE 設定ユーティリティーを介して SSL/TLS 設定をサポートします。  このユーティリティーは、エンドポイントおよびコンポーネントレベルで記述し、設定する必要のあるコンポーネント固有のコードの量を大幅に削減します。  以下の例は、Jetty コンポーネントでユーティリティーを使用する方法を示しています。

コンポーネントのプログラムによる設定

KeyStoreParameters ksp = new KeyStoreParameters();
ksp.setResource("/users/home/server/keystore.jks");
ksp.setPassword("keystorePassword");

KeyManagersParameters kmp = new KeyManagersParameters();
kmp.setKeyStore(ksp);
kmp.setKeyPassword("keyPassword");

SSLContextParameters scp = new SSLContextParameters();
scp.setKeyManagers(kmp);

JettyComponent jettyComponent = getContext().getComponent("jetty", JettyComponent.class);
jettyComponent.setSslContextParameters(scp);

エンドポイントの Spring DSL ベースの設定

...
  <camel:sslContextParameters
      id="sslContextParameters">
    <camel:keyManagers
        keyPassword="keyPassword">
      <camel:keyStore
          resource="/users/home/server/keystore.jks"
          password="keystorePassword"/>
    </camel:keyManagers>
  </camel:sslContextParameters>...
...
  <to uri="jetty:https://127.0.0.1/mail/?sslContextParameters=#sslContextParameters"/>
...

Jetty の直接的な設定

Jetty は、追加設定なしで SSL サポートを提供します。Jetty を SSL モードで実行できるようにするには、https:// prefix--for を使用して URI をフォーマットします。

<from uri="jetty:https://0.0.0.0/myapp/myservice/"/>

Jetty は、正しい SSL 証明書をロードするため、キーストアのロード場所と、使用するパスワードを知っておく必要があります。以下の JVM システムプロパティーを設定します。

until Camel 2.2

  • jetty.ssl.keystore は、キー エントリー に Jetty サーバー自体 X.509 証明書が含まれる Java キーストアファイルの場所を指定します。キーエントリーは、X.509 証明書( パブリック鍵)とそれに関連する秘密鍵も格納します。
  • jetty.ssl.password キーストアファイルへのアクセスに必要なストアパスワード(キー ストア コマンドの -storepass オプションに提供されるパスワードと同じ)
  • jetty.ssl.keypassword キーストアの証明書のキーエントリーへのアクセスに使用されるキーパスワード(キー ストア コマンドの -keypass オプションに提供されるパスワードと同じもの)。

Camel 2.3 以降

  • org.eclipse.jetty.ssl.keystore は、キー エントリー に Jetty サーバーの独自の X.509 証明書が含まれる Java キーストアファイルの場所を指定します。キーエントリーは、X.509 証明書( パブリック鍵)とそれに関連する秘密鍵も格納します。
  • org.eclipse.jetty.ssl.password キーストアファイルへのアクセスに必要なストアパスワード(キー ストア コマンドの -storepass オプションに指定されたパスワードと同じもの)。
  • org.eclipse.jetty.ssl.keypassword キーパスワードは、キーストア内の証明書のキーエントリーにアクセスするために使用されます(キー ストア コマンドの -keypass オプションに提供されるパスワードと同じです)。

Jetty エンドポイントで SSL を設定する方法は、「Jetty Site: http://docs.codehaus.org/display/JETTY/How+to+configure+SSL」を参照してください。

一部の SSL プロパティーは Camel によって直接公開されませんが、Camel は基礎となる SslSocketConnector を公開します。さまざまな Camel バージョンには若干の違いがあります。

Camel 2.2 まで

<bean id="jetty" class="org.apache.camel.component.jetty.JettyHttpComponent">
    <property name="sslSocketConnectors">
        <map>
            <entry key="8043">
                <bean class="org.mortbay.jetty.security.SslSocketConnector">
                    <property name="password"value="..."/>
                    <property name="keyPassword"value="..."/>
                    <property name="keystore"value="..."/>
                    <property name="needClientAuth"value="..."/>
                    <property name="truststore"value="..."/>
                </bean>
            </entry>
        </map>
    </property>
</bean>

Camel 2.3, 2.4

<bean id="jetty" class="org.apache.camel.component.jetty.JettyHttpComponent">
    <property name="sslSocketConnectors">
        <map>
            <entry key="8043">
                <bean class="org.eclipse.jetty.server.ssl.SslSocketConnector">
                    <property name="password"value="..."/>
                    <property name="keyPassword"value="..."/>
                    <property name="keystore"value="..."/>
                    <property name="needClientAuth"value="..."/>
                    <property name="truststore"value="..."/>
                </bean>
            </entry>
        </map>
    </property>
</bean>

* Camel 2.5 から SslSelectChannelConnector を使用するよう切り替えます *

<bean id="jetty" class="org.apache.camel.component.jetty.JettyHttpComponent">
    <property name="sslSocketConnectors">
        <map>
            <entry key="8043">
                <bean class="org.eclipse.jetty.server.ssl.SslSelectChannelConnector">
                    <property name="password"value="..."/>
                    <property name="keyPassword"value="..."/>
                    <property name="keystore"value="..."/>
                    <property name="needClientAuth"value="..."/>
                    <property name="truststore"value="..."/>
                </bean>
            </entry>
        </map>
    </property>
</bean>

上記のマップのキーとして使用する値は、リッスンする Jetty を設定するポートです。

164.8.1. 一般的な SSL プロパティーの設定

Camel 2.5 で利用可能

(上記のように)ポート番号固有の SSL ソケットコネクターごとに、すべての SSL ソケットコネクターに適用される一般的なプロパティーを設定できるようになりました(これは、ポート番号をエントリーとして上記のように明示的に設定されていません)。

<bean id="jetty" class="org.apache.camel.component.jetty.JettyHttpComponent">
    <property name="sslSocketConnectorProperties">
        <map>
            <entry key="password"value="..."/>
            <entry key="keyPassword"value="..."/>
            <entry key="keystore"value="..."/>
            <entry key="needClientAuth"value="..."/>
            <entry key="truststore"value="..."/>
        </map>
    </property>
</bean>