22.20. 高度な使用方法


HTTP プロデューサーをさらに制御する必要がある場合は、さまざまなクラスを設定してカスタム動作を提供できる HttpComponent を使用する必要があります。

22.20.1. HTTP クライアントの SSL の設定

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

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

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

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);

HttpComponent httpComponent = getContext().getComponent("https", HttpComponent.class);
httpComponent.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="https://127.0.0.1/mail/?sslContextParameters=#sslContextParameters"/>

Apache HTTP クライアントを直接設定する

基本的に camel-http コンポーネントは Apache HttpClient の上に構築されます。詳細については、SSL/TLS のカスタマイズ を参照するか、org.apache.camel.component.http.HttpsServerTestSupport 単体テスト基本クラスを調べてください。
カスタム org.apache.camel.component.http.HttpClientConfigurer を実装して、http クライアントを完全に制御する必要がある場合は、その設定を行うこともできます。

ただし、キーストアとトラストストアを指定する だけ の場合は、Apache HTTP HttpClientConfigurer を使用してこれを行うことができます。次に例を示します。

KeyStore keystore = ...;
KeyStore truststore = ...;

SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("https", 443, new SSLSocketFactory(keystore, "mypassword", truststore)));

次に、HttpClientConfigurer を実装するクラスを作成し、上記の例に従ってキーストアまたはトラストストアを提供する https プロトコルを登録する必要があります。次に、キャメルルートビルダークラスから次のように接続できます。

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?httpClientConfigurer=myHttpClientConfigurer"/>

上記のように HttpClientConfigurer を実装し、キーストアとトラストストアを設定する限り、問題なく動作します。

HTTPS を使用して落とし穴を認証する

あるエンドユーザーが、HTTPS での認証に問題があると報告しました。この問題は、カスタム設定の org.apache.http.protocol.HttpContext を提供することで最終的に解決されました。

  • 1.HttpContexts の (Spring) ファクトリーを作成します。
public class HttpContextFactory {

  private String httpHost = "localhost";
  private String httpPort = 9001;

  private BasicHttpContext httpContext = new BasicHttpContext();
  private BasicAuthCache authCache = new BasicAuthCache();
  private BasicScheme basicAuth = new BasicScheme();

  public HttpContext getObject() {
    authCache.put(new HttpHost(httpHost, httpPort), basicAuth);

    httpContext.setAttribute(ClientContext.AUTH_CACHE, authCache);

    return httpContext;
  }

  // getter and setter
}
  • 2.Spring アプリケーションコンテキストファイルで HttpContext を宣言します。
<bean id="myHttpContext" factory-bean="httpContextFactory" factory-method="getObject"/>
  • 3.http URL でコンテキストを参照します。
<to uri="https://myhostname.com:443/myURL?httpContext=myHttpContext"/>

異なる SSLContextParameters の使用

HTTP コンポーネントは、コンポーネントごとに org.apache.camel.support.jsse.SSLContextParameters の 1 つのインスタンスのみをサポートします。2 つ以上の異なるインスタンスを使用する必要がある場合は、以下に示すように複数の HTTP コンポーネントを設定する必要があります。2 つのコンポーネントがあり、それぞれが sslContextParameters プロパティーの独自のインスタンスを使用しています。

<bean id="http-foo" class="org.apache.camel.component.http.HttpComponent">
   <property name="sslContextParameters" ref="sslContextParams1"/>
   <property name="x509HostnameVerifier" ref="hostnameVerifier"/>
</bean>

<bean id="http-bar" class="org.apache.camel.component.http.HttpComponent">
   <property name="sslContextParameters" ref="sslContextParams2"/>
   <property name="x509HostnameVerifier" ref="hostnameVerifier"/>
</bean>
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.