1.2.13. セキュリティ

ここでは、SSLやWebServices Securityの機能を利用して、セキュアなWebサービスを構築する手順について説明します。

1.2.13.1. SSLの機能

SSLは通信路を暗号化し、通信相手を認証することによって、盗聴、改ざん、なりすましを防止します。JAX-RPCやSAAJにおけるWebサービスでは、SOAPメッセージの外側を覆うHTTPのレイヤーが暗号化の対象になります。つまり、必ずSOAPメッセージ全てが暗号化され、SOAPメッセージの一部だけを暗号化することはできません。また、WebサービスクライアントとWebサービスが1対1のときにのみ有効です。メッセージを受け渡す仲介者がいるような場合は、SSLはあまり有効ではない場合があります。

1.2.13.2. SSLの使用方法

リファレンス集 運用管理・設定編」- 「1. コンフィグレーション(設定一覧)」- 「1.15. 共通SSL設定」 を参照してください。

 

1.2.13.3. Webサービスセキュリティの機能

WebOTXは、OASIS Web ServicesSecurity 1.0 (WS-Security 2004)に対応し、SOAPメッセージレベルにおけるセキュリティ機能を提供しています。SSLとの最大の違いは、認証や暗号化などを行うレイヤーが通信路ではなくメッセージであるということです。用途に応じてどちらの機能を利用するかをご検討ください。

WebOTXのWeb Services Security対応機能を利用すると次のようなことができます。SSLとは違った豊富な機能を持っています。
デジタル署名
クライアントとサーバでやり取りされる双方向のSOAPメッセージに対して、それぞれのSOAP Body要素、あるいはその中の特定の要素を対象としてデジタル署名をすることができます。これにより、メッセージの改ざん、なりすまし、否認を防止します。
暗号化
クライアントとサーバでやり取りされる双方向のSOAPメッセージに対して、それぞれのオペレーション要素の内容(Content)、あるいはその中の特定のパラメータ要素の内容(Content)を暗号化することができます。これにより、メッセージの盗聴を防止します。
タイムスタンプ
クライアントとサーバでやり取りされる双方向のSOAPメッセージに対して、それぞれにタイムスタンプを付与することができます。これにより、リプレイ攻撃などを防止します。タイムスタンプに署名したり、暗号化することもできます。
認証
ユーザネームトークン、デジタル署名、SAMLによる認証機能を提供します。ユーザ名とパスワードの照合は独自の仕組みによって実現していただくことができるほか、WebOTXの持つユーザ認証機構を利用することも可能です。また、ユーザ名やパスワードは暗号化することもできます。SAMLは、WebSAM SECUREMASTER ACPIと連携して、SAML Assertionの付与、検証機能を提供します。これにより、Webサービスにおけるシングルサインオン環境の実現に貢献します。WebOTXは、「Sender-Vouchesモデル」と「Holder-of-keyモデル」におけるリクエスタとレシーバ間のアサーションの付与/検証、および署名の付与/検証を行います。

Sender-Vouchesモデル


図1.2.13.3-1

■登場人物
■前提条件
■処理概要
Caution
Assertion Issuerが発行するAssertion には、以下の<SubjectConfirmation>要素が含まれている必要があります。
<SubjectConfirmation>
  <ConfirmationMethod>urn:oasis:names:tc:SAML:1.0:cm:sender-vouches</ConfirmationMethod>
  ...
</SubjectConfirmation>

Caution
Assertion Issuerが発行するAssertionは事前に取得する必要があります。詳細は、 「注意制限事項」- 「4.3.1. WS-Securityに関する注意事項」 を参照してください。

 

Holder-Of-Keyモデル


図1.2.13.3-2

■登場人物
■前提条件
■処理概要
Caution
Assertion Issuerが発行する Assertion には、以下の<SubjectConfirmation>要素が含まれている必要があります。
<SubjectConfirmation>
  <ConfirmationMethod>urn:oasis:names:tc:SAML:1.0:cm:holder-of-key</ConfirmationMethod>
  ...
</SubjectConfirmation>

Caution
Assertion Issuerが発行するAssertionは事前に取得する必要があります。詳細は、 「注意制限事項」- 「4.3.1. WS-Securityに関する注意事項」 を参照してください。

 

1.2.13.4. Webサービスセキュリティの使用方法

WebOTX DeveloperのWebサービス作成ウィザードでJAX-RPCに準拠するWebサービスを作成する場合、後半の詳細設定画面よりあとにWebサービスセキュリティに関する設定画面があります。JAX-WSに準拠するWebサービスを作成する場合、Webサービスセキュリティに関する設定画面はありません。

 

Webサービス作成ウィザード(JAX-RPC)を使った場合の手順の流れ
Webサービス作成ウィザードを使ってJAX-RPCに準拠するWebサービスを作成し、Webサービスセキュリティの機能を利用する場合、次のような手順で行います。

(1)初期設定

J2SEに対する初期設定を行い、Webサービスセキュリティ関連ライブラリをクラスパスに追加します。

(2)キーストア、鍵、証明書を作成

署名、暗号化を利用する時は、それに必要な鍵や証明書を含んだキーストアをあらかじめ作成しておく必要があります。キーストアの作成は、J2SEのkeytoolコマンドなどを使用することができます。共通鍵(対称鍵)についてはJ2SEのkeytoolコマンドでは生成できないので、後述する「1.2.13.6. xkeytool」を使用します。

(3)署名構成、暗号化構成の設定

WebOTX Developerのメニューからウィンドウ|設定で設定ダイアログを起動し、WebOTX|Webサービスの下にある署名構成、暗号化構成を設定します。

(4)Webサービス作成ウィザード

Webサービス作成ウィザードでJAX-RPCに準拠するWebサービスを作成します。後半の詳細設定画面よりあとにWebサービスセキュリティに関する設定画面があります。

(5)CallbackHandlerの実装

Webサービス作成ウィザードにより作成された各種CallbackHandlerの雛形に、ユーザ名(またはエイリアス)、パスワード、SAMLAssertionを取得するロジックを実装します。

(6)アーカイブ、配備

最後に、セキュリティ機能を利用しないWebサービスと同様に、アーカイブ、配備を行います。

(7)セキュリティ関連ファイルの配置

キーストア、証明書、CRLをドメインに配置します。

 

Webサービス作成ウィザード(JAX-WS)を使った場合の手順の流れ
Webサービス作成ウィザードを使ってJAX-WSに準拠するWebサービスを作成し、Webサービスセキュリティの機能を利用する場合、次のような手順で行います。

(1)初期設定

J2SEに対する初期設定を行い、Webサービスセキュリティ関連ライブラリをクラスパスに追加します。

(2)キーストア、鍵、証明書を作成

署名、暗号化を利用する時は、それに必要な鍵や証明書を含んだキーストアをあらかじめ作成しておく必要があります。キーストアの作成は、J2SEのkeytoolコマンドなどを使用することができます。共通鍵(対称鍵)についてはJ2SEのkeytoolコマンドでは生成できないので、後述する「1.2.13.6. xkeytool」を使用します。

(3)Webサービス作成ウィザード

Webサービス作成ウィザードでJAX-WSに準拠するWebサービスを作成します。

(4)CallbackHandlerの作成

CallbackHandlerクラスを作成し、ユーザ名(またはエイリアス)、パスワード、SAML Assertionを取得するロジックを実装します。

(5)キーストア情報設定ファイルの作成

キーストアの情報を設定します。

(6)信頼性情報設定ファイルの作成

Webサービスセキュリティを使用するためのパラメータを設定します。

(7)アーカイブ、配備

最後に、セキュリティ機能を利用しないWebサービスと同様に、アーカイブ、配備を行います。
※「信頼性情報設定ファイル」も一緒にアーカイブする必要があります。保存場所について、「信頼性情報設定ファイルの保存場所」をご参照下さい。

(8)セキュリティ関連ファイルの配置

キーストア、証明書、CRLをドメインに配置します。

 

SAAJ APIを使って直接SOAPメッセージを処理する場合の手順の流れ
Webサービス作成ウィザードを使わずにSOAPメッセージを直接XML関係のAPIを使って扱うWebサービスならびにWebサービスクライアントを作成する場合、次のような手順で行います。

(1)疎通確認

セキュリティを適用していない状態のWebサービスクライアント〜Webサービスで正しく通信できていることを確認します。

(2)初期設定

J2SEに対する初期設定を行い、Webサービスセキュリティ関連ライブラリをクラスパスに追加します。
Webサービスクライアントなどを作成する際、WebOTX以外のクラスローダ環境でWebサービスセキュリティを動作させる場合に必要なライブラリは次の通りです。これらをクラスパスに追加してください。なお、WebOTX Application Server上で動作させる場合には、「Webサービスセキュリティのライブラリをクラスパスに追加する方法」をご参照下さい。

(3)キーストア、鍵、証明書を作成

署名、暗号化を行う時は、それに必要な鍵や証明書を含んだキーストアをあらかじめ作成しておく必要があります。キーストアの作成は、J2SEのkeytoolコマンドなどを使用することができます。共通鍵(対称鍵)についてはJ2SEのkeytoolコマンドでは生成できないので、後述する「1.2.13.6. xkeytool」を使用します。

(4)ハンドラクラスを作成

ハンドラクラスをSOAPメッセージ送信用、受信用としてそれぞれ必要なものを作成し、Webサービスクライアント、Webサービスの本来のメッセージ処理が始まる前の部分に組み込みます。

(5)キーストア情報設定ファイルを作成

キーストア情報設定ファイルを送信用、受信用としてそれぞれ必要なものを作成し、Webサービスクライアント、Webサービスのクラスパスが通った場所に配置します。

(6)CallbackHandlerを実装します。

ユーザ名(またはエイリアス)、パスワード、SAML Assertionを取得するロジックを含んだ各種CallbackHandlerを、送信側、受信側それぞれに必要なものを実装します。

(7)アーカイブ、配備

アーカイブや配備は、それぞれのアプリケーションの形態に合わせて行います。

(8)セキュリティ関連ファイルの配置

キーストア、証明書、CRLを所定の場所に配置します。

Memo
<WebOTX_DIR>はWebOTXのインストールルートディレクトリのことです。

 

1.2.13.5. Webサービスセキュリティの初期設定

Webサービスセキュリティを利用する場合は、全ての開発を行う前に次の準備を行う必要があります。
Java Cryptography Extension (JCE) UnlimitedStrength Jurisdiction Policy Files
Java Cryptography Extension (JCE) UnlimitedStrength Jurisdiction Policy Filesをお使いのJ2SEに対してインストールする必要があります。WebOTX Application Serverの媒体から、お使いのJ2SEのバージョンに合わせて、「jce_policy-1.5.0.zip」または「jce_policy-6.zip」を取り出し、そのファイルを解凍して得られたファイルを<J2SE_HOME>/jre/lib/securityに置かれているlocal_policy.jar、US_export_policy.jarの2ファイルに上書き置換してください。
Bouncy CastleJCE セキュリティプロバイダの入手
Bouncy CastleJCE セキュリティプロバイダのJARファイルを<WebOTX_DIR>/domains/<ドメイン名>/lib/ext 配下にコピーします。このJARファイルはWebOTX Application Serverの媒体に含まれています。

