SSL を使用した JAX-RS シン・クライアントの保護

Secure Sockets Layer (SSL) トランスポート層セキュリティーを使用することにより、Java™ API for RESTful Web Services (JAX-RS) アプリケーションと、そのアプリケーションを呼び出すクライアントの間の通信を保護することができます。

始める前に

このタスクでは、以下のステップが完了していることを前提としています。
  • アプリケーション・サーバーに対して、またはネットワーク・デプロイメント・マネージャーに統合されたアプリケーション・サーバーに対して、セル・プロファイルを定義済みである。 セル・プロファイルの作成に関する説明を参照し、フェデレーテッド・アプリケーション・サーバー・ノードとデプロイメント・マネージャーを含むセル・プロファイルを作成する方法を学習した。
  • JAX-RS アプリケーションをアプリケーション・サーバーにインストール済みである。

このタスクについて

JAX-RS クライアント・プログラムは、 JAX-RS リソースからの要求および応答を保護するために、Secure Socket Layer (SSL) を使用する トランスポート・セキュリティーを利用することができます。

REST リソース開始時にトランスポート・レベル・セキュリティーに SSL チャネルを 使用するよう JAX-RS アプリケーションを構成した場合、 JAX-RS クライアントは、 WebSphere® Application Server 環境に デプロイされた JAX-RS リソースと対話できるように、SSL 接続を使用する必要があります。例えば、JAX-RS アプリケーション が基本認証を使用するよう構成されている場合、 保護された接続を介してユーザー・クレデンシャルが転送されるように SSL を使用するのが一般的な方法です。

このシナリオの例を示すために、セル内にアプリケーション・サーバーが 1 つ存在し、そのサーバー上に JAX-RS リソースがデプロイされているとします。 このサーバー上のこれらの JAX-RS リソースは、SSL を使用する必要があります。Thin Client for JAX-RS、 (この製品と共に提供される Java ベースのスタンドアロン・クライアント) を使用して、 SSL の使用を必要とするこれらの保護されたリソースの 1 つを呼び出すと想定します。Thin Client for JAX-RS を使用すると、管理対象外の JAX-RS RESTful Web サービス・クライアント・アプリケーション を WebSphere 以外の環境で実行して、アプリケーション・サーバーでホストされている JAX-RS RESTful Web サービスを 呼び出すことができます。

図 1. SSL を使用した JAX-RS シン・クライアントの保護
JAX-RS クライアント・アプリケーションに対して SSL を構成
して、シン・クライアントが、SSL を必要とする JAX-RS アプリケーション・リソースと
対話できるようにします。
重要: ダウンストリーム呼び出しを行う場合など、WebSphere Application Server 環境で実行しているアプリケーションから JAX-RS リソースを呼び出す場合、SSL に関する追加構成は必要ありません。アプリケーション・サーバーの SSL ランタイムおよび構成が使用されるため、このリソースに対して SSL 接続を構成する必要はありません。

Thin Client for JAX-RS で SSL を 構成するには、以下のステップを実行します。

