1.2.13. WS-Security
1.2.13.1. 事前準備
ここではWS-Securityの機能を使用するための準備について記載します。
Java Cryptography Extension (JCE) UnlimitedStrength Jurisdiction Policy Files の適用
鍵長192ビット、256ビットの暗号鍵を利用する(sp:AlgorithmSuiteにsp:Basic192やsp:Basic256などを適用する)場合、Java Cryptography Extension (JCE) UnlimitedStrength Jurisdiction Policy Filesをお使いのJava SEに対してインストールする必要があります。
Oracleのホームページからお使いのJavaのバージョンに合わせてファイルを取得し、<JAVA_HOME>/jre/lib/securityに置かれているlocal_policy.jar、US_export_policy.jarの2ファイルを上書き置換してください。
Bouncy Castle JCE セキュリティプロバイダの適用
暗号化方式にTriple DESを使用する(sp:AlgorithmSuiteにsp:TripleDESなどを適用する)場合、Bouncy Castle JCE セキュリティプロバイダを適用する必要があります。
Bouncy CastleJCE セキュリティプロバイダのJARファイルを<WebOTX_DIR>/domains/<ドメイン名>/lib/ext 配下にコピーします。このJARファイルは<WebOTX_DIR>/lib/wss/bcp/bcprov-jdk15on-150.jarにあります。
<JAVA_HOME>/jre/lib/securityにあるjava.securityにBouncy
Castle JCE セキュリティプロバイダを次のように登録してください。
#
# 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=sun.security.ec.SunEC
security.provider.4=com.sun.net.ssl.internal.ssl.Provider
security.provider.5=com.sun.crypto.provider.SunJCE
security.provider.6=sun.security.jgss.SunProvider
security.provider.7=com.sun.security.sasl.Provider
security.provider.8=org.jcp.xml.dsig.internal.dom.XMLDSigRI
security.provider.9=sun.security.smartcardio.SunPCSC
security.provider.10=sun.security.mscapi.SunMSCAPI
security.provider.11=org.bouncycastle.jce.provider.BouncyCastleProvider
これらの作業をすべて終了したら、ドメインを(再)起動してください。
キーストア、トラストストアの用意
メッセージの暗号化や署名、X509Tokenを利用した認証を行う場合、暗号鍵や証明書をあらかじめキーストア、トラストストアに登録しなければなりません。
Java SEのkeytoolを使用して、必要な暗号鍵、証明書を作成・登録してください。
鍵の作成、証明書のエクスポート/インポートのコマンド実行例を以下に記載します。
- 鍵の作成
ドメインにはじめから設定されているキーストア(keystore.jks)に鍵を追加します。keystore.jksのパスワードは「changeit」です。-dnameオプションのCN属性は必ずサーバのFQDNに一致させなければなりません。
> keytool -genkey -alias server -dname "CN=server_name, O=X, L=Y, C=XX, OU=YY, S=XY" -keyalg RSA -keypass changeit -storepass changeit -keystore <DOMAIN_ROOT>/config/keystore.jks
- 証明書をエクスポート
証明書をエクスポートします。
> keytool -export -alias server -storepass changeit -file server.cer -keystore <DOMAIN_ROOT>/config/keystore.jks
- 証明書をインポート
キーストアに証明書をインポートします。
> keytool -import -trustcacerts -alias server -file server.cer -keystore client.jks -keypass changeit -storepass changeit
CallbackHandler、Validatorの作成
UsernameTokenやX509Tokenなどのセキュリティトークンを利用した認証を行う場合、CallbackHandlerやValidatorを事前に作成します。
CallbackHandlerやValidatorのクラスファイルは、WEB-INF/classesなど、CLASSPATHのルートに配置してください。
CallbackHandlerの作成方法は1.2.13.4. CallbackHandlerの実装を、Validatorの作成方法は1.2.13.5. Validatorの実装を参照してください。
SECUREMASTER連携の準備
SecuremasterTokenを利用した認証を行う場合、SECUREMASTER製品との連携のための準備が必要になります。
以下に設定の手順を示します。
SECUREMASTER製品の手順に従い、環境を構築します。
環境構築後、SECUREMASTER/AccessControlPlugInから、認証・認可に必要なjarファイルとsm_api_conf.xml.sampleを取得し、SECUREMASTER/EnterpriseAccessManagerでアクセス制御ポリシーファイルを生成します。
必要なjarファイルは下記のとおりです。
- commons-codec-**.jar
- edldap.jar
- jaxrpc.jar
- jsr173_1.0_api.jar
- log4j-**.jar
- saaj.jar
- smapi.jar
- smcommonlib.jar
- smxmlacl.jar
- smxmlconf.jar
- xbean.jar
(**にはバージョン番号が入ります。実際のバージョンはSECUREMASTERのマニュアルでご確認ください。)
jarファイルと設定ファイルを認証・認可を利用するドメインの下記のフォルダに配置します。
設定ファイルは、sm_api_conf.xml.sampleを修正して適切な設定を施したものです。設定ファイルの記述方法については、SECUREMASTERのマニュアルを参照してください。
- jarファイル
サーバ:<DOMAIN_ROOT>/lib
クライアント:CLASSPATHのルート
- 設定ファイル
サーバ:Validator要素のconfpath属性に設定されたパス
クライアント:CallbackHandler要素のconfpath属性に設定されたパス
上記設定ファイルのパス設定については、1.2.13.2. サーバアプリケーションの定義、1.2.13.3. クライアントアプリケーションの定義を参照してください。
<WebOTX_DIR>/lib/wss/wss-plugin.jarを、同様に上記のjarファイル配置場所に配置します。
また、SECUREMASTER連携で使用するパスワードを暗号化し、クライアント側設定ファイルに記載する必要があります。ここでは、パスワードの暗号化方法について説明します。設定ファイルへの設定方法については、1.2.13.3. クライアントアプリケーションの定義を参照してください。
パスワードの暗号化には、encryptwsspasswordを利用します。encryptwsspasswordは下記のバッチファイルもしくはシェルファイルとして提供しています。encryptwsspassword実行時に、暗号化に用いる鍵の情報と暗号化するパスワードを指定します。暗号鍵として使用できるのはRSA暗号方式の鍵のみです。
- <WebOTX_DIR>/bin/encryptwsspassword.bat (Windows)
- <WebOTX_DIR>/bin/encryptwsspassword.sh (Unix)
以下、encryptwsspasswordの使用方法を記載します。
構文
encryptwsspassword library_path -keystore keystore_path [-storetype keystore_type] [-storepassword keystore_password] [-alias key_alias] -password password
オプション
表1.2.13.1-1 オプション
オプション
|
説明
|
library_path
|
wows-rt.jarのパスを指定します。wows-rt.jarは<WebOTX_DIR>/modules/wows-rt.jarにあります。
|
-keystore
|
キーストアのパスを設定します。
|
-storetype
|
キーストアのタイプを設定します。省略した場合はJKSとなります。
|
-storepassword
|
キーストアのパスワードを設定します。省略した場合はchangeitとなります。
|
-alias
|
鍵のエイリアスを設定します。省略した場合はwebotxとなります。
|
-password
|
暗号化するパスワードを設定します。
|
encryptwsspasswordを実行すると、下記のように暗号化された文字列が取得できます。
この例では、「user_pass」というパスワードを暗号化しています。
>encryptwsspassword C:\WebOTX\modules\wows-rt.jar -keystore C:\WebOTX\domains\domain1\config\keystore.jks -password user_pass
1 10, 2014 1:14:33 午後 com.nec.webotx.webservice.xml.wss.util.PasswordEncrypter main
情報: 5BF46CD442D40C4BC23D296196B207EE79D60E601DAC9219A76D32B2D19AA4387F2F22F28F7160E67F73B6350683ABE8758E7927FE8F6027AD35AFBB6BE5E0E8FBC305590C577ECF990DA5E5E2F6DD347E9BE21950DC117BEFADC7C431C858AA59EBEE9C26FDE7CF0E44AFCF964E76A830BC976F4B4C7B37E355F210CA7E03A3
1 10, 2014 1:14:34 午後 com.nec.webotx.webservice.xml.wss.util.PasswordEncrypter main
情報: Process succeeded.
「5BF46CD442....10CA7E03A3」の文字列がパスワードを暗号化した文字列となっているので、この文字列をクライアント側設定ファイルのwo92spc:CallbackHandler要素のpassword属性に設定します。wo92spc:SmKeyStoreに設定する鍵情報は、ここで使用した鍵情報と同じものにしなければなりません。
Memo
<JAVA_HOME>はJava SEのインストールルートディレクトリを指します。
<WebOTX_DIR>はWebOTXのインストールルートディレクトリを指します。
<DOMAIN_ROOT>はドメインのルートディレクトリを指します。
1.2.13.2. サーバアプリケーションの定義
ここではサーバ側のWS-Security設定の定義方法について説明します。
WS-Securityの設定を定義する方法はアプリケーションにnec-jaxws.xmlを含めているかどうかにより変わります。
- nec-jaxws.xmlが存在する場合
WSDLファイルに定義
- nec-jaxws.xmlが存在しない場合
設定ファイルに定義
どちらの方法でも、WS-SecurityPolicyの仕様に従ってWS-Securityの動作を定義できます。
WS-SecurityPolicyのサポート範囲に関しては、WS-SecurityPolicyのサポート範囲を参照してください。
以下、WSDLファイルにWS-Securityの設定を記述する方法について説明します。
なお、構文中の記号について、以下のように定義します。
- "?" : 0回もしくは1回
- "|" : いずれか一方
- "*" : 0回以上
Memo
nec-jaxws.xmlが存在しない場合、Webサービスのアノテーション定義をもとにWSDLが生成されるため、WSDLから独立した設定ファイルを作成する必要があります。設定ファイルの内容はWebサービスのWSDL定義にポリシー・アサーションを追加したものになります。
設定ファイルの名称は以下のようにします。
wsit-<Webサービス実装クラス名>.xml
たとえばcom.nec.AddNumbersPortTypeImpl.classがWebサービス実装クラスであった場合、設定ファイル名は「wsit-com.nec.AddNumbersPortTypeImpl.xml」となります。
この設定ファイルはWEB-INF/classesなど、CLASSPATHのルートに配置してください。
名前空間の定義
本節で使用するXML名前空間について説明します。
標準仕様のアサーションの説明で利用する名前空間は下記のとおりです。
表1.2.13.2-1 標準仕様の名前空間
Prefix
|
Namespace
|
sp
|
http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702
|
wsam
|
http://www.w3.org/2007/05/addressing/metadata
|
wsp
|
http://www.w3.org/ns/ws-policy
|
wsu
|
http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd
|
wsdl
|
http://schemas.xmlsoap.org/wsdl/
|
WebOTX独自のアサーションで利用する名前空間は下記のとおりです。
表1.2.13.2-2 WebOTX独自の名前空間
Prefix
|
Namespace
|
wo92sp
|
http://nec.com/ws-sx/wssp/201312
|
wo92sps
|
http://nec.com/ws-sx/wssp/server/201312
|
wowsp
|
http://nec.com/xml/ns/wsit/policy
|
ポリシー・アサーションの設定手順
WS-Securityの定義方法を説明します。
(1) WSDLファイルを作成します。
(2) wsdl:definitions要素の子要素としてWS-Securityのポリシー定義を追加します。
(3) wsdl:binding、wsdl:operation/inputまたはwsdl:operation/output要素の子要素としてwsp:PolicyReference要素を追加して、ポリシーを参照します。
(3)のwsp:PolicyReference要素の追加箇所によって、以下のようにWS-Securityの適用範囲が異なります。
- wsdl:binding (以下、バインディング定義)
使用するセキュリティアルゴリズムやTimestampの有無、使用するTokenの指定など、リクエストメッセージ・レスポンスメッセージの両方に適用するポリシーを設定します。
- wsdl:operation/inputまたはwsdl:operation/output (以下、オペレーション定義)
リクエストメッセージ、レスポンスメッセージのBodyやHeaderの暗号化・署名に関すポリシーを設定します。
以下、バインディング定義とオペレーション定義の記述方法について説明します。
使用できるアサーションはWS-SecurityPolicy1.2に従います。
- バインディング定義の記述方法
wsdl:definitions/wsp:Policy要素の子要素として、SupportingTokens要素やSecurityBinding要素、WebOTX独自要素を追加します。
ここでは、各要素の代表的な記述方法について説明します。詳細な記述方法については、WS-SecurityPolicy1.2の仕様を参照してください。また、WebOTX独自要素については、WebOTX独自のアサーションを参照してください。
・SupportingTokens要素
構文:
<sp:SupportingTokens>
<wsp:Policy>
<sp:UsernameToken/> ?
<sp:X509Token/> ?
<wo92sp:SecuremasterToken/> ?
...
</wsp:Policy>
</sp:SupportingTokens>
表1.2.13.2-3
アサーション
|
説明
|
/sp:SupportingTokens
|
認証に使用するトークンを設定をするためのアサーションです。トークンを暗号化したい場合は、SupportingTokensの代わりにEncryptedSupportingTokensを使用することで可能です。同様に、トークンを署名したい場合は、SignedSupportingTokensを使用します。暗号化と署名両方を行う場合は、SignedEncryptedSupportingTokensを使用します。
|
/sp:SupportingTokens/wsp:Policy/sp:UsernameToken
|
UsernameTokenを認証に使用する場合に記述するアサーションです。
|
/sp:SupportingTokens/wsp:Policy/sp:X509Token
|
X509Tokenを認証に使用する場合に記述するアサーションです。
|
/sp:SupportingTokens/wsp:Policy/wo92sp:SecuremasterToken
|
SecuremasterTokenを認証に使用する場合に記述するアサーションです。
|
・SecurityBinding要素
構文:
<sp:SymmetricBinding>
<wsp:Policy>
( <sp:EncryptionToken/>
<sp:SignatureToken/> ) |
<sp:ProtectionToken/>
<sp:AlgorithmSuite/> ?
<sp:Layout/> ?
<sp:IncludeTimestamp/> ?
...
</wsp:Policy>
</sp:SymmetricBinding>
表1.2.13.2-4
アサーション
|
説明
|
/sp:SymmetricBinding
|
共通鍵を使用して暗号化や署名の処理を行う場合に設定するアサーションです。秘密鍵と公開鍵のペアで暗号化・署名を行う場合はAsymmetricBindingを使用します。
|
/sp:SymmetricBinding/wsp:Policy/sp:EncryptionToken
|
暗号化に使用するTokenを設定するアサーションです。
|
/sp:SymmetricBinding/wsp:Policy/sp:SignatureToken
|
署名に使用するTokenを設定するアサーションです。
|
/sp:SymmetricBinding/wsp:Policy/sp:ProtectionToken
|
暗号化・署名に使用するTokenを設定するアサーションです。
sp:SecureConversationTokenを使用する場合は、バインディング定義に/wsam:Addressingを設定し、/wsam:Addressing/@wsp:Optional属性の値を"false"とする必要があります。
|
/sp:SymmetricBinding/wsp:Policy/sp:AlgorithmSuite
|
使用するセキュリティアルゴリズムを設定するアサーションです。省略した場合はBasic128が適用されます。
|
/sp:SymmetricBinding/wsp:Policy/sp:Layout
|
セキュリティ・ヘッダのレイアウトを設定するアサーション。省略した場合はLaxが適用されます。
|
/sp:SymmetricBinding/wsp:Policy/sp:IncludeTimestamp
|
セキュリティ・ヘッダにTimestampTokenを含めるかどうか設定するアサーションです。このアサーションを記述した場合のみTimestampTokenが使用されます。
|
以下に、設定ファイルの記述例を示します。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<definitions targetNamespace="http://nec.webotx.com" name="webServiceService"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"
xmlns:wsp="http://www.w3.org/ns/ws-policy"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:wowsp="http://nec.com/xml/ns/wsit/policy"
xmlns:wo92sps="http://nec.com/ws-sx/wssp/server/201312"
xmlns:wo92sp="http://nec.com/ws-sx/wssp/201312">
...
<!--バインディング定義-->
<wsp:Policy wsu:Id="WebServiceServicePortBindingPolicy">
<wsp:ExactlyOne>
<wsp:All>
<!--認証に使用するTokenの設定-->
<sp:SupportingTokens>
<sp:Policy>
<!--UsernameTokenによる認証を行う場合-->
<sp:UsernameToken wo92sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
<wsp:Policy>
<!--Username Token Profile Version 1.0を使用-->
<sp:WssUsernameToken10 />
</wsp:Policy>
</sp:UsernameToken>
</wsp:Policy>
</sp:SupportingTokens>
<!--使用するSecurityBindingの設定-->
<sp:SymmetricBinding>
<wsp:Policy>
<!--暗号化・署名に使用するトークンの設定-->
<sp:ProtectionToken>
<wsp:Policy>
<!--X509Tokenによる暗号化・署名を行う場合-->
<sp:X509Token sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Never">
<wsp:Policy>
<!--X509 Version 3 証明書を使用する場合-->
<sp:WssX509V3Token10/>
</wsp:Policy>
</sp:X509Token>
</wsp:Policy>
</sp:ProtectionToken>
<!--セキュリティ・アルゴリズムを設定-->
<sp:AlgorithmSuite>
<wsp:Policy>
<!--Basic256を設定する場合-->
<sp:Basic256/>
</wsp:Policy>
</sp:AlgorithmSuite>
<!--セキュリティ・ヘッダのレイアウトを設定-->
<sp:Layout>
<wsp:Policy>
<!--Strictを設定する場合-->
<sp:Strict/>
</wsp:Policy>
</sp:Layout>
<!--TimestampTokenを使用する場合-->
<sp:IncludeTimestamp/>
</wsp:Policy>
</sp:SymmetricBinding>
<!--Validatorを設定-->
<wo92sps:ValidatorConfiguration wowsp:visibility="private">
<!--UsernameTokenの値を処理するValidatorを設定-->
<wo92sps:Validator classname="validators.MyPasswordValidator" name="usernameValidator" />
</wo92sps:ValidatorConfiguration>
<!--KeyStoreを設定-->
<wo92sps:KeyStore wowsp:visibility="private" location="C:\WebOTX\domains\domain1\config\keystore.jks" type="JKS" storepass="changeit" alias="webotx"/>
<!--TrustStoreを設定-->
<wo92sps:TrustStore wowsp:visibility="private" location="C:\WebOTX\domains\domain1\config\keystore.jks" type="JKS" storepass="changeit" peeralias="webotx"/>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>
...
<binding name="WebServiceServicePortBinding" type="tns:WebServiceService">
<!--wsdl:binding要素の子要素としてwsp:PolicyReference要素を追加して、ポリシーを参照-->
<wsp:PolicyReference URI="#WebServiceServicePortBindingPolicy"/>
...
</binding>
...
</definitions>
オペレーション定義の記述方法
wsdl:operation/inputまたはwsdl:operation/output要素の子要素として、EncryptedParts要素やSignedParts要素を追加します。
ここでは、各要素の代表的な記述方法について説明します。詳細な記述方法については、WS-SecurityPolicy1.2の仕様を参照してください。
・EncryptedParts要素
構文:
<sp:EncryptedParts>
<sp:Header Name="" Namespace=""/> *
<sp:Body/> ?
...
</sp:EncryptedParts>
表1.2.13.2-5
アサーション
|
説明
|
/sp:EncryptedParts
|
メッセージの暗号化を行うためのアサーションです。
|
/sp:EncryptedParts/sp:Header
|
SOAPヘッダを暗号化する場合に記述するアサーションです。
|
/sp:EncryptedParts/sp:Header/@Name
|
暗号化するSOAPヘッダの名前を設定する属性です。
|
/sp:EncryptedParts/sp:Header/@Namespace
|
暗号化するSOAPヘッダの名前空間を設定する属性です。
|
/sp:EncryptedParts/sp:Body
|
SOAPボディを暗号化する場合に記述するアサーションです。
|
・SignedParts要素
構文:
<sp:SignedParts>
<sp:Header Name="" Namespace=""/> *
<sp:Body/> ?
...
</sp:SignedParts>
表1.2.13.2-6
アサーション
|
説明
|
/sp:SignedParts
|
メッセージの署名を行うためのアサーションです。
|
/sp:SignedParts/sp:Header
|
SOAPヘッダを署名する場合に記述するアサーションです。
|
/sp:SignedParts/sp:Header/@Name
|
署名するSOAPヘッダの名前を設定する属性です。
|
/sp:SignedParts/sp:Header/@Namespace
|
署名するSOAPヘッダの名前空間を設定する属性です。
|
/sp:SignedParts/sp:Body
|
SOAPボディを署名する場合に記述するアサーションです。
|
以下に、設定ファイルの記述例を示します。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<definitions targetNamespace="http://nec.webotx.com" name="webServiceService"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"
xmlns:wsp="http://www.w3.org/ns/ws-policy"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:wowsp="http://nec.com/xml/ns/wsit/policy"
xmlns:wo92sps="http://nec.com/ws-sx/wssp/server/201312"
xmlns:wo92sp="http://nec.com/ws-sx/wssp/201312">
...
<!--リクエストのオペレーション定義-->
<wsp:Policy wsu:Id="WebServiceInputPolicy">
<wsp:ExactlyOne>
<wsp:All>
<!--暗号化の設定-->
<sp:EncryptedParts>
<!--SOAPボディを暗号化する場合-->
<sp:Body/>
</sp:EncryptedParts>
<!--署名の設定-->
<sp:SignedParts>
<!--SOAPボディを署名する場合-->
<sp:Body/>
<!--SOAPヘッダを署名する場合(複数記述可能)-->
<sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing"/>
<sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing"/>
<sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing"/>
<sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing"/>
<sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing"/>
<sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing"/>
<sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing"/>
<sp:Header Name="AckRequested" Namespace="http://docs.oasis-open.org/ws-rx/wsrm/200702"/>
<sp:Header Name="SequenceAcknowledgement" Namespace="http://docs.oasis-open.org/ws-rx/wsrm/200702"/>
<sp:Header Name="Sequence" Namespace="http://docs.oasis-open.org/ws-rx/wsrm/200702"/>
<sp:Header Name="CreateSequence" Namespace="http://docs.oasis-open.org/ws-rx/wsrm/200702"/>
<sp:SignedParts>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>
<!--レスポンスのオペレーション定義-->
<wsp:Policy wsu:Id="WebServiceOutputPolicy">
<wsp:ExactlyOne>
<wsp:All>
<!--暗号化の設定-->
<sp:EncryptedParts>
<!--SOAPボディを暗号化する場合-->
<sp:Body/>
</sp:EncryptedParts>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>
...
<binding name="WebServiceServicePortBinding" type="tns:WebServiceService">
<operation name="addNumbers">
...
<input>
<soap:body use="literal" namespace="http://nec.com"/>
<!--input要素の子要素としてwsp:PolicyReference要素を追加して、ポリシーを参照-->
<wsp:PolicyReference URI="#WebServiceInputPolicy"/>
</input>
<output>
<soap:body use="literal" namespace="http://duke.org"/>
<!--output要素の子要素としてwsp:PolicyReference要素を追加して、ポリシーを参照-->
<wsp:PolicyReference URI="#WebServiceOutputPolicy"/>
</output>
</operation>
...
</binding>
...
</definitions>
WebOTX独自のアサーション
設定できるアサーションは、WS-SecurityPolicyで定義されているアサーションとWebOTX独自のアサーションがあります。
ここではWebOTX独自のアサーションについて説明します。
<wo92sps:KeyStore wowsp:visibility="private" type="JKS" location="C:\WebOTX\domains\domain1\config\keystore.jks" storepass="changeit" alias="webotx" keypass="changeit"/>
表1.2.13.2-7
アサーション
|
説明
|
/wo92sps:KeyStore
|
キーストアの設定をするためのアサーションです。子要素はありません。
|
/wo92sps:KeyStore/@wowsp:visibility
|
KeyStore要素を公開するWSDLに表示するかどうかを設定する属性です。設定可能な値は"private"のみであり、設定時にはWSDLに表示されません。
|
/wo92sps:KeyStore/@type
|
キーストアのタイプを設定するための属性です。省略した場合は"JKS"となります。
|
/wo92sps:KeyStore/@location
|
キーストアの場所を設定する属性です。キーストアのファイルへの絶対パスを指定します。
|
/wo92sps:KeyStore/@storepass
|
キーストアのパスワードを設定する属性です。
|
/wo92sps:KeyStore/@alias
|
使用する鍵のエイリアスを設定する属性です。
|
/wo92sps:KeyStore/@keypass
|
使用する鍵のパスワードを設定する属性です。省略した場合は、@storepassの値が使用されます。
|
トラストストアに関するアサーション
構文:
<wo92sps:TrustStore wowsp:visibility="private" location="C:\WebOTX\domains\domain1\config\keystore.jks" storepass="changeit" peeralias="webotx"/>
表1.2.13.2-8
アサーション
|
説明
|
/wo92sps:TrustStore
|
トラストストアの設定をするためのアサーションです。子要素はありません。
|
/wo92sps:TrustStore/@wowsp:visibility
|
TrustStore要素を公開するWSDLに表示するかどうかを設定する属性です。設定可能な値は"private"のみであり、設定時にはWSDLに表示されません。
|
/wo92sps:TrustStore/@type
|
トラストストアのタイプを設定するための属性です。省略した場合は"JKS"となります。
|
/wo92sps:TrustStore/@location
|
トラストストアの場所を設定する属性です。トラストストアのファイルへの絶対パスを指定します。
|
/wo92sps:TrustStore/@storepass
|
トラストストアのパスワードを設定する属性です。
|
/wo92sps:TrustStore/@peeralias
|
使用する証明書のエイリアスを設定する属性です。
|
Validatorに関するアサーション
構文:
<wo92sps:ValidatorConfiguration wowsp:visibility="private" wowsp:maxClackSkew="300000" wowsp:timestampFreshnessLimit="300000">
<wo92sps:Validator name="usernameValidator" classname=""/> ?
<wo92sps:Validator name="certificateValidator" classname=""/> ?
<wo92sps:Validator name="timestampValidator" classname=""/> ?
<wo92sps:Validator name="securemasterValidator" classname="" confpath="" confpin=""/> ?
</wo92sps:ValidatorConfiguration>
表1.2.13.2-9
アサーション
|
説明
|
/wo92sps:ValidatorConfiguration
|
Validatorの設定をするためのアサーションです。Validator要素を子要素に持ちます。
|
/wo92sps:ValidatorConfiguration/@wowsp:visibility
|
ValidatorConfiguration要素を公開するWSDLに表示するかどうかを設定する属性です。設定可能な値は"private"のみであり、設定時にはWSDLに表示されません。
|
/wo92sps:ValidatorConfiguration/@wo92sps:maxClockSkew
|
送信側と受信側のシステムクロックの間に許容される最大の差を設定する属性です。
単位はミリ秒で、設定可能な値は0〜2147483647です。省略した場合は0が設定されます。
|
/wo92sps:ValidatorConfiguration/@wo92sps:timestampFreshnessLimit
|
Timestamp要素内のCreated要素の有効期間を設定する属性です。
単位はミリ秒で、設定可能な値は0〜2147483647です。省略した場合は300000が設定されます。
|
/wo92sps:ValidatorConfiguration/wo92sps:Validator
|
個別のValidatorを設定する要素です。
|
/wo92sps:ValidatorConfiguration/wo92sps:Validator/@name
|
Validatorの名前を設定する属性です。"usernameValidator"、"certificateValidator"、"timestampValidator"、"securemasterValidator"が設定可能です。
|
/wo92sps:ValidatorConfiguration/wo92sps:Validator/@classname
|
Validatorの実装クラスを設定する属性です。@nameに"securemasterValidator"を設定した場合は、@classnameの値を"com.nec.webotx.webservice.xml.wss.impl.callback.SecuremasterACPIValidator"としてください。
|
/wo92sps:ValidatorConfiguration/wo92sps:Validator/@confpath
|
SECUREMASTER認証で使用する設定ファイルの絶対パスを設定する属性です。@name属性が"securemasterValidator"のときのみ有効です。
|
/wo92sps:ValidatorConfiguration/wo92sps:Validator/@confpin
|
SECUREMASTER認証で使用する設定ファイルが暗号化されている場合、暗号化に用いたPINを設定する属性です。暗号化を施していない場合は省略します。@name属性が"securemasterValidator"のときのみ有効です。
|
SECUREMASTER認証に関するアサーション
構文:
・SecuremasterToken
<wo92sp:SecuremasterToken wo92sp:IncludeToken="">
<wsp:Policy>
<wo92sp:WssSecuremasterToken92/>
<wo92sp:NoPassword/> ?
<wo92sp:Nonce/> ?
<wo92sp:Created/> ?
</wsp:Policy>
</wo92sp:SecuremasterToken>
・SecuremasterConfig
<wo92sp:SecuremasterConfig RequireAuthentication="true"/>
表1.2.13.2-10
アサーション
|
説明
|
/wo92sp:SecuremasterToken
|
SecuremasterTokenを認証に利用するためのアサーションです。
|
/wo92sp:SecuremasterToken/@wo92sp:IncludeToken
|
SecuremasterTokenのIncludeToken属性。設定可能な値は"Always"、"AlwaysToRecipient"、"Never"です。
"Always"を設定した場合はクライアントにSECUREMASTERのcookieの値を返却します。
|
/wo92sp:SecuremasterToken/wsp:Policy/wo92sp:WssSecuremasterToken92
|
使用するSecuremasterTokenのバージョンを設定するアサーションです。必須要素です。
|
/wo92sp:SecuremasterToken/wsp:Policy/wo92sp:NoPassword
|
パスワードを使用しない場合に設定する要素です。記載しない場合は、パスワードを使用する設定となります。
|
/wo92sp:SecuremasterToken/wsp:Policy/wo92sp:Nonce
|
Nonceを使用する場合に設定する要素です。この要素を記載すると、wo92sp:Createdの有無によらずCreatedが併せて使用されます。記載しない場合は、Nonceを使用しない設定となります。
|
/wo92sp:SecuremasterToken/wsp:Policy/wo92sp:Created
|
Createdを使用する場合に設定する要素です。記載しない場合は、Createdを使用しない設定となります。
|
/wo92sp:SecuremasterConfig/@RequireAuthentication
|
SECUREMASTERの認証をサーバ側で実施するかクライアント側で実施するかを設定する属性です。
"true"と"false"が設定可能であり、"true"の場合はサーバ側で認証が実施されます。省略した場合は"true"が設定されます。
|
WS-Securityのサポート範囲
WS-Security 1.1のサポート範囲について以下の表に記します。
表1.2.13.2-11
大分類
|
小分類
|
サポート
|
Security Tokens
|
User Name Token
|
○
|
Binary Security Tokens
|
○
|
XML Tokens
|
×
|
EncryptedData Token
|
○
|
Token References
|
Direct References
|
○
|
Key Identifiers
|
○
|
Embedded References
|
×
|
ds:KeyInfo
|
○
|
Key Names
|
×
|
Encrypted Key reference
|
○
|
Signatures
|
Algorithms
|
○
|
Signing Messages
|
○
|
Signing Tokens
|
○
|
Signature Validation
|
○
|
Signature Confirmation
|
○
|
Encryption
|
xenc:ReferenceList
|
○
|
xenc:EncryptedKey
|
○
|
Encrypted Header
|
○
|
Processing Rules
|
○
|
Security Timestamps
|
|
○
|
Error Handling
|
|
○
|
WS-SecurityPolicyのサポート範囲
WS-SecurityPolicy 1.2のサポート範囲について以下の表に記します。
表1.2.13.2-12
大分類
|
中分類
|
小分類
|
アサーション
|
サポート
|
Protection Assertions
|
Integrity Assertions
|
SignedParts Assertion
|
|
○
|
SignedElements Assertion
|
|
×
|
Confidentiality Assertions
|
EncryptedParts Assertion
|
|
○
|
EncryptedElements Assertion
|
|
×
|
ContentEncryptedElements Assertion
|
|
×
|
Required Elements Assertion
|
RequiredElements Assertion
|
|
×
|
RequiredParts Assertion
|
|
×
|
Token Assertions
|
Token Inclusion
|
|
|
○
|
Token Issuer and Required Claims
|
|
|
×
|
Token Properties
|
[Derived Keys] Property
|
|
○
|
[Explicit Derived Keys] Property
|
|
×
|
[Implied Derived Keys] Property
|
|
×
|
Token Assertion Types
|
UsernameToken Assertion
|
@sp:IncludeToken
|
○ ※1
|
sp:Issuer
|
×
|
sp:IssuerName
|
×
|
wst:Claims
|
×
|
sp:NoPassword
|
○
|
sp:HashPassword
|
○
|
sp:RequireDerivedKeys
|
○
|
sp:RequireExplicitDerivedKeys
|
×
|
sp:RequireImpliedDerivedKeys
|
×
|
sp:WssUsernameToken10
|
○
|
sp:WssUsernameToken11
|
○
|
IssuedToken Assertion
|
|
×
|
X509Token Assertion
|
@sp:IncludeToken
|
○ ※2
|
sp:Issuer
|
×
|
sp:IssuerName
|
×
|
wst:Claims
|
×
|
sp:RequireDerivedKeys
|
○
|
sp:RequireExplicitDerivedKeys
|
×
|
sp:RequireImpliedDerivedKeys
|
×
|
sp:RequireKeyIdentifierReference
|
○
|
sp:RequireIssuerSerialReference
|
○
|
sp:RequireEmbeddedTokenReference
|
×
|
sp:RequireThumbprintReference
|
○
|
sp:WssX509V3Token10
|
○
|
sp:WssX509Pkcs7Token10
|
×
|
sp:WssX509PkiPathV1Token10
|
×
|
sp:WssX509V1Token11
|
×
|
sp:WssX509V3Token11
|
×
|
sp:WssX509PkcsToken11
|
×
|
sp:WssX509PkiPathV1Token11
|
×
|
KerberosToken Assertion
|
|
×
|
SpnegoContextToken Assertion
|
|
×
|
SecurityContextToken Assertion
|
|
×
|
SecureConversationToken Assertion
|
@sp:IncludeToken
|
○ ※2
|
sp:Issuer
|
×
|
sp:IssuerName
|
×
|
wst:Claims
|
×
|
sp:RequireDerivedKeys
|
○
|
sp:RequireExplicitDerivedKeys
|
×
|
sp:RequireImpliedDerivedKeys
|
×
|
sp:RequireExternalUriReference
|
×
|
sp:SC13SecurityContextToken
|
×
|
sp:MustNotSendAmend
|
×
|
sp:MustNotSendRenew
|
×
|
sp:BootstrapPolicy
|
○
|
SamlToken Assertion
|
|
×
|
RelToken Assertion
|
|
×
|
HttpsToken Assertion
|
@sp:IncludeToken
|
×
|
sp:Issuer
|
×
|
sp:IssuerName
|
×
|
sp:Claims
|
×
|
sp:HttpBasicAuthentication
|
×
|
sp:HttpDigestAuthentication
|
×
|
sp:RequireClientCertificate
|
○
|
KeyValueToken Assertion
|
|
×
|
Security Binding Assertions
|
Algorithm Suite Assertion
|
|
sp:Basic256
|
○
|
sp:Basic192
|
○
|
sp:Basic128
|
○
|
sp:TripleDes
|
○
|
sp:Basic256Rsa15
|
○
|
sp:Basic192Rsa15
|
○
|
sp:Basic128Rsa15
|
○
|
sp:TripleDesRsa15
|
○
|
sp:Basic256Sha256
|
○
|
sp:Basic192Sha256
|
○
|
sp:Basic128Sha256
|
○
|
sp:TripleDesSha256
|
○
|
sp:Basic256Sha256Rsa15
|
○
|
sp:Basic192Sha256Rsa15
|
○
|
sp:Basic128Sha256Rsa15
|
○
|
sp:TripleDesSha256Rsa15
|
○
|
sp:InclusiveC14N
|
×
|
sp:SoapNormalization10
|
×
|
sp:STRTransform10
|
×
|
sp:XPath10
|
×
|
sp:XPathFilter20
|
×
|
sp:AbsXPath
|
×
|
Layout Assertion
|
|
sp:Strict
|
○
|
sp:Lax
|
○
|
sp:LaxTsFirst
|
○
|
sp:LaxTsLast
|
○
|
TransportBinding Assertion
|
|
sp:TransportToken
|
○
|
sp:AlgorithmSuite
|
○
|
sp:Layout
|
○
|
sp:IncludeTimestamp
|
○
|
SymmetricBinding Assertion
|
|
sp:EncryptionToken
|
○
|
sp:SignatureToken
|
○
|
sp:ProtectionToken
|
○
|
sp:AlgorithmSuite
|
○
|
sp:Layout
|
○
|
sp:IncludeTimestamp
|
○
|
sp:EncryptBeforeSigning
|
○
|
sp:EncryptSignature
|
○
|
sp:ProtectTokens
|
○
|
sp:OnlySignEntireHeadersAndBody
|
○
|
AsymmetricBinding Assertion
|
|
sp:InitiatorToken
|
○
|
sp:RecipientToken
|
○
|
sp:AlgorithmSuite
|
○
|
sp:Layout
|
○
|
sp:IncludeTimestamp
|
○
|
sp:EncryptBeforeSigning
|
○
|
sp:EncryptSignature
|
○
|
sp:ProtectTokens
|
○
|
sp:OnlySignEntireHeadersAndBody
|
○
|
Supporting Tokens
|
SupportingTokens Assertion
|
|
|
○ ※3
|
SignedSupportingTokens Assertion
|
|
|
○ ※3
|
EndorsingSupportingTokens Assertion
|
|
|
○ ※3
|
SignedEndorsingSupportingTokens Assertion
|
|
|
○ ※3
|
SignedEncryptedSupportingTokens Assertion
|
|
|
○ ※3
|
EncryptedSupportingTokens Assertion
|
|
|
○ ※3
|
EndorsingEncryptedSupportingTokens Assertion
|
|
|
○ ※3
|
SignedEndorsingEncryptedSupportingTokens Assertion
|
|
|
○ ※3
|
WSS: SAP Message Security Options
|
Wss10 Assertion
|
|
sp:MustSupportRefKeyIdentifier
|
○
|
sp:MustSupportRefIssuerSerial
|
○
|
sp:MustSupportRefExternalURI
|
×
|
sp:MustSupportRefEmbeddedToken
|
×
|
Wss11 Assertion
|
|
sp:MustSupportRefKeyIdentifier
|
○
|
sp:MustSupportRefIssuerSerial
|
○
|
sp:MustSupportRefExternalURI
|
×
|
sp:MustSupportRefEmbeddedToken
|
×
|
sp:MustSupportRefThumbprint
|
○
|
sp:MustSupportRefEncryptedKey
|
×
|
sp:RequireSignatureConfirmation
|
○
|
WS-Trust Options
|
Trust13 Assertion
|
|
|
×
|
-
※1: http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient、http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Always のみをサポート
-
※2: http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Never、http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient、http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Always のみをサポート
-
※3: [Token Assertion]のみをサポート
1.2.13.3. クライアントアプリケーションの定義
ここではクライアント側のWS-Security設定の定義方法について説明します。
クライアント側は、1.2.13.2. サーバアプリケーションの定義の手順で作成されたWSDLを参照することで動作します。
追加でクライアント側に必要なキーストアやトラストストア等の設定を行うために、設定ファイルを作成します。
以下、設定ファイルにWS-Securityの設定を記述する方法について説明します。
なお、構文中の記号について、以下のように定義します。
- "?" : 0回もしくは1回
- "|" : いずれか一方
- "*" : 0回以上
設定ファイルの命名則と配置場所
クライアント独自の設定を有効にするために、設定ファイルを作成します。設定ファイルの内容はWebサービスのWSDLファイルにポリシー・アサーションを追加したものになります。
設定ファイルの名称は以下のようにします。
wsit-client.xml
この設定ファイルはCLASSPATHのルートに配置してください。
名前空間の定義
本節で使用するXML名前空間について説明します。
標準仕様のアサーションの説明で利用する名前空間は下記のとおりです。
表1.2.13.3-1 標準仕様の名前空間
Prefix
|
Namespace
|
sp
|
http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702
|
wsp
|
http://www.w3.org/ns/ws-policy
|
wsu
|
http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd
|
wsdl
|
http://schemas.xmlsoap.org/wsdl/
|
WebOTX独自のアサーションで利用する名前空間は下記のとおりです。
表1.2.13.3-2 WebOTX独自の名前空間
Prefix
|
Namespace
|
wo92sp
|
http://nec.com/ws-sx/wssp/201312
|
wo92spc
|
http://nec.com/ws-sx/wssp/client/201312
|
wowsp
|
http://nec.com/xml/ns/wsit/policy
|
ポリシー・アサーションの設定手順
設定ファイルの記述方法を説明します。
(1) WSDLファイルと同じ内容の設定ファイルを作成します。サービス側で設定したポリシーは必要ありません。
(2) wsdl:definitions要素の子要素としてWS-Securityのポリシー定義を追加します。追加するポリシーは、サービス側のバインディング定義と同じIdとしてください。
以下、バインディング定義の記述方法について説明します。オペレーション定義については、サービス側で設定したポリシーに追加する必要はありません。
- バインディング定義の記述方法
wsdl:definitions/wsp:Policy要素の子要素として、WebOTX独自要素を追加します。
以下に、設定ファイルの記述例を示します。WebOTX独自要素については、WebOTX独自のアサーションを参照してください。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<definitions targetNamespace="http://nec.webotx.com" name="webServiceService"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"
xmlns:wsp="http://www.w3.org/ns/ws-policy"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:wowsp="http://nec.com/xml/ns/wsit/policy"
xmlns:wo92spc="http://nec.com/ws-sx/wssp/client/201312"
xmlns:wo92sp="http://nec.com/ws-sx/wssp/201312">
...
<!--バインディング定義(サービス側と同じwsu:Id)-->
<wsp:Policy wsu:Id="WebServiceServicePortBindingPolicy">
<wsp:ExactlyOne>
<wsp:All>
<!--CallbackHandlerを設定-->
<wo92spc:CallbackHandlerConfiguration wowsp:visibility="private">
<!--ユーザ名の値を処理するCallbackHandlerを設定-->
<wo92spc:CallbackHandler default="wsitUser" name="usernameHandler" />
<!--パスワードの値を処理するCallbackHandlerを設定-->
<wo92spc:CallbackHandler default="wsitUser" name="passwordHandler" />
</wo92spc:CallbackHandlerConfiguration>
<!--KeyStoreを設定-->
<wo92spc:KeyStore wowsp:visibility="private" location="C:\WebOTX\domains\domain1\config\keystore.jks" type="JKS" storepass="changeit" alias="webotx"/>
<!--TrustStoreを設定-->
<wo92spc:TrustStore wowsp:visibility="private" location="C:\WebOTX\domains\domain1\config\keystore.jks" type="JKS" storepass="changeit" peeralias="webotx"/>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>
...
<binding name="WebServiceServicePortBinding" type="tns:WebServiceService">
<!--wsdl:binding要素の子要素としてwsp:PolicyReference要素を追加して、ポリシーを参照-->
<wsp:PolicyReference URI="#WebServiceServicePortBindingPolicy"/>
...
</binding>
...
</definitions>
WebOTX独自のアサーション
設定できるアサーションは、WS-SecurityPolicyで定義されているアサーションとWebOTX独自のアサーションがあります。
ここではWebOTX独自のアサーションについて説明します。
<wo92spc:KeyStore wowsp:visibility="private" location="C:\WebOTX\domains\domain1\config\keystore.jks" storepass="changeit" alias="webotx" keypass="changeit"/>
表1.2.13.3-3
アサーション
|
説明
|
/wo92spc:KeyStore
|
キーストアの設定をするためのアサーションです。子要素はありません。
|
/wo92spc:KeyStore/@wowsp:visibility
|
KeyStore要素を公開するWSDLに表示するかどうかを設定する属性です。設定可能な値は"private"のみであり、設定時にはWSDLに表示されません。
|
/wo92spc:KeyStore/@type
|
キーストアのタイプを設定するための属性です。省略した場合は"JKS"となります。
|
/wo92spc:KeyStore/@location
|
キーストアの場所を設定する属性です。キーストアのファイルへの絶対パスを指定します。
|
/wo92spc:KeyStore/@storepass
|
キーストアのパスワードを設定する属性です。
|
/wo92spc:KeyStore/@alias
|
使用する鍵のエイリアスを設定する属性です。
|
/wo92spc:KeyStore/@keypass
|
使用する鍵のパスワードを設定する属性です。省略した場合は、@storepassの値が使用されます。
|
トラストストアに関するアサーション
構文:
<wo92spc:TrustStore wowsp:visibility="private" location="C:\WebOTX\domains\domain1\config\keystore.jks" storepass="changeit" peeralias="webotx"/>
表1.2.13.3-4
アサーション
|
説明
|
/wo92spc:TrustStore
|
トラストストアの設定をするためのアサーションです。子要素はありません。
|
/wo92spc:TrustStore/@wowsp:visibility
|
TrustStore要素を公開するWSDLに表示するかどうかを設定する属性です。設定可能な値は"private"のみであり、設定時にはWSDLに表示されません。
|
/wo92spc:TrustStore/@type
|
トラストストアのタイプを設定するための属性です。省略した場合は"JKS"となります。
|
/wo92spc:TrustStore/@location
|
トラストストアの場所を設定する属性です。トラストストアのファイルへの絶対パスを指定します。
|
/wo92spc:TrustStore/@storepass
|
トラストストアのパスワードを設定する属性です。
|
/wo92spc:TrustStore/@peeralias
|
使用する証明書のエイリアスを設定する属性です。
|
CallbackHandlerに関するアサーション
構文:
<wo92spc:CallbackHandlerConfiguration wowsp:visibility="private" timestampTimeout="300000">
( <wo92spc:CallbackHandler name="usernameHandler" classname=""/> |
<wo92spc:CallbackHandler name="usernameHandler" default=""/> ) ?
( <wo92spc:CallbackHandler name="passwordHandler" classname=""/> |
<wo92spc:CallbackHandler name="passwordHandler" default=""/> ) ?
<wo92spc:CallbackHandler name="securemasterHandler" classname="" username="" password="" confpath="" confpin=""/> ?
</wo92sps:ValidatorConfiguration>
表1.2.13.3-5
アサーション
|
説明
|
/wo92spc:CallbackHandlerConfiguration
|
CallbackHandlerの設定をするためのアサーションです。CallbackHandler要素を子要素に持ちます。
|
/wo92spc:CallbackHandlerConfiguration/@wowsp:visibility
|
CallbackHandlerConfiguration要素を公開するWSDLに表示するかどうかを設定する属性です。設定可能な値は"private"のみであり、設定時にはWSDLに表示されません。
|
/wo92spc:CallbackHandlerConfiguration/@timestampTimeout
|
タイムスタンプの有効時間を設定する属性です。
単位はミリ秒で、設定可能な値は0〜2147483647です。省略した場合は300000が設定されます。
|
/wo92spc:CallbackHandlerConfiguration/wo92spc:CallbackHandler
|
個別のCallbackHandlerを設定する要素です。
|
/wo92spc:CallbackHandlerConfiguration/wo92spc:CallbackHandler/@name
|
CallbackHandlerの名前を設定する属性です。"usernameHandler"、"passwordHandler"、"securemasterHandler"が設定可能です。
|
/wo92spc:CallbackHandlerConfiguration/wo92spc:CallbackHandler/@classname
|
CallbackHandlerの実装クラスを設定する属性です。@nameに"securemasterHandler"を設定した場合は、@classnameの値を"com.nec.webotx.webservice.xml.wss.impl.callback.SecuremasterCallbackHandler"としてください。
|
/wo92spc:CallbackHandlerConfiguration/wo92spc:CallbackHandler/@default
|
ユーザ名、パスワードの値を直接指定するための属性です。"usernameHandler"、"passwordHandler"のときのみ有効です。
|
/wo92spc:CallbackHandlerConfiguration/wo92spc:CallbackHandler/@username
|
SECUREMASTER認証で使用するユーザ名を設定する属性です。"securemasterHandler"のときのみ有効です。
|
/wo92spc:CallbackHandlerConfiguration/wo92spc:CallbackHandler/@password
|
SECUREMASTER認証で使用するパスワードを設定する属性です。"securemasterHandler"のときのみ有効です。encryptwsspasswordを用いて暗号化したパスワードを設定します。
|
/wo92spc:CallbackHandlerConfiguration/wo92spc:CallbackHandler/@confpath
|
SECUREMASTER認証で使用する設定ファイルの絶対パスを設定する属性です。@name属性が"securemasterValidator"のときのみ有効です。
SecuremasterConfig/@RequireAuthentication="true"の場合は、"nouse"を設定します。
|
/wo92spc:CallbackHandlerConfiguration/wo92spc:CallbackHandler/@confpin
|
SECUREMASTER認証で使用する設定ファイルが暗号化されている場合、暗号化に用いたPINを設定する属性です。暗号化を施していない場合は省略します。@name属性が"securemasterValidator"のときのみ有効です。
|
SECUREMASTER認証に関するアサーション
構文:
<wo92spc:SmKeyStore wowsp:visibility="private" location="C:\WebOTX\domains\domain1\config\keystore.jks" storepass="changeit" alias="webotx" keypass="changeit"/>
表1.2.13.3-6
アサーション
|
説明
|
/wo92spc:SmKeyStore
|
SECUREMASTER認証で使用するパスワードを暗号化するためのキーストアの設定をするためのアサーションです。子要素はありません。
|
/wo92spc:SmKeyStore/@wowsp:visibility
|
SmKeyStore要素を公開するWSDLに表示するかどうかを設定する属性です。設定可能な値は"private"のみであり、設定時にはWSDLに表示されません。
|
/wo92spc:SmKeyStore/@type
|
SECUREMASTER認証で使用するパスワードを暗号化するためのキーストアのタイプを設定するための属性です。省略した場合は"JKS"となります。
|
/wo92spc:SmKeyStore/@location
|
SECUREMASTER認証で使用するパスワードを暗号化するためのキーストアの場所を設定する属性です。キーストアのファイルへの絶対パスを指定します。
|
/wo92spc:SmKeyStore/@storepass
|
SECUREMASTER認証で使用するパスワードを暗号化するためのキーストアのパスワードを設定する属性です。
|
/wo92spc:SmKeyStore/@alias
|
SECUREMASTER認証で使用するパスワードを暗号化するための鍵のエイリアスを設定する属性です。
|
/wo92spc:SmKeyStore/@keypass
|
SECUREMASTER認証で使用するパスワードを暗号化するための鍵のパスワードを設定する属性です。省略した場合は、@storepassの値が使用されます。
|
1.2.13.4. CallbackHandlerの実装
UsernameTokenによる認証を行う場合、動的にユーザ名・パスワードを取得するためにはCallbackHandlerを実装し、wsit-client.xmlのwo92spc:CallbackHandlerConfigurationに設定する必要があります。
CallbackHandlerはjavax.security.auth.callback.CallbackHandlerのインタフェースを実装して作成します。usernameHandlerとpasswordHandlerを個別のクラスとして実装することができますが、下記の実装例のように一つのクラスに両方のCallbackHandlerの機能を持たせることもできます。
以下に、CallbackHandlerの実装例を記載します。
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.NameCallback;
import javax.security.auth.callback.PasswordCallback;
import javax.security.auth.callback.UnsupportedCallbackException;
import java.io.IOException;
public class UsernamePasswordCallbackHandler implements CallbackHandler {
public void handle(Callback[] callbacks) throws IOException ,UnsupportedCallbackException {
for (int i =0; i < callbacks.length; i++) {
if(callbacks[i] instanceof NameCallback) {
String username = null;
// ここにユーザ名取得のロジックを実装します。
// 例では、単に固定文字列を代入します。
username = "wsitUser";
((NameCallback)callbacks[i]).setName(username);
} else if(callbacks[i] instanceof PasswordCallback){
String password = null;
// ここにパスワード取得のロジックを実装します。
// 例では、単に固定文字列を代入します。
password = "wsitPass";
((PasswordCallback)callbacks[i]).setPassword(password.toCharArray());
} else {
throw new UnsupportedCallbackException(callbacks[i],"UnrecognizedCallback");
}
}
}
}
1.2.13.5. Validatorの実装
UsernameTokenによる認証を行う場合、サービス側でユーザの認証処理を行うValidatorを実装し、サービス側設定ファイルのwo92sps:ValidatorConfigurationに設定する必要があります。
X509TokenやTimestampTokenについては、デフォルトのValidatorが内蔵されていますが、独自実装したものを使用することもできます。
UsernameToken用のValidatorは、セキュリティの設定によって実装すべきインタフェースが異なります。
- SupportingTokensにUsernameTokenを定義している場合
- SupportingTokensにUsernameTokenを定義し、ハッシュパスワードを有効にしている場合
- ProtectionTokenにUsernameTokenを定義している場合
以下に、それぞれの場合のValidator実装例を記載します。
SupportingTokensにUsernameTokenを定義している場合
import com.nec.webotx.webservice.xml.wss.impl.callback.PasswordValidationCallback.PasswordValidationException;
import com.nec.webotx.webservice.xml.wss.impl.callback.PasswordValidationCallback.PasswordValidator;
import com.nec.webotx.webservice.xml.wss.impl.callback.PasswordValidationCallback.PlainTextPasswordRequest;
import com.nec.webotx.webservice.xml.wss.impl.callback.PasswordValidationCallback.Request;
public class TestPasswordValidator implements PasswordValidator {
public boolean validate(Request request) throws PasswordValidationException {
// ここにユーザ認証のロジックを実装します。
// この例では、単に固定文字列と比較します。
if(request instanceof PlainTextPasswordRequest){
PlainTextPasswordRequest req = (PlainTextPasswordRequest) request;
if("wsitUser".equals(req.getUsername()) && "wsitPass".equals(req.getPassword())){
return true;
}
}
return false;
}
}
ハッシュパスワードを有効にしている場合
import com.nec.webotx.webservice.xml.wss.impl.callback.PasswordValidationCallback.WsitDigestPasswordValidator;
import com.nec.webotx.webservice.xml.wss.impl.callback.PasswordValidationCallback.Request;
import com.nec.webotx.webservice.xml.wss.impl.callback.PasswordValidationCallback.DigestPasswordRequest;
public class TestWsitDigestPasswordValidator extends WsitDigestPasswordValidator {
public void setPassword(Request request) {
// requestにパスワードをセットします。
// ここでは、単に固定文字列をセットします。
if(request instanceof DigestPasswordRequest){
((DigestPasswordRequest)request).setPassword("wsitPass");
}
}
}
ProtectionTokenにUsernameTokenを定義している場合
import com.nec.webotx.webservice.xml.wss.impl.callback.PasswordValidationCallback;
import com.nec.webotx.webservice.xml.wss.impl.callback.PasswordValidationCallback.DerivedKeyPasswordValidator;
import com.nec.webotx.webservice.xml.wss.impl.callback.PasswordValidationCallback.PasswordValidationException;
import com.nec.webotx.webservice.xml.wss.impl.callback.PasswordValidationCallback.Request;
import com.nec.webotx.webservice.xml.wss.impl.callback.PasswordValidationCallback.DerivedKeyPasswordRequest;
public class TestDerivedKeyPasswordValidator extends DerivedKeyPasswordValidator {
public void setPassword(Request request) {
// requestにパスワードをセットします。
// ここでは、単に固定文字列をセットします。
if(request instanceof DerivedKeyPasswordRequest){
DerivedKeyPasswordRequest req = (DerivedKeyPasswordRequest)request;
req.setPassword("wsitPass");
}
}
public boolean validate(Request request) throws PasswordValidationException {
// ここにユーザ認証のロジックを実装します。
// この例では、単に固定文字列と比較します。
if(request instanceof DerivedKeyPasswordRequest){
DerivedKeyPasswordRequest req = (DerivedKeyPasswordRequest)request;
if("wsitUser".equals(req.getUsername()) && "wsitPass".equals(req.getPassword())){
return true;
}
}
return false;
}
}
TimestampToken用のValidator
import com.nec.webotx.webservice.xml.wss.impl.callback.TimestampValidationCallback;
import com.nec.webotx.webservice.xml.wss.impl.callback.TimestampValidationCallback.UTCTimestampRequest;
import com.nec.webotx.webservice.xml.wss.impl.callback.TimestampValidationCallback.TimestampValidator;
import com.nec.webotx.webservice.xml.wss.impl.callback.TimestampValidationCallback.TimestampValidationException;
import com.nec.webotx.webservice.xml.wss.impl.callback.TimestampValidationCallback.Request;
public class TestTimestampValidator implements TimestampValidator {
public void validate(Request request) throws TimestampValidationException {
boolean result = false;
// ここにTimestampの検証ロジックを実装します。
if(request instanceof UTCTimestampRequest){
}
return result;
}
}
証明書用のValidator
import com.nec.webotx.webservice.xml.wss.impl.callback.CertificateValidationCallback;
import com.nec.webotx.webservice.xml.wss.impl.callback.CertificateValidationCallback.CertificateValidator;
import com.nec.webotx.webservice.xml.wss.impl.callback.CertificateValidationCallback.CertificateValidationException;
import java.security.cert.X509Certificate;
public class TestCertificateValidator implements CertificateValidator {
public boolean validate(X509Certificate certificate) throws CertificateValidationException {
boolean result = false;
// ここに証明書の検証ロジックを実装します。
return result;
}
}