J2SE 5.0 をお使いの場合は、「bcprov-jdk15-136.jar」をお使いください。J2SE 6.0 をお使いの場合は、「bcprov-jdk16-137.jar」をお使いください。テスト用サーバをインストールしている時は、コピーの後、WebOTXAdminドメインおよび全ドメインを再起動してください。
Bouncy Castle JCE セキュリティプロバイダの登録
<J2SE_HOME>/jre/lib/securityにあるjava.securityにBouncy Castle JCE セキュリティプロバイダを次のように登録してください。
J2SE 5.0の場合
#
# List of providers and their preferenceorders (see above):
#
security.provider.1=sun.security.provider.Sun
security.provider.2=sun.security.rsa.SunRsaSign
security.provider.3=com.sun.net.ssl.internal.ssl.Provider
security.provider.4=com.sun.crypto.provider.SunJCE
security.provider.5=sun.security.jgss.SunProvider
security.provider.6=com.sun.security.sasl.Provider
security.provider.7=org.bouncycastle.jce.provider.BouncyCastleProvider
J2SE 6.0の場合
#
# List of providers and their preferenceorders (see above):
#
security.provider.1=sun.security.provider.Sun
security.provider.2=sun.security.rsa.SunRsaSign
security.provider.3=com.sun.net.ssl.internal.ssl.Provider
security.provider.4=com.sun.crypto.provider.SunJCE
security.provider.5=sun.security.jgss.SunProvider
security.provider.6=com.sun.security.sasl.Provider
security.provider.7=org.jcp.xml.dsig.internal.dom.XMLDSigRI
security.provider.8=sun.security.smartcardio.SunPCSC
security.provider.9=sun.security.mscapi.SunMSCAPI
security.provider.10=org.bouncycastle.jce.provider.BouncyCastleProvider
これらの作業をすべて終了したら、ドメインを(再)起動してください。

Memo
<J2SE_HOME>はJ2SEのインストールルートディレクトリを指します。

Memo
<WebOTX_DIR>はWebOTXのインストールルートディレクトリを指します。

 

Webサービスセキュリティのライブラリをクラスパスに追加する方法
WebOTX Application Server上で動作させる場合、以下のWebサービスセキュリティのライブラリをクラスパスに追加する必要があります。
Express版及びFoundation/Standard/Enterprise版のStandardモードの場合 EXPFNDSTDENT StdM

次のコマンドを実行することで、Webサービスセキュリティのライブラリをクラスパスに追加することができます。(一行で入力してください)
[foo@webotx ~]$ otxadmin set --user ユーザ名 --password パスワード "server.java-config.classpath-suffix=${com.nec.webotx.installRoot}/lib/wss/wss4j.jar${path.separator}${com.nec.webotx.installRoot}/lib/wss/xenc.jar${path.separator}${com.nec.webotx.installRoot}/lib/wss/xsutil.jar${path.separator}${com.nec.webotx.installRoot}/lib/wss/commons-codec-1.3.jar${path.separator}${com.nec.webotx.installRoot}/lib/wss/commons-discovery.jar${path.separator}${com.nec.webotx.installRoot}/lib/wss/commons-httpclient-2.0.jar${path.separator}${com.nec.webotx.installRoot}/lib/wss/commons-logging.jar${path.separator}${com.nec.webotx.installRoot}/lib/wss/dsig.jar${path.separator}${com.nec.webotx.installRoot}/lib/wss/saml11.jar${path.separator}"
Foundation/Standard/Enterprise版のAdvancedモードの場合 FNDSTDENT AdvM

OSに合わせて以下のコマンドを実行することで、Webサービスセキュリティのライブラリをクラスパスに追加することができます。(一行で入力してください)

Windows系
[foo@webotx ~]$ otxadmin add-pg-setenv --setenv CLASSPATH --apgroup アプリケーショングループ名 --value %CLASSPATH%;<WebOTX_DIR>/lib/wss/commons-codec-1.3.jar;<WebOTX_DIR>/lib/wss/commons-discovery.jar;<WebOTX_DIR>/lib/wss/commons-httpclient-2.0.jar;<WebOTX_DIR>/lib/wss/commons-logging.jar;<WebOTX_DIR>/lib/wss/dsig.jar;<WebOTX_DIR>/lib/wss/saml11.jar;<WebOTX_DIR>/lib/wss/wss4j.jar;<WebOTX_DIR>/lib/wss/xenc.jar;<WebOTX_DIR>/lib/wss/xsutil.jar --user ユーザ名 --password パスワード --port 6212 プロセスグループ名
Unix系
[foo@webotx ~]$ <WebOTX_DIR>/bin/otxadmin add-pg-setenv --setenv CLASSPATH --apgroupアプリケーショングループ名 --value $CLASSPATH:<WebOTX_DIR>/lib/wss/commons-codec-1.3.jar:<WebOTX_DIR>/lib/wss/commons-discovery.jar:<WebOTX_DIR>/lib/wss/commons-httpclient-2.0.jar:<WebOTX_DIR>/lib/wss/commons-logging.jar:<WebOTX_DIR>/lib/wss/dsig.jar:<WebOTX_DIR>/lib/wss/saml11.jar:<WebOTX_DIR>/lib/wss/wss4j.jar:<WebOTX_DIR>/lib/wss/xenc.jar:<WebOTX_DIR>/lib/wss/xsutil.jar --userユーザ名 --password パスワード --port 6212プロセスグループ名

Memo
<WebOTX_DIR>はWebOTXのインストールルートディレクトリのことです。

Memo
実行後、Express版以外の場合、アプリケーショングループを再起動する必要があります。

 

1.2.13.6. xkeytool

XKeyToolは、J2SEが提供するkeytoolのラッパーとして機能し、keytoolと同じコマンドをサポートするユーティリティです。J2SEのkeytoolの機能に加えて、共通鍵(対称鍵)の生成にも対応します。
環境構築
xkeytoolを実行するためには、以下のJARファイルをクラスパスに追加する必要があります。bcprov-jdk**-***.jarはWebOTXメディアに含まれていますので、事前にコピーしておきます。事前準備については「Webサービスセキュリティの初期設定」を参照してください。

Memo
<WebOTX_DIR>はWebOTXのインストールルートディレクトリのことです。

コマンド
xkeytool実行時に次のコマンドを1つだけ指定します。指定できるコマンドは次の通りです。
表1.2.13.6-1
コマンド
説明
-certreq
証明書署名要求(CSR)をPKCS#10形式で生成します。
-delete
キーストアからエントリを削除します。
-export
証明書及び鍵をファイルにエクスポートします。
-genkey
鍵ペアとその公開鍵のX.509バージョン1自己署名証明書を生成します。
-help
キーストアコマンドに関するヘルプ情報を提供します。
-identitydb
JDK1.1アイデンティティデータベースをキーストアにインポートします。
-import
証明書、証明書連鎖または、鍵をキーストアにインポートします。
-keyclone
新しいエイリアスで鍵エントリのコピーを生成します。
-keypasswd
鍵エントリの非公開鍵に関連付けられたパスワードを変更します。
-list
キーストアの内容を表示します。
-printcert
ファイル内、または標準入力ストリーム(stdin)からの証明書を印刷します。
-selfcert
X.509バージョン1自己署名証明書を生成します。
-storepasswd
キーストアの保全性を保護するために使用されるパスワードを設定します。
オプション
xkeytool実行時に次のオプションを複数指定することができます。各コマンドで指定できるオプションは決まっています。また、オプション同士に並びの制約はありません。
表1.2.13.6-2
オプション
説明
-alias [alias]
コマンドを適用するエントリのエイリアスを指定します。
-dest [dest_alias]
コマンドの適用先であるエイリアスを指定します。
-dname [dname]
エイリアスに関連付けられるX.509 識別名を指定します。
-file [filename]
コマンドで使用するファイル名を指定します。
-keyalg [keyalg]
鍵生成アルゴリズムの名前を指定します。
-keypass [keypass]
鍵エントリの非公開鍵を保護するのに使用されるパスワードを指定します。
-keysize [keysize]
生成する鍵長を指定します。
-keystore [keystore]
使用するキーストアファイルを指定します。
-new [new_keypass]
鍵エントリの非公開鍵を保護するのに使用される新しいパスワードを指定します。
-noprompt
プログラムとユーザの対話を切断します。
-rfc
RFC1421印刷可能エンコーディング形式の使用を指定します。
-sigalg [sigalg]
使用する署名アルゴリズムを指定します。この値は下位の非公開鍵のアルゴリズムから取得します。下位の非公開鍵がDSAタイプの場合、このオプションはデフォルトでSHA1withDSAとなります。非公開鍵がRSAタイプの場合、このオプションはデフォルトでMD5withRSAとなります。
-storepass [storepass]
キーストアの保全性を保護するために使用されるパスワードを指定します。パスワードは6文字以上でなければならなりません。パスワードは全てのコマンドで使用されなければなりません。
-storetype [storetype]
使用するキーストアのタイプを指定します。デフォルト値はjava.homeプロパティで指定されるディレクトリの/lib/securityにあるjava.securityファイルのkeystore.typeプロパティで指定します。この値はjava.security.KeyStoreです。
-trustcacerts cacerts
キーストアファイルの証明書を鍵ストアの証明書に追加して使用するよう指定します。cacertsファイルはjava.home の/lib/security サブディレクトリにあります。
-v
詳細出力モードを使用します。
-validity [valDays]
証明書の有効日数を指定します。

オプションの初期値は次のようになっています。
表1.2.13.6-3
コマンド
説明
-alias
mykey
-keyalg
DSA
-keysize
1024
-keystore
ユーザのホームディレクトリにある「.keystore」

コマンドに対応する指定可能なオプションは次の通りです。
表1.2.13.6-4
コマンド|オプション
-alias
-dest
-dname
-file
-keyalg
-keypass
-certreq

   
 
-delete

         
-export

   
  ※4
-genkey

  ※1
  ※2

-help
           
-identitydb
     
   
-import

   
 
-keyclone


     
-keypasswd

       
-list

         
-printcert
     
   
-selfcert

 
   
-storepasswd
           

表1.2.13.6-5
コマンド|オプション
-keysize
-trustcerts
-v
-keystore
-new
-noprompt
-certreq
   

   
-delete
   

   
-export

 

   
-genkey

 


 
-help
           
-identitydb
   

   
-import
  ※1


  ※1
-keyclone
   


 
-keypasswd
   


 
-list
   

   
-printcert
   
     
-selfcert
   

   
-storepasswd
   


 

表1.2.13.6-6
コマンド|オプション
-rfc
-sigalg
-storepass
-storetype
-validity
-certreq
 


 
-delete
   

 
-export
※1
 

 
-genkey
  ※1

※3
※1
-help
         
