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>