手順

  1. JAX-RS アプリケーションに対してセキュリティーを有効にし、REST リソースを呼び出す際にトランスポートに SSL チャネルを使用するようにアプリケーションを構成します。

    アプリケーションを開発またはデプロイするときに、web.xml ファイルを編集し、リソースに対して SSL の使用を必須とするセキュリティー制約を追加します。アプリケーションに対して SSL を有効にする方法について詳しくは、『Web コンテナー内での JAX-RS アプリケーションの保護』を参照してください。

    security-constraint エレメント内の以下のエレメントは、アプリケーションに対して SSL を強制するように指定します。
    <user-data-constraint id="UserDataConstraint_1">
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
     </user-data-constraint>
  2. ssl.client.props ファイルを編集して、鍵ストアおよびトラストストアのプロパティーを定義します。
    ssl.client.props ファイルは、クライアントに対して SSL を構成するのに 使用されます。以下のコード例は、 鍵ストアおよびトラストストアのプロパティーの定義を示しています。
    # keystore information
    com.ibm.ssl.keystoreName=ClientDefaultKeyStore
    com.ibm.ssl.keyStore= path/to/keystore/file 
    com.ibm.ssl.keyStorePassword=xxxxxxx
    com.ibm.ssl.keyStoreType=PKCS12
    com.ibm.ssl.keyStoreProvider=IBMJCE
    com.ibm.ssl.keyStoreFileBased=true
    
    # truststore information
    com.ibm.ssl.trustStoreName=ClientDefaultTrustStore
    com.ibm.ssl.trustStore=path/to/truststore/file
    com.ibm.ssl.trustStorePassword=xxxxxx
    com.ibm.ssl.trustStoreType=PKCS12
    com.ibm.ssl.trustStoreProvider=IBMJCE
    com.ibm.ssl.trustStoreFileBased=truecom.ibm.ssl.trustStoreReadOnly=false
  3. ホスト名の検証を使用可能または使用不可にします。

    com.ibm.ssl.performURLHostNameVerification プロパティー の値が true に設定されている場合、URL ホスト名の検証が実行されます。 ターゲット・サーバーに対して HTTP URL 接続が行われた場合、サーバー証明書の共通名 (CN) がターゲット・ホスト名と一致している必要があります。 一致していない場合は、ホスト名のベリファイヤーが接続を拒否します。 デフォルト値の false は、この検査を省略します。

    com.ibm.ssl.validationEnabled プロパティー の値が true に設定されている場合、各 SSL 構成はロードされるたびに 検証されます。デフォルト値の false は、この検査を省略します。

    com.ibm.ssl.performURLHostNameVerification=false
    com.ibm.ssl.validationEnabled=false
  4. サーバー証明書の署名者がクライアント・トラストストア内にあることを確認します。

    IBM® iKeyman ツールまたは Java keytool ユーティリティーを使用して、 証明書が既にトラストストア内にあるかどうかを判別します。証明書がトラストストア内にない場合、 証明書をトラストストアにインポートしてください。

    例えば、トラストストア trust.p12 内に含まれている証明書を リストするには、以下のコマンドを入力し、トラストストアへの絶対パスを含め ていることを確認します。

    keytool -list -v -storetype pkcs12 -keystore trust.p12
  5. 証明書をインポートします。

    サーバー証明書の署名者がクライアント・トラストストアにない場合、またはクライアント・トラストストアにない 自己署名証明書をサーバーが持っている場合、証明書をインポートします。

    証明書をインポートするには、IBM iKeyman または Java keytool ユーティリティーのいずれか好みのツールを使用できます。 次の例では、Java keytool ユーティリティー を使用しています。

    1. サーバー用の署名者証明書をファイルにエクスポートします。

      例えば、署名者証明書を、別名 default_signer に対応するエントリー内の既存のトラストストア servertrust.p12 からファイル mycert.cer にエクスポートするには、以下のコマンドを使用します。

      keytool -export -storetype pkcs12 -alias default_signer -file mycert.cer -keystore servertrust.p12
    2. 署名者証明書を、Thin Client for JAX-RS で使用されるトラストストアにインポートします。

      例えば、以下のコマンドを使用して、 既存のトラストストア servertrust.p12 の default_signer 別名に対応するエントリーから、署名者証明書を ファイル mycert.cer にエクスポートします。

      keytool -export -storetype pkcs12 -alias default_signer -file mycert.cer -keystore servertrust.p12
  6. Thin Client for JAX-RS 2.0 で SSL を構成します。

    暗号化された URL を呼び出すには、以下のステップを実行します。

    1. シン・クライアント・アプリケーションを開発する際にクライアント SSL を使用可能にするには、シン・クライアント・アプリケーション・コードにクライアント・プロパティーを追加します。

      クライアント・プロパティー・キーを com.ibm.ws.jaxrs.client.ssl.config に設定し、 その値をサーバーの SSL 別名にします。以下のコード・スニペットを参照してください。

      ClientBuilder cb = ClientBuilder.newBuilder();
      cb.property("com.ibm.ws.jaxrs.client.ssl.config", "NodeDefaultSSLSettings");
      ヒント: プロパティー値は、設定したサーバー SSL 別名と同じです。詳しくは、 「アプリケーション・サーバー」->「サーバー n」 (n はアプリケーション・サーバーに割り当てた番号) ->「Web コンテナー・トランスポート・チェーン」->「WCInboundDefaultSecure」->「SSL インバウンド・チャネル (SSL_2)」と進み、SSL 構成フィールドの下のサーバー SSL 別名を確認してください。
    2. 暗号化された URL を呼び出すには、コマンド行から以下のコード例を実行します。
      [HP-UX][Linux][Solaris]
      java -Dcom.ibm.SSL.ConfigURL=file:///$WAS_HOME/AppServer/profiles/AppSrv01/properties/ssl.client.props -cp .:$WAS_HOME/AppServer/runtimes/com.ibm.jaxrs2.0.thinclient_$VERSION.jar:$WAS_HOME/AppServer/runtimes/com.ibm.jaxws.thinclient_$VERSION.jar:$WAS_HOME/AppServer/com.ibm.ws.admin.client_$VERSION.jar:$WAS_HOME/AppServer/plugins/com.ibm.ws.security.crypto.jar your_package.SSLThinClientProgram <An encrypted URL>
      [Windows]
      java -Dcom.ibm.SSL.ConfigURL=file:///$WAS_HOME/AppServer/profiles/AppSrv01/properties/ssl.client.props -cp .;$WAS_HOME/AppServer/runtimes/com.ibm.jaxrs2.0.thinclient_$VERSION.jar;$WAS_HOME/AppServer/runtimes/com.ibm.jaxws.thinclient_$VERSION.jar your_package.SSLThinClientProgram <An encrypted URL>

タスクの結果

シン・クライアントとターゲット・サーバー間の SSL を使用したセキュア接続を定義し、JAX-RS アプリケーションとご使用のクライアント間の通信の整合性と機密性を確保しました。

次のコード・スニペットは、ssl.client.props ファイルの例を 示します。
# keystore information
com.ibm.ssl.keyStoreName=ClientDefaultKeyStore
com.ibm.ssl.keyStore=c:/jaxrs/test/config/keystore.p12 
com.ibm.ssl.keyStorePassword=testpasswd
com.ibm.ssl.keyStoreType=PKCS12
com.ibm.ssl.keyStoreProvider=IBMJCE
com.ibm.ssl.keyStoreFileBased=true

# truststore information
com.ibm.ssl.trustStoreName=ClientDefaultTrustStore
com.ibm.ssl.trustStore= c:/jaxrs/test/config/truststore.p12
com.ibm.ssl.trustStorePassword=testpasswd
com.ibm.ssl.trustStoreType=PKCS12
com.ibm.ssl.trustStoreProvider=IBMJCE
com.ibm.ssl.trustStoreFileBased=truecom.ibm.ssl.trustStoreReadOnly=false
# Host name verification information
com.ibm.ssl.performURLHostNameVerification=false
com.ibm.ssl.validationEnabled=false

トピックのタイプを示すアイコン タスク・トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_impl_securejaxrs2
ファイル名:twbs_jaxrs_impl_securejaxrs2.0_thinclientssl.html