-identitydb
   

 
-import
   

 
-keyclone
   

 
-keypasswd
   

 
-list

 

 
-printcert
         
-selfcert
 



-storepasswd
   

 

※1:共通鍵に対する操作の場合は不要(または無効)です。

※2:共通鍵を生成する場合は以下のいずれかを指定する必要があります。

「TripleDES」、「DESede」、「AES」、「RIJNDAEL」、「ARCFOUR」、「RC4」

※3:共通鍵を生成する場合はJCEKS である必要があります。

※4:共通鍵をエクスポートする場合は必要です。
実行方法
[foo@webotx ~]$ java -Djava.endorsed.dirs="<WebOTX_DIR>/lib/endorsed" com.nec.jp.xml.xenc.tool.XKeyTool <コマンド> <オプション>
実行例
[foo@webotx ~]$ java -Djava.endorsed.dirs="<WebOTX_DIR>/lib/endorsed" com.nec.jp.xml.xenc.tool.XKeyTool -genkey -keystore sample.jceks -alias sample-keyalg AES -keysize 128 -storetype jceks

 

1.2.13.7. 署名構成

WebOTX Developerにおける署名構成の設定について説明します。この操作は、Webサービス作成ウィザードでWebサービスセキュリティを使う場合に必要です。

Caution
Webサービス作成ウィザードでWebサービスセキュリティを設定できるのはJAX-RPCのみです。JAX-WSの場合は、「パラメータリファレンス」を参照して「信頼性情報設定ファイル」を作成する必要があります。

メニューの ウィンドウ|設定 をクリックし、設定ダイアログを起動し、WebOTX|Webサービス|署名構成 を選択して、署名構成の画面を表示します。


図1.2.13.7-1

WebOTXでは、署名についての詳細設定は、「構成」という単位で管理します。構成にはそれぞれ名前をつけて管理します。[新規]ボタンを押すと、新規に構成を作成します。一通り設定を行ったあと、[適用]ボタン、または[OK]ボタンを押すと今表示している構成が保存されます。[削除]ボタンを押すと、今表示している構成を削除します。

■構成名

署名構成の名前を英数文字で設定します。コンボボックスの中にカーソルを合わせると構成名を変更することができます。

■署名アルゴリズム

使用する署名アルゴリズムを選択します。RSA with SHA1、DSA with SHA1は公開鍵暗号方式、Hmac-SHA1は共通鍵暗号方式です。

■鍵または証明書の参照方法

署名検証に使用する公開鍵証明書または鍵の参照方法を指定します。
表1.2.13.7-1
選択肢
説明
DirectReference
メッセージの内部あるいは外部にある証明書をURIで参照します。
IssuerSerial
メッセージの外部にある証明書を、発行者とシリアル番号をキーにして参照します。
SKIKeyIdentifier
メッセージの外部にある証明書を、所有者鍵識別子をキーにして参照します。
EmbeddedReference
メッセージの内部にある証明書を参照します。
EmbeddedKeyName
鍵をエイリアスをキーにして参照します。この方法は署名アルゴリズムでHMac-SHA1を選択すると選択することができます。

■証明書の格納方式

署名に使用した秘密鍵とペアになる公開鍵証明書のBinarySecurityTokenへの格納形態を指定します。証明書チェーンを選択すると、EE証明書とCA証明書を格納します。この設定は、署名アルゴリズムが公開鍵暗号方式(RSAwithSHA1またはDSAwithSHA1)でかつ、証明書の参照方法がDirectReferenceまたはEmbeddedReferenceの場合にのみ有効になります。

■セキュリティトークンの署名を行う/署名方式

署名につけられるセキュリティトークンを署名する場合、チェックします。署名方式は、セキュリティトークンの署名方式です。STRTransformは、セキュリティトークンをwsse:SecurityTokenReference要素で参照し、STR Dereference Transformを使用して署名します。Tokenは、セキュリティトークンをds:Reference要素で参照し、署名します。

■署名を使用して認証を行う

署名を使用して認証を行う場合にチェックします。SOAPメッセージに付与されている通常の署名を検証するのに加えて、署名検証に使用した公開鍵証明書の証明書パスを検証し、送信者の正当性を確認します。

■証明書検証にWebOTXで管理するCRLを参照する

署名を使用した認証において、公開鍵証明書の証明書パスの検証の際に、WebOTXのドメイン単位で管理するCRLを参照するときはチェックします。

■トラストアンカリスト

公開鍵証明書検証で信頼済みとして扱われるトラストアンカ(ルートCA)を指定します。トラストアンカ証明書のファイル名を記述します。複数の時は、セミコロンで区切ります。

 

1.2.13.8. 暗号化構成

WebOTX Developer’s Studioにおける暗号化構成の設定について説明します。この操作は、Webサービス作成ウィザードでWebサービスセキュリティを使う場合に必要です。

Caution
Webサービス作成ウィザードでWebサービスセキュリティを設定できるのはJAX-RPCのみです。JAX-WSの場合は、「パラメータリファレンス」を参照して「信頼性情報設定ファイル」を作成する必要があります。

メニューの ウィンドウ|設定 をクリックし、設定ダイアログを起動し、WebOTX|Webサービス|署名構成 を選択して、署名構成の画面を表示します。


図1.2.13.8-1


■構成名

暗号化構成の名前を英数文字で設定します。コンボボックスの中にカーソルを合わせると構成名を変更することができます。

■暗号化方式

3つの方式については、次の通りです。

・TYPE T

ランダムに生成した対称鍵(セッション鍵)を用いてメッセージを暗号化し、暗号化に使用した対称鍵を公開鍵を用いて暗号化する。

・TYPE U

ランダムに生成した対称鍵(セッション鍵)を用いてメッセージを暗号化し、暗号化に使用した対称鍵をあらかじめ暗号化側と復号化側で既知である対称鍵を用いて暗号化する。

・TYPE V

あらかじめ暗号化側と復号化側で既知である対称鍵を用いて、メッセージを暗号化する。

■データ暗号化アルゴリズム

データの暗号化に使用する暗号化アルゴリズムを選択します。いずれも共通鍵暗号方式です。
使用できる暗号化アルゴリズムは、TripleDES、AES128、AES192、AES256になります。

■鍵暗号化アルゴリズム

鍵の暗号化に使用する暗号化アルゴリズムを選択します。いずれも公開鍵暗号方式です。

■鍵または証明書の参照方法

暗号化に使用した鍵または証明書の参照方法を指定します。
表1.2.13.8-1
選択肢
説明
DirectReference
メッセージの内部あるいは外部にある証明書をURIで参照します。
IssuerSerial
メッセージの外部にある証明書を、発行者とシリアル番号をキーにして参照します。
SKIKeyIdentifier
メッセージの外部にある証明書を、所有者鍵識別子をキーにして参照します。
EmbeddedReference
メッセージの内部にある証明書を参照します。
EmbeddedKeyName
鍵をエイリアスをキーにして参照します。暗号化方式がTYPE 2、3の時に自動的に選択されます。

 

1.2.13.9. WS-Security (ウィザード・JAX-RPC)

ここでは、Webサービス作成ウィザードで行えるセキュリティ設定について説明します。
Web Services Security の設定 1

Caution
ユーザネームトークンの暗号化を行うには、事前に暗号化構成の登録が必要です。

この画面では、ユーザネームトークンに関する設定を行います。

ユーザネームトークンによる認証機能を利用する

ユーザネームトークンによる認証を行いたい場合はチェックします。

認証方式

サーバ側で認証に使うユーザ名とパスワードを取得する方法について選択することができます。ID/Passwordでは、お客様ご自身でユーザ名とパスワードを確認する処理を作成することができます。WebOTXでは、WebOTXが管理するユーザ情報を利用します。

パスワードタイプ

認証方式でID/Passwordを指定すると選択することができます。 ダイジェストは、パスワードをSOAPメッセージに格納する際、WebOTX独自の方法でダイジェスト値に変換します。 テキストは、プレーンテキストをそのまま格納します。

暗号化する

SOAPメッセージに格納するユーザ名、パスワードを暗号化するときにチェックします。

暗号化構成

暗号化に関する設定を行います。事前に設定しておいた暗号化構成が表示されますので、使用するものを選択します。

キーストアの設定

暗号化に用いる鍵を格納したキーストアを設定します。[設定]ボタンを押し、 キーストアタイプを選択し、キーストアファイルを絶対パスで指定します。


図1.2.13.9-1


図1.2.13.9-2

Caution
WebOTX認証、署名による認証については、どちらかしか使用することができません。

Caution
暗号化構成の「暗号化方式」で「TYPE U」または「TYPE V」を選択している時は、「jceks」タイプのキーストアを利用してください。

Memo
暗号化構成の登録方法については、「1.2.13.8. 暗号化構成」の項をご覧ください。

Memo
認証方式がWebOTXの場合とパスワードタイプがテキストの場合、パスワードが覗き見される危険性があります。「暗号化する」にチェックして暗号化するか、SSLを使用するなどして通信路の安全を確保することをおすすめします。

Memo
キーストアの設定は、2画面先の暗号化についての設定(サーバが受信するメッセージ)と同じです。

 

Web Services Security の設定 2

Caution
署名を行うには、事前に署名構成の登録が必要です。

この画面では、署名に関する設定をおこないます。署名は、今作ろうとしているWebサービスが送受信するメッセージに対してそれぞれ付与、検証することができます。

キーストアの設定

署名に用いる鍵を格納したキーストアを設定します。[設定]ボタンを押し、 キーストアタイプを選択し、キーストアファイルを絶対パスで指定してください。

署名対象と詳細設定

署名対象と、その対象を署名するときに使用する構成を指定します。[ 追加]ボタンを押し、署名対象と詳細設定ダイアログで、署名を行いたい場所をメソッド、パラメータで指定します。メソッド、パラメータで選択できるのは、メソッドの選択画面でWebサービス化する指定を行ったものです。また、その署名対象についてあらかじめ設定しておいた署名構成を割り当てることにより、署名の詳細設定を行います。署名対象と詳細設定の一覧表で1つの設定を選択し[ 編集]ボタンを押すと、署名対象と署名構成の設定をやり直すことができます。また、[ 削除]ボタンを押すとその設定を削除することができます。

サービスが受信するメッセージの場合

メソッドで「すべて」を選ぶとSOAP Bodyを署名します。特定のメソッドを指定するとパラメータが選択できるようになります。パラメータで「すべて」を選ぶと、対応するオペレーション要素を署名します。パラメータのコンボボックスには何番目の引数かということと、その型を表示します。特定のパラメータを指定すると、そのパラメータの要素を署名します。署名構成は、認証を行う設定を含んだものを選択することができます。

サービスが送信するメッセージの場合

メソッドで「すべて」を選ぶとSOAP Bodyを署名します。特定のメソッドを指定すると、対応するオペレーション要素を署名します。署名構成は、認証を行う設定を含んだものを選択してはいけません。


図1.2.13.9-3


図1.2.13.9-4


図1.2.13.9-5


図1.2.13.9-6

Caution
認証は、WebOTX認証、署名による認証のどちらかしか使用することができません。

