141.17.4. HTTP クライアントの SSL 設定
JSSE 設定ユーティリティーの使用
Camel 2.8 より、HTTP4 コンポーネントは Camel JSSE 設定ユーティリティーを介して SSL/TLS 設定をサポートします。 このユーティリティーは、エンドポイントおよびコンポーネントレベルで記述し、設定する必要のあるコンポーネント固有のコードの量を大幅に削減します。 以下の例は、HTTP4 コンポーネントでユーティリティーを使用する方法を示しています。
このコンポーネントで使用される Apache HTTP クライアントのバージョンは、グローバルの「プロトコル」レジストリーから SSL/TLS 情報を解決します。 このコンポーネントは、Camel JSSE 設定ユーティリティーの使用をサポートするために、HTTP クライアントのプロトコルソケットファクトリーの実装 org.apache.camel.component.http.SSLContextParametersSecureProtocolSocketFactory を提供します。 以下の例は、プロトコルレジストリーを設定し、登録されたプロトコル情報をルートで使用する方法を示しています。
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);
ProtocolSocketFactory factory =
new SSLContextParametersSecureProtocolSocketFactory(scp);
Protocol.registerProtocol("https",
new Protocol(
"https",
factory,
443));
from("direct:start")
.to("https://mail.google.com/mail/").to("mock:results");
Apache HTTP クライアントを直接設定
基本的に、camel-http コンポーネントは Apache HTTP クライアントの上部に構築され、カスタム org.apache.camel.component.http.HttpClientConfigurer を実装して、完全な制御が必要な場合に http クライアントでいくつかの設定を行うことができます。
ただし、キーストアとトラストストア のみ を指定する場合は、Apache HTTP HttpClientConfigurer でこれを行うことができます。以下に例を示します。
Protocol authhttps = new Protocol("https", new AuthSSLProtocolSocketFactory(
new URL("file:my.keystore"), "mypassword",
new URL("file:my.truststore"), "mypassword"), 443);
Protocol.registerProtocol("https", authhttps);
次に、HttpClientConfigurer を実装するクラスを作成し、上記の例ごとにキーストアまたはトラストストアを提供する https プロトコルを登録する必要があります。その後、Camel ルートビルダークラスから、以下のようにフックすることができます。
HttpComponent httpComponent = getContext().getComponent("http", HttpComponent.class);
httpComponent.setHttpClientConfigurer(new MyHttpClientConfigurer());
Spring DSL を使用してこれを行う場合は、URI を使用して HttpClientConfigurer を指定できます。以下に例を示します。
<bean id="myHttpClientConfigurer"
class="my.https.HttpClientConfigurer">
</bean>
<to uri="https://myhostname.com:443/myURL?httpClientConfigurerRef=myHttpClientConfigurer"/>
HttpClientConfigurer を実装し、上記のようにキーストアとトラストストアを設定する限り、問題なく動作します。