検索

229.5.3. リクエスト応答通信を使用した SSL/TCP ベースの Netty コンシューマーエンドポイント

download PDF

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

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

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

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

NettyComponent nettyComponent = getContext().getComponent("netty4", NettyComponent.class);
nettyComponent.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="netty4:tcp://localhost:5150?sync=true&ssl=true&sslContextParameters=#sslContextParameters"/>
...

[[Netty4-UsingBasicSSL/TLSconfigurationontheJettyComponent]] Jetty コンポーネントの基本的な SSL/TLS 設定の使用

JndiRegistry registry = new JndiRegistry(createJndiContext());
registry.bind("password", "changeit");
registry.bind("ksf", new File("src/test/resources/keystore.jks"));
registry.bind("tsf", new File("src/test/resources/keystore.jks"));

context.createRegistry(registry);
context.addRoutes(new RouteBuilder() {
  public void configure() {
      String netty_ssl_endpoint =
         "netty4:tcp://localhost:5150?sync=true&ssl=true&passphrase=#password"
         + "&keyStoreFile=#ksf&trustStoreFile=#tsf";
      String return_string =
         "When You Go Home, Tell Them Of Us And Say,"
         + "For Your Tomorrow, We Gave Our Today.";

      from(netty_ssl_endpoint)
       .process(new Processor() {
          public void process(Exchange exchange) throws Exception {
            exchange.getOut().setBody(return_string);
          }
       }
  }
});

SSLSession およびクライアント証明書へのアクセス

クライアント証明書に関する詳細を取得する必要がある場合は、javax.net.ssl.SSLSession にアクセスできます。ssl=true の場合、Netty4 コンポーネントは以下のように SSLSession を Camel メッセージにヘッダーとして保存します。

SSLSession session = exchange.getIn().getHeader(NettyConstants.NETTY_SSL_SESSION, SSLSession.class);
// get the first certificate which is client certificate
javax.security.cert.X509Certificate cert = session.getPeerCertificateChain()[0];
Principal principal = cert.getSubjectDN();

クライアントを認証するために needClientAuth=true を設定するのを忘れないようにしてください。それ以外の場合、SSLSession はクライアント証明書に関する情報にアクセスできないため、例外 javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated が発生することがあります。また、クライアント証明書の有効期限が切れるか、有効でない場合はこの例外を取得することもできます。

ヒント

sslClientCertHeaders オプションを true に設定し、クライアント証明書に関する詳細が含まれるヘッダーを使用して Camel メッセージを強化できます。たとえば、サブジェクト名は CamelNettySSLClientCertSubjectName ヘッダーで読み取り可能です。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.