Caution
認証を行う設定を持つ複数の署名構成を同時に指定することはできません。

Caution
認証を行う設定を持つ署名構成と、そうでない署名構成を同時に指定することはできません。

Caution
複数のメソッドに対してそれぞれ別々の署名構成を割り当てることはできません。

Memo
署名構成の登録方法については、「1.2.13.7. 署名構成」の項をご覧ください。

 

Web Services Security の設定 3

Caution
暗号化を行うには、事前に暗号化構成の登録が必要です。

この画面では、暗号化に関する設定をおこないます。暗号化は、今作ろうとしているWebサービスが送受信するメッセージに対してそれぞれ行うことができます。

キーストアの設定

暗号化に用いる鍵を格納したキーストアを設定します。[設定]ボタンを押し、 キーストアタイプを選択し、キーストアファイルを絶対パスで指定してください。

暗号化対象と詳細設定

暗号化対象と、その対象を暗号化するときに使用する構成を指定します。[ 追加]ボタンを押し、暗号化対象と詳細設定ダイアログで、署名を行いたい場所をメソッド、パラメータで指定します。メソッド、パラメータで選択できるのは、メソッドの選択画面でWebサービス化する指定を行ったものです。また、その暗号化対象についてあらかじめ設定しておいた暗号化構成を割り当てることにより、暗号化の詳細設定を行います。暗号化対象と詳細設定の一覧表で1つの設定を選択し[ 編集]ボタンを押すと、暗号化対象と暗号化構成の設定をやり直すことができます。また、[ 削除]ボタンを押すとその設定を削除することができます。

サービスが受信するメッセージの場合

メソッドを指定すると、パラメータが選択できるようになります。パラメータで「すべて」を選ぶと、対応するオペレーション要素の内容を暗号化します。パラメータのコンボボックスには何番目の引数かということと、その型を表示します。特定のパラメータを指定すると、そのパラメータの要素の内容を暗号化します。

サービスが送信するメッセージの場合

メソッドを指定すると、対応するオペレーション要素の内容を暗号化します。


図1.2.13.9-7


図1.2.13.9-8


図1.2.13.9-9


図1.2.13.9-10

Caution
暗号化構成の「暗号化方式」で「TYPE2」または「TYPE3」を選択している時は、「jceks」タイプのキーストアを利用してください。

Caution FNDSTDENT
WebOTX Foundation/Standard/Enterprise ではオペレーション名を判断する必要があるため、SOAP Body要素の内容全体を暗号化する設定はできません。

Memo
SOAPメッセージ形式がencodedで、配列やJavaBeanの受け渡しをし、その部分を暗号化する場合、オペレーション要素の外に実際に受け渡しする値が書かれるため、本当に暗号化したい部分が暗号化されるかどうかについては保証しません。配列やJavaBeanの中にプリミティブ型以外の値を持つ構造のパラメータを含むメソッドの暗号化には十分ご注意ください。

なお、SOAPメッセージ形式がliteralの場合は、完全に暗号化されることを保証します。暗号化を利用する場合はliteral(WS-Iモードを含む)の使用を推奨します。

 

Web Services Security の設定 4

Caution
タイムスタンプの署名を行うには、事前に署名構成の登録が必要です。

この画面では、タイムスタンプに関する設定をおこないます。タイムスタンプは、今作ろうとしているWebサービスが送受信するメッセージに対してそれぞれ付与・検証することができます。

■メッセージの有効時間

メッセージの有効時間を秒単位で指定します。初期値は300秒です。この有効時間を越すと、たとえ正しいメッセージが送られてきても不正なメッセージとして判断されます。HTTPのレイヤーでセッションタイムアウトを設定する場合、それよりも短い時間にする必要があります。

■署名する

タイムスタンプの値に署名する場合、チェックボックスにチェックを入れ、あらかじめ登録してある署名構成を選択します。

■暗号化する

タイムスタンプの値を暗号化する場合、チェックボックスにチェックを入れ、あらかじめ登録してある暗号化構成を選択します。


図1.2.13.9-11

 

Web Services Security の設定 5

Caution
SAMLアサーションを署名する、またはHolder-Of-Keyモデルを使用するには、事前に署名構成の登録が必要です。

この画面では、SAMLアサーションの付与・検証についての設定を行います。SAMLは、今作ろうとしているWebサービスが送受信するメッセージに対してそれぞれ付与・検証することができます。

■モデル

この機能の処理モデルを選択します。

■署名する

SAMLアサーションに署名する場合、チェックボックスにチェックします。

■参照する署名構成

Holder-Of-Keyモデルを選択した場合、署名する場合に、あらかじめ登録してある署名構成を選択します。署名構成は、「署名を使用して認証を行う」にチェックし、トラストアンカリストを指定しているものでなければなりません。また、Holer-Of-Keyモデルかつ署名する場合、署名構成では「鍵または証明書の参照方法」で「SKIKeyIdentifier」を指定していなければなりません。


図1.2.13.9-12

 

Web Services Security の設定 6
この画面では、SOAP Role(SOAP Actor)、mustunderstandの値を設定します。

SOAP Role(SOAP Actor)を設定すると、SOAPメッセージの受信側がセキュリティヘッダを処理すべきかどうかの判断をすることができます。アグリゲーションサービスのように、SOAPメッセージを次のサービスへ持ちまわり、ある特定のセキュリティ処理をある特定のサービスが受け持つような場合、設定しておく必要があります。特に設定する必要がない場合は、空にしておいて構いません。

mustunderstand属性は、セキュリティヘッダの処理が必須かどうかを設定することができます。例えば、アグリゲーションサービスのように、SOAPメッセージを次のサービスへ持ちまわり、ある特定のセキュリティ処理をある特定のサービスが受け持つような場合、経由するサービスは必ずしもセキュリティヘッダを処理しなければならないというわけではありません。この場合ならば、経由するサービスを構築するときにはチェックをはずす必要があります。


図1.2.13.9-13

 

Webサービス作成の開始
Webサービスを作成するための設定はすべて終了しました。[ 完了]ボタンを押して、Webサービスの作成を開始します。


図1.2.13.9-14

 

1.2.13.10. CallbackHandlerの実装

Client/ServerSenderCallbackHandler
メッセージの送信側でユーザ名(エイリアス)、パスワードを設定するためのクラスです。クラス名の最初の「Client」、「Server」は、このクラスがクライアントとサーバのどちらで働くかを表すためにWebサービス作成ウィザードが自動的に付加します。また、「TODO:」というコメントのあとに、ユーザネームトークンのユーザ名・パスワードの取得、署名付与に使用する鍵のエイリアス・パスワードの取得、暗号化に使用する鍵のエイリアス・パスワードの取得ができるように実装するだけで済みます。

SenderCallbackHandlerの例
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;
import java.io.IOException;
import org.apache.ws.security.WSUserInfoCallback;

public class ClientSenderCallbackHandler implements CallbackHandler {
  public void handle(Callback[] callbacks) throws IOException ,UnsupportedCallbackException {
    for (int i =0; i < callbacks.length; i++) {
      if(callbacks[i] instanceof WSUserInfoCallback) {
        WSUserInfoCallback pc = (WSUserInfoCallback) callbacks[i];
        int usage = pc.getUsage();
        String username = null;
        String password = null;
        
        // TODO:
        // here call afunction/method to lookup the password for
        // the given identifier
        switch (usage){
          case WSUserInfoCallback.USERNAME_TOKEN:
          username ="foo1";
          password ="var1";
          break;
        case WSUserInfoCallback.SIGNATURE:
          username = "foo2";
          password = "var2";
          break;
        case WSUserInfoCallback.ENCRYPT:
          username = "foo3";
          password = "var3";
          break;
        default:
          break;
        }
        pc.setUsername(username);
        pc.setPassword(password);
      } else {
        throw new UnsupportedCallbackException(callbacks[i],"UnrecognizedCallback");
      }
    }
  }
}
    

 

Client/ServerReceiverCallbackHandler
メッセージの受信側でパスワードを設定するためのクラスです。クラス名の最初のClient、Serverは、このクラスがクライアントとサーバのどちらで働くかを表すためにWebサービス作成ウィザードが自動的に付加します。また、「TODO:」というコメントのあとに、ユーザネームトークンのパスワードの取得、署名検証に使用する鍵のパスワードの取得、復号化に使用する鍵のパスワードの取得ができるように実装するだけで済みます。

ReceiverCallbackHandlerの例
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;
import java.io.IOException;
import org.apache.ws.security.WSPasswordCallback;

public class ServerReceiverCallbackHandler implements CallbackHandler {
  public void handle(Callback[] callbacks) throws IOException , UnsupportedCallbackException {
    for (int i =0; i < callbacks.length; i++) {
      if(callbacks[i] instanceof WSPasswordCallback) {
        WSPasswordCallback pc = (WSPasswordCallback) callbacks[i];
        int usage =pc.getUsage();
        String identifier = pc.getIdentifier();
        String password = null;
        
        // TODO:
        // here call afunction/method to lookup the password for
        // the given identifier
        switch (usage){
          case WSPasswordCallback.USERNAME_TOKEN:
            password ="";
            break;
          case WSPasswordCallback.SIGNATURE:
            password ="";
            break;
          case WSPasswordCallback.DECRYPT:
            password ="";
            break;
          default:
            break;
        }
        pc.setPassword(password);
      } else {
        throw new UnsupportedCallbackException(callbacks[i],"UnrecognizedCallback");
      }
    }
  }
} 
    

 

KeystoreCallbackHandler
キーストアのパスワードを取得するためのクラスです。Webサービス作成ウィザードが生成した雛形の場合、生成された雛形の「TODO:」というコメントのあとに、各キーストアファイルごとのパスワードが取得できるように実装すれば済みます。また、このクラスはクライアント側、サーバ側で共通して使用することを前提として生成しますが、送信側と受信側で別々にすることもできます。その場合は、キーストア情報設定ファイルを送信側と受信側で別々にし、それぞれに設定を行うようにします。

KeystoreCallbackHandlerの例
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;
import java.io.IOException;
import org.apache.ws.security.WSKeyStorePasswordCallback;

public class KeystoreCallbackHandler implements CallbackHandler {
  public void handle(Callback[] callbacks) throws IOException ,UnsupportedCallbackException {
    for (int i =0; i < callbacks.length; i++) {
      if(callbacks[i] instanceof WSKeyStorePasswordCallback) {
        WSKeyStorePasswordCallback pc = (WSKeyStorePasswordCallback) callbacks[i];
        // keystore'sfile name
        String identifier = pc.getIdentifier();
        String password = null;
        
        // TODO:
        // here call afunction/method to lookup the password for
        // the given identifier
        if (identifier.equals("keystore/store1.jks")) {
          password ="foo";
        } else if(identifier.equals("keystore/store2.jks")) {
          password ="var";
        }
        pc.setPassword(password);
      } else {
        throw new UnsupportedCallbackException(callbacks[i],"UnrecognizedCallback");
      }
    }
  }
}
    
