173.8. SSL サポート (HTTPS)


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

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

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

Copy to Clipboard Toggle word wrap
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 ベースの設定

Copy to Clipboard Toggle word wrap
...
  <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 モードで実行できるようにするには、URI を https:// 接頭辞でフォーマットします。たとえば、次のようになります。

Copy to Clipboard Toggle word wrap
<from uri="jetty:https://0.0.0.0/myapp/myservice/"/>

Jetty は、正しい SSL 証明書をロードするために、キーストアのロード元と使用するパスワードを知る必要もあります。次の JVM システムプロパティーを設定します。

Camel 2.2 まで

  • jetty.ssl.keystore は、Jetty サーバー独自の X.509 証明書を キーエントリー に含む Java キーストアファイルのロケーションを指定します。キーエントリーには、X.509 証明書 (事実上、公開鍵) とそれに関連付けられた秘密鍵が格納されます。
  • jetty.ssl.password キーストアファイルにアクセスするために必要なストアパスワード (これは、keystore コマンドの -storepass オプションに指定されるパスワードと同じです)。
  • jetty.ssl.keypassword キーストア内の証明書のキーエントリーにアクセスするために使用されるキーパスワード (これは、keystore コマンドの -keypass オプションに指定されるパスワードと同じです)。

Camel 2.3 以降

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

Jetty エンドポイントで SSL を設定する方法の詳細については、Jetty サイトの次のドキュメントを参照してください: http://docs.codehaus.org/display/JETTY/How+to+configure+SSL

一部の SSL プロパティは Camel によって直接公開されていませんが、Camel は基礎となる SslSocketConnector を公開しており、これにより、クライアント証明書を必要とする相互認証のための needClientAuth や、クライアントが証明書を必要としないが証明書を持つことができる相互認証のための wantClientAuth などのプロパティを設定することができます。さまざまな Camel バージョンにはわずかな違いがあります。

Camel 2.2 まで

Copy to Clipboard Toggle word wrap
<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

Copy to Clipboard Toggle word wrap
<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 を使用するように切り替えます *

Copy to Clipboard Toggle word wrap
<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 がリッスンするように設定したポートです。

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

Camel 2.5 で利用可能

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

Copy to Clipboard Toggle word wrap
<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>

173.8.2. X509Certificate への参照を取得する方法

Jetty は、次のようにコードからアクセスできる HttpServletRequest に証明書への参照を格納します。

Copy to Clipboard Toggle word wrap
HttpServletRequest req = exchange.getIn().getBody(HttpServletRequest.class);
X509Certificate cert = (X509Certificate) req.getAttribute("javax.servlet.request.X509Certificate")

173.8.3. 一般的な HTTP プロパティーの設定

Camel 2.5 で利用可能

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

Copy to Clipboard Toggle word wrap
<bean id="jetty" class="org.apache.camel.component.jetty.JettyHttpComponent">
    <property name="socketConnectorProperties">
        <map>
            <entry key="acceptors" value="4"/>
            <entry key="maxIdleTime" value="300000"/>
        </map>
    </property>
</bean>

173.8.4. Obtaining X-Forwarded-For header with HttpServletRequest.getRemoteAddr()

HTTP 要求が Apache サーバーによって処理され、mod_proxy を使用して jetty に転送される場合、元のクライアント IP アドレスは X-Forwarded-For ヘッダーにあり、HttpServletRequest.getRemoteAddr () は Apache プロキシーのアドレスを返します。

Jetty には、X-Forwarded-For から値を取得して HttpServletRequest remoteAddr プロパティーに配置する forwarded プロパティーがあります。  このプロパティーは、エンドポイント設定から直接利用することはできませんが、socketConnectors プロパティーを使用して簡単に追加できます。

Copy to Clipboard Toggle word wrap
<bean id="jetty" class="org.apache.camel.component.jetty.JettyHttpComponent">
    <property name="socketConnectors">
        <map>
            <entry key="8080">
                <bean class="org.eclipse.jetty.server.nio.SelectChannelConnector">
                    <property name="forwarded" value="true"/>
                </bean>
            </entry>
        </map>
    </property>
</bean>

これは、既存の Apache サーバーがドメインの TLS 接続を処理し、それらを内部でアプリケーションサーバーにプロキシーする場合に特に役立ちます。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat, Inc.