3.3. Apache Karaf コンテナーで Undertow の SSL/TLS を有効化

以下の手順では、キーストアパスワード StorePass およびキーパスワード KeyPass で、署名済みの X.509 証明書と秘密鍵のペアがキーストアファイル alice.ks で作成済みであることを前提とします。

Karaf コンテナーで Undertow の SSL/TLS を有効にするには、以下を実行します。

  1. Pax Web サーバーが、etc/undertow.xml ファイルから設定を取得するように設定されていることを確認します。etc/org.ops4j.pax.web.cfg ファイルの内容を確認すると、以下の設定があるはずです。

    org.ops4j.pax.web.config.file=${karaf.etc}/undertow.xml
  2. テキストエディターで etc/org.ops4j.pax.web.cfg ファイルを開き、以下の行を追加します。

    org.osgi.service.http.port.secure=8443

    etc/org.ops4j.pax.web.cfg ファイルを保存して閉じます。

  3. テキストエディターで etc/undertow.xml ファイルを開きます。次の手順では、インストール時以降、変更されていないデフォルトの undertow.xml ファイルで作業することを前提としています。
  4. XML 要素 http-listener および https-listener を検索します。http-listener 要素をコメントアウトし (<!-- および --> で囲み)、https-listener 要素をアンコメントします (2 行使用)。編集された XML のフラグメントは、次のようになります。

    <!-- HTTP(S) Listener references Socket Binding (and indirectly - Interfaces) -->
    <!-- http-listener name="http" socket-binding="http" /> -->
    <!-- verify-client: org.xnio.SslClientAuthMode.NOT_REQUESTED, org.xnio.SslClientAuthMode.REQUESTED, org.xnio.SslClientAuthMode.REQUIRED -->
    <https-listener name="https" socket-binding="https"
            security-realm="https" verify-client="NOT_REQUESTED" />
  5. w:keystore 要素を検索します。デフォルトでは、w:keystore 要素は以下のように設定されます。

    <w:keystore path="${karaf.etc}/certs/server.keystore" provider="JKS" alias="server"
                keystore-password="secret" key-password="secret"
                generate-self-signed-certificate-host="localhost" />

    Undertow サーバーの証明書として alice 証明書をインストールするには、以下のように w:keystore 要素属性を変更します。

    • path を、ファイルシステムにおける alice.ks ファイルの場所 (絶対パス) に設定します。
    • providerJKS に設定します。
    • alias をキーストアの alice 証明書エイリアスに設定します。
    • keystore-password を、キーストアをアンロックするパスワードの値に設定します。
    • key-password を、alice 秘密鍵を暗号化するパスワードの値に設定します。
    • generate-self-signed-certificate-host 属性設定を削除します。
  6. たとえば、alice.ks キーストアをインストールした後に、変更された w:keystore 要素は以下のようになります。

    <w:keystore path="${karaf.etc}/certs/alice.ks" provider="JKS" alias="alice"
                keystore-password="StorePass" key-password="KeyPass" />
  7. セキュアな HTTPS ポートがバインドする IP アドレスを指定するために使用される <interface name="secure"> タグを検索します。デフォルトでは、この要素は次のようにコメントアウトされます。

    <!--<interface name="secure">-->
        <!--<w:inet-address value="127.0.0.1" />-->
    <!--</interface>-->

    要素のコメントを解除し、value 属性をカスタマイズして、HTTPS ポートをバインドする IP アドレスを指定します。たとえば、ワイルドカード値 0.0.0.0 は、利用可能なすべての IP アドレスにバインドするように HTTPS を設定します。

    <interface name="secure">
        <w:inet-address value="0.0.0.0" />
    </interface>
  8. <socket-binding name="https" タグを検索し、コメント解除します。このタグのコメントを解除すると、次のようになります。

    <socket-binding name="https" interface="secure" port="${org.osgi.service.http.port.secure}" />
  9. etc/undertow.xml ファイルを保存して閉じます。
  10. 設定の変更を有効にするために、Fuse コンテナーを再起動します。