※キーストアファイルは「keystore/<キーストアファイル名>」で指定してください。今後の説明は、その設定に沿って行います。

 

Client/ServerSAMLAssertionCallbackHandler
メッセージの送信側でSAMLAssertionを取得するためのクラスです。クラス名の最初のClient、Serverは、このクラスがクライアントとサーバのどちらで働くかを表すためにWebサービス作成ウィザードが自動的に付加します。ここでは、WebSAM SECUREMASTERから取得したAssertionを、assertion変数に代入します。

SAMLAssertionCallbackHandlerの例
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;
import java.io.FileReader;
import java.io.IOException;
import org.apache.ws.security.WSSAMLAssertionCallback;

public class ClientSAMLAssertionCallbackHandler implements CallbackHandler {
  public void handle(Callback[] callbacks) throws IOException ,UnsupportedCallbackException {
    for (int i =0; i < callbacks.length; i++) {
      if(callbacks[i] instanceof WSSAMLAssertionCallback) {
        WSSAMLAssertionCallback pc = (WSSAMLAssertionCallback) callbacks[i];
        String assertion = null;
        // TODO:Acquisition of SAML Assertion.
        String assnFile = "foo.xml";
        assertion =readFile( assnFile );
        pc.setAssertion(assertion);
      } else {
        throw new UnsupportedCallbackException(callbacks[i],"UnrecognizedCallback");
      }
    }
  }

  private String readFile(String fname) throws IOException {
    FileReader reader = new FileReader(fname);
    char[] buf = new char[1024];
    StringBuffer sbuf = new StringBuffer();
    int n;
    while((n =reader.read(buf)) != 0) {
      sbuf.append(new String(buf,0,n));
      if(n<buf.length) break;
    }
    return sbuf.toString();
  }
}
    

 

1.2.13.11. Web Services Security関連ファイルの配置

Webサービス作成ウィザードを使った場合、クライアント環境となるWebサービスプロジェクト内では、すでにセキュリティ関連ファイルは規定の場所に配置されて生成されます。しかし、サーバ環境やWebサービス作成ウィザードが作成したものとは違ったクライアント環境では、キーストアファイル、証明書、CRLを所定の場所に手動で配置する必要があります。次の場所はWebOTXApplication Serverで既定となっているディレクトリです。キーストア情報設定ファイル、ハンドラクラスの初期値で置き場所を明示的に変えた場合は、その場所に配置してください。

 <domain-root>/config/keystore/配下 ・・・キーストアファイル
 <domain-root>/config/cert/ 配下 ・・・証明書
 <domain-root>/config/crl/ 配下 ・・・CRL

Memo
<domain-root >は使用するドメインのルートディレクトリのことです。

 

1.2.13.12. ハンドラクラスを作成する

WebOTX DeveloperのWebサービス作成ウィザードを使わずに、SOAPを直接扱うWebサービスやWebサービスクライアントを作成するときには、ハンドラクラスを作成する必要があります。Webサービス作成ウィザードを使う場合は、ウィザードがハンドラクラスを自動的に生成するため、特にこの作業を行う必要はありません。

Webサービスセキュリティ機能は、JAX-RPCハンドラとして実装されていますが、その内部ではSAAJで定義されるjavax.xml.soap.SOAPMessageを受け取り、SOAPメッセージに対して様々なWebサービスセキュリティの処理を行い、処理後のjavax.xml.soap.SOAPMessageを返すという単純な仕組みになっています。そのため、JAX-RPCハンドラ機構に似た構造を簡単に自作して、直接Webサービスセキュリティモジュールを呼び出して使用することが可能です。

■実装方法

(1) 次のインタフェースを作成します。コンパイルしたclassファイルをパッケージ単位でJARファイルにアーカイブします。WebOTX上で使用する場合、使用するWebOTXのドメインのlibディレクトリ(例:<WebOTX_DIR>/domains/domain1/lib)に配置し、対象のドメインを再起動します。WebOTX以外の環境では、クラスパスに追加します。

※WebOTX Enterprise Service Busをインストールしているドメインについては、この作業は不要です。
package com.nec.webotx.jbi.binding.soap;
public interface SoapMessageHandlerIF {
  public void init(java.util.MapinitParam);
  public boolean handleFault(javax.xml.soap.SOAPMessage soapMessage, java.util.Mapproperties);
  public boolean handleToRouter(javax.xml.soap.SOAPMessage soapMessage, java.util.Mapproperties);
  public boolean handleFromRouter(javax.xml.soap.SOAPMessage soapMessage, java.util.Mapproperties);
}
(2) org.apache.ws.security.jbi.WssSoapMessageHandlerクラスをnewして呼び出します。 org.apache.ws.security.jbi.WssSoapMessageHandlerは、com.nec.webotx.jbi.binding.soap. SoapMessageHandlerIFの実装クラスです。

(3) パラメータリファレンスを見ながら初期化パラメータと値のプロパティを作成し、org.apache.ws.security.jbi.WssSoapMessageHandlerのinitメソッドの引数に与えてinitメソッドを実行します。

(4) handle〜メソッドを実行します。handleToRouterは送信側から受信側へ流れるリクエストメッセージについてセキュリティ処理をするとき、handleFromRouterは受信側から送信側へ流れるレスポンスメッセージについてセキュリティ処理をするとき、handleFaultはレスポンスメッセージがSOAP Faultの場合にセキュリティ処理をするとき、にそれぞれ呼び出されます。

第1引数は、セキュリティ処理をするべきSOAPメッセージ、第2引数はセキュリティ処理した結果を次のハンドラに受け渡すためのプロパティです。org.apache.ws.security.jbi.WssSoapMessageHandlerクラスを単数呼び出せばよい場合、または複数のうちの最初に呼び出すインスタンスの場合、new java.util.HashMap() のようにして空のプロパティを作り、引数に渡してください。逆に、複数のうちの2番目以降に呼び出すハンドラに該当する場合、先に作っておいたインスタンスをそのまま引数に渡します。

実装イメージ
SOAPMessage soapMessage = セキュリティ処理対象のSOAPメッセージ;

SoapMessageHandlerIF handler1 = new org.apache.ws.security.jbi.WssSoapMessageHandler();
SoapMessageHandlerIF handler2 = new org.apache.ws.security.jbi.WssSoapMessageHandler();

Map initParam1 = new HashMap();
initParam1.put("パラメータ名", "値");
handler1.init(initParam1);

Map initParam2 = new HashMap();
initParam2.put("パラメータ名", "値");
handler2.init(initParam2);

Map properties = new HashMap();
handler1.handleToRouter(soapMessage,properties);
handler2.handleToRouter(soapMessage,properties);
※受信側のハンドラクラスは必ず単数です。送信側に個数の制限はありません。

※送信側で複数のハンドラが必要な場合、(2)〜(4)の作業を繰り返します。

 

1.2.13.13. キーストア情報設定ファイルの作成法

キーストア情報設定ファイルとは、キーストアの情報について記述するプロパティファイルです。Webサービス作成ウィザード(JAX-RPC)を使用した場合には自動的に作成されるので、この作業を行う必要はありません。

キーストア情報設定ファイルの例
org.apache.ws.security.crypto.merlin.keystore.passwordCallbackClass=sample.SampleKeystoreCallbackHandler
org.apache.ws.security.crypto.merlin.keystore.type=jks
org.apache.ws.security.crypto.merlin.file=keystore/sample.jks
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
1つ目は、送信側あるいは受信側でキーストアのエイリアスやパスワードを取得するためのキーストアコールバックハンドラのクラスを設定します。

2つ目はキーストアの形式を設定します。「jks」「pkcs12」「jceks」のうちの1つを設定します。

3つ目はキーストアファイルの場所を指定します。絶対パスでも、ユーザーホームディレクトリからのパスを指定しても構いません。WebOTX Application Serverではキーストアの置き場所として<DOMAIN_ROOT>/config/keystoreを用意していますので、そこにキーストアファイルを置く場合は上記の例のように「keystore/〜」と指定できます。

4つ目は固定値です。上記の例の通り記述してください。

キーストア情報設定ファイルが完成したら、送信側、受信側ともクラスパスの通っているところに配置してください。

 

1.2.13.14. 信頼性情報設定ファイルの作成法

信頼性情報設定ファイルとは、信頼性の情報について記述するプロパティファイルです。 JAX-WSに準拠するWebサービスのみに有効です。 セキュリティ情報を設定する場合、サービス側もクライアント側も両方とも信頼性情報設定ファイルを作成する必要があります。

 

信頼性情報設定ファイル名の命名規則
wsit-Webサービス名-[client|service]-config.xml
パラメータは以下のようになっています。
表1.2.13.14-1
パラメータ
説明
wsit
固定で、変更不可です。
Webサービス名
Webサービス名を指定します。
Webサービス作成ウィザード(JAX-WS)を使って、Webサービスを作成した場合、[Webサービスの基本設定]画面で設定したWebサービス名になります。
[client|service]
信頼性情報設定ファイルがクライアントとサーバのどちらで働くかを表します。
    client:クライアント側
    service:サービス側
config
固定で、変更不可です。

例:Webサービス名が「sampleService」の場合のサービス側の信頼性情報設定ファイル名は以下の通り。
wsit-sampleService-[client|service]-config.xml

 

信頼性情報設定ファイルの書き方
信頼性情報設定ファイルは次のような構造をもっています。
<wsit-configuration xmlns:・・・>
  <wss-configuration>
    <wss-enable>
      true或いはfalse
    </wss-enable>
    <wss-process-infos>
      <wss-process-info>
        <param>
          <name>
            パラメータ名
          </name>
          <value>
            パラメータ値
          </value>
        </param>
      </wss-process-info>
    </wss-process-infos>
  </wss-configuration>
  <wsr-configuration>
    <wsr-enable>
      true或いはfalse
    </wsr-enable>
  </wsr-configuration>
</wsit-configuration>

Memo
wsit-configurationに名前空間を指定することが必要です。

指定できる要素は以下の通りです。
表1.2.13.14-2
要素名
数量
説明
wsit-configuration
[1〜1]
設定情報。
wss-configuration
[0〜1]
セキュリティの設定情報。
wss-enable
[1〜1]
セキュリティを有効にするか否かを指定します。
    true:有効にします。
    false:無効にします。
wss-process-infos
[0〜1]
セキュリティ情報群。
wss-process-info
[0〜+∞]
単一のセキュリティ情報
複数存在した場合、その順番はセキュリティの処理順番です。
param
[1〜+∞]
セキュリティ設定パラメータ
下位要素としての[name,value]ペアは一つのみです。
name
[1〜1]
パラメータ名
value要素と一緒に使用します。
具体的には「1.2.13.15. パラメータリファレンス」をご参照下さい。
value
[1〜1]
設定値
name要素と一緒に使用します。
具体的には「1.2.13.15. パラメータリファレンス」をご参照下さい。
wsr-configuration
[0〜1]
高信頼メッセージングの設定情報。
wsr-enable
[1〜1]
高信頼メッセージングを有効にするか否かを指定します。
    true:有効にします。
    false:無効にします。

Memo
高信頼メッセージングの内容について、「1.2.14. 高信頼メッセージング」をご参照下さい。

信頼性情報設定ファイルの設定例
<?xml version="1.0" encoding="UTF-8"?>
<nsl:wsit-configuration xmlns:nsl="http://webotx.nec.com/wsit/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://webotx.nec.com/wsit/">
  <nsl:wss-configuration>
    <nsl:wss-enable>true</nsl:wss-enable>
    <nsl:wss-process-infos>
      <nsl:wss-process-info>
        <nsl:param>
          <nsl:name>action</nsl:name>
          <nsl:value>Signature</nsl:value>
        </nsl:param>
        <nsl:param>
          <nsl:name>mustUnderstand</nsl:name>
          <nsl:value>true</nsl:value>
        </nsl:param>
        <nsl:param>
          <nsl:name>signaturePropFile</nsl:name>
          <nsl:value>server_receiver_sig_keystore.properties</nsl:value>
        </nsl:param>
        <nsl:param>
          <nsl:name>passwordCallbackClass</nsl:name>
          <nsl:value> com.nec.webotx.webservice.director.E_Sig_RSA_DirectReference.ServerReceiverCallbackHandler</nsl:value>
        </nsl:param>
        <nsl:param>
          <nsl:name>deployment</nsl:name>
          <nsl:value>server-request</nsl:value>
        </nsl:param>
        <nsl:param>
          <nsl:name>actor</nsl:name>
          <nsl:value>http://schemas.xmlsoap.org/soap/actor/next</nsl:value>
        </nsl:param>
      </nsl:wss-process-info>
    </nsl:wss-process-infos>
  </nsl:wss-configuration>
</nsl:wsit-configuration>

 

信頼性情報設定ファイルの保存場所
信頼性情報設定ファイルの保存場所は以下の通りです。

・ Javaアプリケーション(Jarファイル):ルートフォルダ

・ EJBモジュール(Jarファイル):ルートフォルダ

・ Webモジュール(Warファイル):WEB-INF/classesフォルダ

※「信頼性情報設定ファイル」もWebサービスファイルと一緒にアーカイブする必要があります。

 

1.2.13.15. パラメータリファレンス

WebサービスセキュリティをJAX-WS、WebOTX ESB、SOAPを直接扱うWebサービスやWebサービスクライアントで扱う場合、ハンドラクラスの初期化パラメータと、送り込む値の詳細を知らなければWebサービスセキュリティを動作させることはできません。ここでは、目的別にパラメータ名と設定する値について説明します。
各機能に共通のパラメータ設定
ここでは、ハンドラクラス1つにつき必ず設定する各機能に共通するパラメータについて説明します。ここで示すパラメータと値は、各ハンドラに必ず与えなければなりません。

■送信側
表1.2.13.15-1
パラメータ

説明
action
(処理の種別を指定します。複数設定したい場合は、複数のハンドラクラスを使用します。)
Signature
署名機能、署名認証を使用するときに指定します。
Encrypt
暗号化機能を称するときに指定します。
UsernameToken
ID/Password認証、WebOTX認証を使用するときに指定します。
Timestamp
タイムスタンプ付与機能を使用するときに指定します。
SAMLTokenUnsigned
SAML Assertion付与機能(署名を付与しない)を使用するときに指定します。
SAMLTokenSigned
SAML Assertion付与機能(署名を付与する)を使用するときに指定します。
NoSerialization
複数の送信用ハンドラを使用する場合、最後に指定したハンドラ以外の場合にスペース区切りで追加指定します。
deployment
(どのメッセージに対して処理をするかを識別します。)
server-response
(inbound-response)
Webサービスからのレスポンスメッセージに対して処理を有効にしたい場合に指定します。
ESBのSOAP BC場合、inboundからレスポンスメッセージに対して処理を有効にしたい場合に指定します。
client-request
(outbound-request)
Webサービスクライアントからのリクエストメッセージに対して処理を有効にしたい場合にしていします。
ESBのSOAP BC場合、outboundからのリクエストメッセージに対して処理を有効にしたい場合に指定します。
actor
(メッセージの受信者の識別子を指定します。)
<URI>
受信者の識別子を表すURIを指定します。
SOAP1.1の場合、
  http://schemas.xmlsoap.org/soap/actor/next
を指定します。
SOAP1.2の場合、
  http://www.w3.org/2003/05/soap-envelope/role/next
を指定します。
mustUnderstand
(メッセージの受信者がSecurityヘッダを必ず処理しなければならないかどうかを指定します。)
true
処理が必須の場合に指定します。
false
処理が任意の場合に指定します。

■受信側
表1.2.13.15-2
パラメータ

説明
action
(処理の種別を指定します。複数のときは、処理すべき順番にスペース区切りで指定します。)
Signature
署名検証機能、署名認証、署名付きのSAML Assertionの検証機能を使用するときに指定します。
Encrypt
復号化機能を使用するときに指定します。
UsernameToken
ID/Password認証、WebOTX認証を使用するときに指定します。
Timestamp
タイムスタンプ検証機能を使用するときに指定します。
SAMLTokenUnsigned
SAML Assertion検証機能を使用するときに指定します。
deployment
(どのメッセージに対して処理をするかを識別します。)
server-request
(inbound-request)
Webサービスが受け取ったリクエストメッセージに対して処理を有効にしたい場合に指定します。
ESBのSOAP BC場合、inboundのが受け取ったリクエストメッセージに対して処理を有効にしたい場合に指定します。
client-response
(outbound-response)
Webサービスクライアントが受け取ったレスポンスメッセージに対して処理を有効にしたい場合にしていします。
ESBのSOAP BC場合、outboundが受け取ったのレスポンスメッセージに対して処理を有効にしたい場合に指定します。
actor
(メッセージの受信者の識別子を指定します。)
<URI>
受信者の識別子を表すURIを指定します。
SOAP1.1の場合、
  http://schemas.xmlsoap.org/soap/actor/next
を指定します。
SOAP1.2の場合、
  http://www.w3.org/2003/05/soap-envelope/role/next
を指定します。
mustUnderstand
(メッセージの受信者がSecurityヘッダを必ず処理しなければならないかどうかを指定します。)
true
処理が必須の場合に指定します。
false
処理が任意の場合に指定します。
署名・署名検証関連のパラメータ設定
●RSAまたはDSAアルゴリズムを利用する

■送信側
表1.2.13.15-3
パラメータ

説明
action
Signature
 
signatureAlgorithm(署名アルゴリズムを指定します。)
http://www.w3.org/2000/09/xmldsig#dsa-sha1
DSAwithSHA1 アルゴリズムを使用する場合に指定します。
http://www.w3.org/2000/09/xmldsig#rsa-sha1
RSAwithSHA1 アルゴリズムを使用する場合に指定します。
signaturePropFile
<キーストア情報設定ファイル名>
キーストア情報設定ファイルのパスを指定します。
signatureKeyIdentifier
(署名検証に使用する公開鍵証明書または鍵の参照方法を指定します。)
DirectReference
メッセージの内部あるいは外部にある証明書をURIで参照します。
IssuerSerial
メッセージの外部にある証明書を、発行者とシリアル番号をキーにして参照します。
SKIKeyIdentifier
メッセージの外部にある証明書を、所有者鍵識別子をキーにして参照します。
EmbeddedReference
メッセージの内部にある証明書を参照します。
useSingleCert(署名に使用した秘密鍵とペアになる公開鍵証明書のBinarySecurityTokenへの格納形態を指定します。)
true
BinarySecurityTokenにEE証明書のみを格納します。
false
BinarySecurityTokenに証明書チェーン(EE証明書 + CA証明書)を格納します。
userInfoCallbackClass
<コールバックハンドラクラス名>
署名に使用する鍵のエイリアスとパスワードを取得するためのコールバックハンドラクラス名を指定します。
signatureParts
(署名対象を指定します。)
{}{XPath}{}
XPathには署名対象を表すXPath式を指定します。
{}{XPath}{};STRTransform
XPathには署名対象を表すXPath式を指定します。
また、署名に関連付けられるセキュリティトークンをwsse:SecurityTokenReference要素で参照し、STR Dereference Transformを使用して署名します。
{}{XPath}{};Token
XPathには署名対象を表すXPath式を指定します。
また、署名に関連付けられるセキュリティトークンをds:Reference要素で参照し、署名します。

Memo
useSingleCertパラメータは、署名アルゴリズムがRSAwithSHA1またはDSAwithSHA1かつ 証明書の参照方法がDirectReferenceまたはEmbeddedReferenceの場合にのみ使用されます。その他の場合は、指定しても無視されます。本パラメータを省略した場合、trueとして扱われます。

Memo
signaturePartsパラメータを省略した場合、署名対象はSOAPエンベロープのBody要素になります。

XPathの書き方

パラメータの値としてのXPath式は正確な記述が求められます。ほとんどの場合、省略形は用いることができません。

(例)
{}{//*[namespace-uri()="http://schemas.xmlsoap.org/soap/envelope/" and
local-name()="Envelope"]/*[namespace-uri()="http://schemas.xmlsoap.org/soap/envelope/" and
local-name()="Body"]}{}
また、ハンドラへのパラメータと値の与え方によって、エスケープ文字を用いらなければならない場合もありますので、十分注意してください。たとえば、ESBのSOAP BCのendpoints.xmlでは、「"」を「&quot;」で表記する必要があります。また、Javaコード内で直接表記する場合は、「"」を「\"」で表記する必要があります。

■受信側
表1.2.13.15-4
パラメータ

説明
action
Signature
 
signaturePropFile
<キーストア情報設定ファイル名>
署名検証用の公開鍵証明書が格納されているキーストアに関する情報を記述したファイル名を指定します。
passwordCallbackClass
<コールバックハンドラクラス名>
パスワードを取得するためのコールバックハンドラクラス名を指定します。

●HMACアルゴリズムを利用する

■送信側
表1.2.13.15-5
パラメータ

説明
action
Signature
 
signatureAlgorithm
(署名アルゴリズムを指定します)
http://www.w3.org/2000/09/xmldsig#hmac-sha1
HMAC-SHA1 アルゴリズムを設定します。
signaturePropFile
<キーストア情報設定ファイル名>
キーストア情報設定ファイルのパスを指定します。
signatureKeyIdentifier
EmbeddedKeyName
署名検証に使用する鍵の参照方法を指定します。鍵を、エイリアスをキーにして参照します。
userInfoCallbackClass
<コールバックハンドラクラス>
署名に使用する鍵のエイリアスとパスワードを取得するためのコールバックハンドラクラス名を指定します。
signatureParts
{}{XPath}{}
署名対象を指定します。

■受信側
表1.2.13.15-6
パラメータ

説明
action
Signature
 
signaturePropFile
<キーストア情報設定ファイル名>
署名検証用の鍵が格納されているキーストアに関する情報を記述したファイル名を指定します。
passwordCallbackClass
<コールバックハンドラクラス名>
パスワードを取得するためのコールバックハンドラクラス名を指定します。

Memo
signaturePartsパラメータを省略した場合、署名対象はSOAPエンベロープのBody要素になります。

暗号化・復号化関連のパラメータ設定
● 暗号化方式1 (鍵暗号あり(公開鍵暗号方式))を利用する

■送信側
表1.2.13.15-7
パラメータ

説明
action
Encryption
 
keyEncryption
true
鍵暗号化を行います。
encryptionKeyTransportAlgorithm
(鍵暗号アルゴリズムを指定します。)
http://www.w3.org/2001/04/xmlenc#rsa-1_5
RSA Version1.5 Key Transport アルゴリズムを使用します。
http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p
RSA-OAEP Key Transport アルゴリズムを使用します。
encryptionSymAlgorithm
(データ暗号アルゴリズムを指定します。)
http://www.w3.org/2001/04/xmlenc#tripledes-cbc
TripleDES アルゴリズムを使用します。
http://www.w3.org/2001/04/xmlenc#aes128-cbc
AES128 アルゴリズムを使用します。
http://www.w3.org/2001/04/xmlenc#aes256-cbc
AES256 アルゴリズムを使用します。
http://www.w3.org/2001/04/xmlenc#aes192-cbc
AES192 アルゴリズムを使用します。
encryptionKeyIdentifier
(暗号化に使用した鍵または証明書の参照方法を指定します。)
DirectReference
メッセージの内部あるいは外部にある証明書をURIで参照します。
IssuerSerial
メッセージの外部にある証明書を、発行者とシリアル番号をキーにして参照します。
SKIKeyIdentifier
メッセージの外部にある証明書を、所有者鍵識別子をキーにして参照します。
EmbeddedReference
メッセージの内部にある証明書を参照します。
encryptionPropFile
<キーストア情報設定ファイル名>
暗号に使用する公開鍵証明書が格納されているキーストアに関する情報を記述したファイル名を指定します。
userInfoCallbackClass
<コールバックハンドラクラス名>
暗号化に使用する証明書のエイリアスを取得するためのコールバックハンドラクラス名を指定します。
encryptionParts
(暗号化対象を指定します。)
{Content}{XPath}{}
XPathには暗号化対象を表すXPath式を指定します。
この場合、Content暗号化(暗号化対象要素の中身を暗号化)を行います。
{Element}{XPath}{}
XPathには署名対象を表すXPath式を指定します。
この場合、Element暗号化(暗号化対象要素全体を暗号化)を行います。

Memo
encryptionPartsパラメータを省略した場合、暗号化対象はSOAPエンベロープのBody要素になり、Content暗号化を行います。


■受信側
表1.2.13.15-8
パラメータ

説明
action
Encryption
 
decryptionPropFile
<キーストア情報設定ファイル名>
復号用の鍵が格納されているキーストアに関する情報を記述したファイル名を指定します。
passwordCallbackClass
<コールバックハンドラクラス名>
復号に使用する鍵のパスワードを取得するためのコールバックハンドラクラス名

● 暗号化方式2 (鍵暗号あり(共通鍵暗号方式))を利用する

■送信側
表1.2.13.15-9
パラメータ

説明
action
Encryption
 
keyEncryption
true
暗号化に使用する鍵を暗号化するかどうかを指定します。鍵暗号化は行います。
encryptionKeyWrapAlgorithm
(鍵暗号アルゴリズムを指定します。)
http://www.w3.org/2001/04/xmlenc#kw-tripledes
TripleDES Key Wrap アルゴリズムを使用します。
http://www.w3.org/2001/04/xmlenc#kw-aes128
AES128 Key Wrap アルゴリズムを使用します。
http://www.w3.org/2001/04/xmlenc#kw-aes256
AES256 Key Wrap アルゴリズムを使用します。
http://www.w3.org/2001/04/xmlenc#kw-aes192
AES192 Key Wrap アルゴリズムを使用します。
encryptionSymAlgorithm
(データ暗号アルゴリズムを指定します。)
http://www.w3.org/2001/04/xmlenc#tripledes-cbc
TripleDES アルゴリズムを使用します。
http://www.w3.org/2001/04/xmlenc#aes128-cbc
AES128 アルゴリズムを使用します。
http://www.w3.org/2001/04/xmlenc#aes256-cbc
AES256 アルゴリズムを使用します。
http://www.w3.org/2001/04/xmlenc#aes192-cbc
AES192 アルゴリズムを使用します。
encryptionKeyIdentifier
EmbeddedKeyName
暗号化に使用した鍵の参照方法を指定します。鍵を、エイリアスをキーにして参照します。
encryptionPropFile
<キーストア情報設定ファイル名>
暗号化に使用するの鍵が格納されているキーストアに関する情報を記述したファイル名を指定します。
userInfoCallbackClass
<コールバックハンドラクラス名>
暗号化に使用する鍵のエイリアスとパスワードを取得するためのコールバックハンドラクラス名を指定します。
encryptionParts
(暗号化対象を指定します。)
{Content}{XPath}{}
XPathには暗号化対象を表すXPath式を指定します。
この場合、Content暗号化(暗号化対象要素の中身を暗号化)を行います。
{Element}{XPath}{}
XPathには署名対象を表すXPath式を指定します。
この場合、Element暗号化(暗号化対象要素全体を暗号化)を行います。

Memo
encryptionPartsパラメータを省略した場合、暗号化対象はSOAPエンベロープのBody要素になり、Content暗号化を行います。


■受信側

暗号化方式1と同じ

● 暗号化方式3 (鍵暗号なし)を利用する

■送信側
表1.2.13.15-10
パラメータ

説明
action
Encryption
 
keyEncryption
false
暗号化に使用する鍵を暗号化するかどうかを指定します。鍵暗号化は行いません。
encryptionSymAlgorithm
(データ暗号アルゴリズムを指定します。)
http://www.w3.org/2001/04/xmlenc#tripledes-cbc
TripleDES アルゴリズムを使用します。
http://www.w3.org/2001/04/xmlenc#aes128-cbc
AES128 アルゴリズムを使用します。
http://www.w3.org/2001/04/xmlenc#aes256-cbc
AES256 アルゴリズムを使用します。
http://www.w3.org/2001/04/xmlenc#aes192-cbc
AES192 アルゴリズムを使用します。
encryptionKeyIdentifier
EmbeddedKeyName
暗号化に使用した鍵の参照方法を指定します。鍵を、エイリアスをキーにして参照します。
encryptionPropFile
<キーストア情報設定ファイルのパス>
暗号化に使用する鍵が格納されているキーストアに関する情報を記述したファイル名を指定します。
userInfoCallbackClass
<コールバックハンドラクラスのパス>
暗号化に使用する鍵のエイリアスとパスワードを取得するためのコールバックハンドラクラス名を指定します。
encryptionParts
(暗号化対象を指定します。)
{Content}{XPath}{}
XPathには暗号化対象を表すXPath式を指定します。
Content暗号化(暗号化対象要素の中身を暗号化)を行います。
{Element}{XPath}{}
XPathには署名対象を表すXPath式を指定します。
Element暗号化(暗号化対象要素全体を暗号化)を行います。

■受信側

暗号化方式1と同じ

Memo
encryptionPartsパラメータを省略した場合、暗号化対象はSOAPエンベロープのBody要素になり、Content暗号化を行います。

認証関連のパラメータ設定
●ID/Password認証を利用する

■送信側
表1.2.13.15-11
パラメータ

説明
action
UsernameToken
 
authType
IDPassword
ID/Password認証を使用します。
passwordType
(パスワードタイプを指定します)
PasswordText
パスワードをプレーンテキストとしてUsernameTokenに格納します。
PasswordDigest
パスワードのダイジェスト値をUsernameTokenに格納します。
userInfoCallbackClass
<コールバックハンドラクラス名>
ユーザ名とパスワードを取得するためのコールバックハンドラクラス名を指定します。

■受信側
表1.2.13.15-12
パラメータ

説明
action
UsernameToken
 
authType
IDPassword
ID/Password認証を使用します。
passwordCallbackClass
<コールバックハンドラクラス名>
パスワードを取得するためのコールバックハンドラクラス名を指定します。

●WebOTX認証を利用する

WebOTX認証とは、WebOTXが管理しているユーザ情報を利用して認証を行うことです。

■送信側
表1.2.13.15-13
パラメータ

説明
action
UsernameToken
 
authType
WebOTX
WebOTX認証を行います。
passwordType
PasswordText
パスワードをプレーンテキストとしてUsernameTokenに格納します。
userInfoCallbackClass
<コールバックハンドラクラス名>
ユーザ名とパスワードを取得するためのコールバックハンドラクラス名を指定します。

■受信側
表1.2.13.15-14
パラメータ

説明
action
UsernameToken
 
authType
WebOTX
WebOTX認証を指定します。

●Signature認証を利用する

■送信側
表1.2.13.15-15
パラメータ

説明
action
Signature
 
authType
Signature
Signature認証を指定します。
signatureAlgorithm
(署名アルゴリズムを指定します。)
http://www.w3.org/2000/09/xmldsig#dsa-sha1
DSAwithSHA1 アルゴリズムを使用します。
http://www.w3.org/2000/09/xmldsig#rsa-sha1
RSAwithSHA1 アルゴリズムを使用します。
signaturePropFile
<キーストア情報設定ファイル名>
署名用の鍵が格納されているキーストアに関する情報を記述したファイル名を指定します。
signatureKeyIdentifier
(署名検証に使用する公開鍵証明書の参照方法を指定します。)
DirectReference
メッセージの内部あるいは外部にある証明書をURIで参照します。
IssuerSerial
メッセージの外部にある証明書を、発行者とシリアル番号をキーにして参照します。
SKIKeyIdentifier
メッセージの外部にある証明書を、所有者鍵識別子をキーにして参照します。
EmbeddedReference
メッセージの内部にある証明書を参照します。
useSingleCert
(署名に使用した秘密鍵とペアになる公開鍵証明書のBinarySecurityTokenへの格納形態を指定します。)
true
BinarySecurityTokenにEE証明書のみを格納します。
false
BinarySecurityTokenに証明書チェーン(EE証明書 + CA証明書)を格納します。
userInfoCallbackClass
<コールバックハンドラクラス名>
署名に使用する鍵のエイリアスとパスワードを取得するためのコールバックハンドラクラス名を指定します。
signatureParts
(署名対象を指定します。)
{}{XPath}{}
XPathには署名対象を表すXPath式を指定します。
{}{XPath}{};STRTransform
XPathには署名対象を表すXPath式を指定します。また、署名に関連付けられるセキュリティトークンをwsse:SecurityTokenReference要素で参照し、STRDereference Transformを使用して署名します。
{}{XPath}{};Token
XPathには署名対象を表すXPath式を指定します。また、署名に関連付けられるセキュリティトークンをds:Reference要素で参照し、署名します。

■受信側
表1.2.13.15-16
パラメータ

説明
action
Signature
 
authType
Signature
Signature認証を使用する場合は、本パラメータに Signatureを指定します。
signaturePropFile
<キーストア情報設定ファイル名>
署名検証用の公開鍵証明書が格納されているキーストアに関する情報を記述したファイル名を指定します。
certDir
<証明書格納ディレクトリ名>
公開鍵証明書検証で必要となる証明書(EE証明書、中間CA、トラストアンカ)が格納されるディレクトリ名を指定します。
ここを「cert」と指定すると、WebOTX既定の格納場所<DomainDir>/config/certを指定したことになります。
trustAnchor
<トラストアンカ名1>;<トラストアンカ名2>;…
公開鍵証明書検証で信頼済みとして扱われるトラストアンカ(ルートCA)を指定します。トラストアンカ証明書のファイル名を指定します。セミコロン区切りで複数指定できます。
crlValidation
(証明書検証でCRLを参照するかどうかを指定します。)
true
CRLを参照します。
false
CRLを参照しません。
crlDir
<CRL格納ディレクトリ名>
CRLが格納されるディレクトリ名を指定します。crlValidationがtrueの場合に有効となります。このディレクトリにある*.crlファイルがCRLとして扱われます。ここを「crl」と指定すると、WebOTX既定の格納場所<DomainDir>/config/crlを指定したことになります。

Memo
useSingleCertパラメータは、公開鍵証明書をBinarySecurityTokenに格納してメッセージに添付する場合にのみ使用できます(署名アルゴリズムがRSAwithSHA1またはDSAwithSHA1かつ 証明書の参照方法がDirectReferenceまたはEmbeddedReferenceの場合にのみ使用できます)。その他の場合は、指定しても無視されます。

本パラメータを省略した場合、BinarySecurityTokenにはEE証明書のみが格納されます。

Memo
signaturePartsパラメータを省略した場合、署名対象はSOAPエンベロープのBody要素になります。

タイムスタンプ関連のパラメータ設定
■送信側
表1.2.13.15-17
パラメータ

説明
action
Timestamp
 
timeToLive
<有効期間>
メッセージの有効期間を秒単位で指定します。本パラメータを省略した場合、有効期間は300秒になります。

■受信側

共通の設定以外のパラメータはありません。
SAML関連のパラメータ設定
●Sender-VouchesモデルのAssertion(署名を付与しない)を利用する

■送信側
表1.2.13.15-18
パラメータ

説明
action
SAMLTokenUnsigned
 
assertionId
<SAML Assertionの識別情報>
コールバックハンドラで取得するSAML Assertionを特定するための情報を指定します。コールバックハンドラで、識別情報をキーにしてSAML Assertionを取得する仕組みを提供します。識別情報は、アプリケーションで独自に定義します。本パラメータは省略可能です。
samlTokenCallbackClass
<コールバックハンドラクラス名>
SAML Assertionを取得するためのコールバックハンドラクラス名を指定します。
外部からSAML Assertion を受け取る仕組みを提供します。

■受信側
共通の設定以外のパラメータはありません。actionパラメータは、「SAMLTokenUnsigned」です。


● Sender-VouchesモデルのAssertion(署名を付与する)を利用する

■送信側
表1.2.13.15-19
パラメータ

説明
action
SAMLTokenSigned
 
assertionId
<SAML Assertionの識別情報>
コールバックハンドラで取得するSAML Assertionを特定するための情報を指定します。コールバックハンドラで、識別情報をキーにしてSAML Assertionを取得する仕組みを提供します。識別情報は、アプリケーションで独自に定義します。本パラメータは省略可能です。
samlTokenCallbackClass
<コールバックハンドラクラス名>
SAML Assertionを取得するためのコールバックハンドラクラス名を指定します。
外部からSAML Assertion を受け取る仕組みを提供します。
signatureAlgorithm
(署名アルゴリズムを指定します。)
http://www.w3.org/2000/09/xmldsig#dsa-sha1
DSAwithSHA1 アルゴリズムを指定します。
http://www.w3.org/2000/09/xmldsig#rsa-sha1
RSAwithSHA1 アルゴリズムを指定します。
signaturePropFile
<キーストア情報設定ファイル名>
署名に使用する鍵が格納されているキーストアに関する情報を記述したファイル名を指定します。
signatureKeyIdentifier
(署名検証に使用する公開鍵証明書の参照方法を指定します。)
DirectReference
メッセージの内部あるいは外部にある証明書をURIで参照します。
IssuerSerial
メッセージの外部にある証明書を、発行者とシリアル番号をキーにして参照します。
SKIKeyIdentifier
メッセージの外部にある証明書を、所有者鍵識別子をキーにして参照します。
EmbeddedReference
メッセージの内部にある証明書を参照します。
useSingleCert
true
署名に使用した秘密鍵とペアになる公開鍵証明書のBinarySecurityTokenへの格納形態を指定します。BinarySecurityTokenにEE証明書のみを格納します。
userInfoCallbackClass
<コールバックハンドラクラス名>
署名に使用する鍵のエイリアスとパスワードを取得するためのコールバックハンドラクラス名を指定します。
signatureParts
{}{XPath}{}
署名対象を指定します。XPathには署名対象を表すXPath式を指定します。本パラメータを省略した場合、署名対象はSOAPエンベロープのBody要素になります。

■受信側
表1.2.13.15-20
パラメータ

説明
action
Signature SAMLTokenUnsigned
スペース区切りで記述します。
signaturePropFile
<キーストア情報設定ファイル名>
署名検証用の公開鍵証明書が格納されているキーストアに関する情報を記述したファイル名を指定します。
certDir
<証明書格納ディレクトリ名>
公開鍵証明書検証で必要となる証明書(EE証明書、中間CA、トラストアンカ)が格納されるディレクトリ名を指定します。ここを「cert」と指定すると、WebOTX既定の格納場所<DomainDir>/config/certを指定したことになります。
trustAnchor
<トラストアンカ名1>;<トラストアンカ名2>;…
公開鍵証明書検証で信頼済みとして扱われるトラストアンカ(ルートCA)を指定します。トラストアンカ証明書のファイル名を指定します。セミコロン区切りで複数指定できます。
crlValidation
(証明書検証でCRLを参照するかどうかを指定します。)
true
CRLを参照します。
false
CRLを参照しません。
crlDir
<CRL格納ディレクトリ名>
CRLが格納されるディレクトリ名を指定します。crlValidationがtrueの場合に有効となります。このディレクトリにある*.crlファイルがCRLとして扱われます。ここを「crl」と指定すると、WebOTX既定の格納場所<DomainDir>/config/crlを指定したことになります。


● Holder-of-keyモデルのAssertion(署名を付与しない)を利用する

■送信側

「Sender-VouchesモデルのAssertion(署名を付与しない)」と同じです。actionパラメータは「SAMLTokenUnsigned」です。

■受信側
表1.2.13.15-21
パラメータ

説明
action
SAMLTokenUnsigned
 
certDir
<証明書格納ディレクトリ名>
公開鍵証明書検証で必要となる証明書(EE証明書、中間CA、トラストアンカ)が格納されるディレクトリ名を指定します。ここを「cert」と指定すると、WebOTX既定の格納場所<DomainDir>/config/certを指定したことになります。
trustAnchor
<トラストアンカ名1>;<トラストアンカ名2>;…
公開鍵証明書検証で信頼済みとして扱われるトラストアンカ(ルートCA)を指定します。トラストアンカ証明書のファイル名を指定します。セミコロン区切りで複数指定できます。
crlValidation
(証明書検証でCRLを参照するかどうかを指定します。)
true
CRLを参照します。
false
CRLを参照しません。
crlDir
<CRL格納ディレクトリ名>
CRLが格納されるディレクトリ名を指定します。crlValidationがtrueの場合に有効となります。このディレクトリにある*.crlファイルがCRLとして扱われます。ここを「crl」と指定すると、WebOTX既定の格納場所<DomainDir>/config/crlを指定したことになります。


● Holder-of-keyのAssertion(署名を付与する)を利用する

■送信側
表1.2.13.15-22
パラメータ

説明
action
SAMLTokenSigned
 
assertionId
<SAML Assertionの識別情報>
コールバックハンドラで取得するSAML Assertionを特定するための情報を指定します。コールバックハンドラで、識別情報をキーにしてSAML Assertionを取得する仕組みを提供します。識別情報は、アプリケーションで独自に定義します。本パラメータは省略可能です。
samlTokenCallbackClass
<コールバックハンドラクラス名>
SAML Assertionを取得するためのコールバックハンドラクラス名を指定します。
外部から SAML Assertion を受け取る仕組みを提供します。
signatureAlgorithm
(署名アルゴリズムを指定します。)
http://www.w3.org/2000/09/xmldsig#dsa-sha1
DSAwithSHA1 アルゴリズムを指定します。
http://www.w3.org/2000/09/xmldsig#rsa-sha1
RSAwithSHA1 アルゴリズムを指定します。
signaturePropFile
<キーストア情報設定ファイル名>
署名で使用する鍵が格納されているキーストアに関する情報を記述したファイル名を指定します。
signatureKeyIdentifier
SKIKeyIdentifier
署名検証に使用する公開鍵証明書の参照方法を指定します。
useSingleCert
true
署名に使用した秘密鍵とペアになる公開鍵証明書のBinarySecurityTokenへの格納形態を指定します。BinarySecurityTokenにEE証明書のみを格納します。
userInfoCallbackClass
<コールバックハンドラクラス名>
署名に使用する鍵のエイリアスとパスワードを取得するためのコールバックハンドラクラス名を指定します。
signatureParts
{}{XPath}{}
署名対象を指定します。XPathには署名対象を表すXPath式を指定します。本パラメータを省略した場合、署名対象はSOAPエンベロープのBody要素になります。

■受信側
表1.2.13.15-23
パラメータ

説明
action
Signature SAMLTokenUnsigned
スペース区切りで記述します。
signaturePropFile
<キーストア情報設定ファイル名>
署名検証用の公開鍵証明書が格納されているキーストアに関する情報を記述したファイル名を指定します。
certDir
<証明書格納ディレクトリ名>
公開鍵証明書検証で必要となる証明書(EE証明書、中間CA、トラストアンカ)が格納されるディレクトリ名を指定します。ここを「cert」と指定すると、WebOTX既定の格納場所<DomainDir>/config/certを指定したことになります。
trustAnchor
<トラストアンカ名1>;<トラストアンカ名2>;…
公開鍵証明書検証で信頼済みとして扱われるトラストアンカ(ルートCA)を指定します。トラストアンカ証明書のファイル名を指定します。セミコロン区切りで複数指定できます。
crlValidation
(証明書検証でCRLを参照するかどうかを指定します。)
true
CRLを参照します。
false
CRLを参照しません。
crlDir
<CRL格納ディレクトリ名>
CRLが格納されるディレクトリ名を指定します。crlValidationがtrueの場合に有効となります。このディレクトリにある*.crlファイルがCRLとして扱われます。ここを「crl」と指定すると、WebOTX既定の格納場所<DomainDir>/config/crlを指定したことになります。