例: バージョン 5.x アプリケーションの Web Services Security のサンプル構成
バージョン 5.x アプリケーションを Web Services Security で セキュアするには、IBM® 拡張デプロイメント記述子および IBM 拡張バインディングに、セキュリティー制約を定義する必要があります。 サンプル構成では、サンプルの鍵ストア・ファイル、およびデフォルトのバインディング情報が提供されています。 これにより、IBM デプロイメント記述子拡張およびバインディングの機能を示します。
- ${USER_INSTALL_ROOT}/etc/ws-security/samples/dsig-sender.ks
- 鍵ストア・パスワードは client です。
- トラステッド証明書の別名は soapca です。
- 個人証明書の別名は、soaprequester で、鍵パスワード client は中間認証局 Int CA2 で発行され、同様にこの中間認証局は soapca で発行されます。
- ${USER_INSTALL_ROOT}/etc/ws-security/samples/dsig-receiver.ks
- 鍵ストア・パスワードは server です。
- トラステッド証明書の別名は soapca です。
- 個人証明書の別名は soapprovider で、鍵パスワード server は中間認証局 Int CA2 で発行され、同様にこの中間認証局は soapca で発行されます。
- ${USER_INSTALL_ROOT}/etc/ws-security/samples/enc-sender.jceks
- 鍵ストア・パスワードは storepass です。
- 秘密鍵は CN=Group1、別名は Group1、鍵パスワードは keypass です。
- 公開鍵は CN=Bob, O=IBM, C=US、別名は bob、鍵パスワードは keypass です。
- 秘密鍵は CN=Alice, O=IBM, C=US、別名は alice、鍵パスワードは keypass です。
- ${USER_INSTALL_ROOT}/etc/ws-security/samples/enc-receiver.jceks
- 鍵ストア・パスワードは storepass です。
- 秘密鍵は CN=Group1、別名は Group1、鍵パスワードは keypass です。
- 秘密鍵は CN=Bob, O=IBM, C=US、別名は bob、鍵パスワードは keypass です。
- 公開鍵は CN=Alice, O=IBM, C=US、別名は alice、鍵パスワードは keypass です。
- ${USER_INSTALL_ROOT}/etc/ws-security/samples/intca2.cer
- 中間認証局は Int CA2 です。
デフォルトのバインディング (セルおよびサーバー・レベル)
- トラスト・アンカー
- 署名者証明書の信頼性を検証する場合に使用します。
- SampleClientTrustAnchor は、応答受信側が、署名者証明書を検証する場合に使用します。
- SampleServerTrustAnchor は、要求受信側が、署名者証明書を検証する場合に使用します。
- コレクション証明書ストア
- 証明書パスを検証する場合に使用します。
- SampleCollectionCertStore は、応答受信側と要求受信側が、署名者証明書パスを検証する場合に使用します。
- 鍵ロケーター
- シグニチャー、暗号化、および暗号化解除のための鍵を見つける場合に使用します。
- SampleClientSignerKey は、要求送信側が、SOAP メッセージに署名する場合に使用します。 署名鍵名は clientsignerkey です。これは、 署名情報で署名鍵名として参照されます。
- SampleServerSignerKey は、応答送信側が、SOAP メッセージに署名する場合に使用します。 署名鍵名は serversignerkey です。これは、 署名情報で署名鍵名として参照されます。
- SampleSenderEncryptionKeyLocator は、送信側が、SOAP メッセージを暗号化する場合に使用します。 これは、${USER_INSTALL_ROOT}/etc/ws-security/samples/enc-sender.jceks 鍵ストアおよび com.ibm.wsspi.wssecurity.config.KeyStoreKeyLocator 鍵ストア鍵ロケーターを使用するように構成されています。
- SampleReceiverEncryptionKeyLocator は、受信側が、暗号化された SOAP メッセージを暗号化解除する場合に使用します。 この実装は、${USER_INSTALL_ROOT}/etc/ws-security/samples/enc-receiver.jceks 鍵ストアおよび com.ibm.wsspi.wssecurity.config.KeyStoreKeyLocator 鍵ストア鍵ロケーターを使用するように構成されています。 また、この実装は、対称暗号化 (DES または TRIPLEDES) 用に構成されます。この実装を 非対称暗号化 (RSA) に対して使用する場合は、秘密鍵 CN=Bob, O=IBM, C=US、別名 bob、および鍵パスワード keypass を追加する必要があります。
- SampleResponseSenderEncryptionKeyLocator は、応答送信側が、SOAP 応答メッセージを暗号化する場合に使用します。 これは、${USER_INSTALL_ROOT}/etc/ws-security/samples/enc-receiver.jceks 鍵ストアおよび com.ibm.wsspi.wssecurity.config.WSIdKeyStoreMapKeyLocator 鍵ロケーターを使用するように構成されています。 この鍵ロケーターによって、暗号化の公開鍵に (現在のスレッドの) 認証 ID がマップされます。 デフォルトでは、WebSphere Application Server は公開鍵 alice にマップするように構成されますので、WebSphere Application Server を該当のユーザーに合わせて変更する必要があります。また、SampleResponseSenderEncryptionKeyLocator 鍵ロケーター は、暗号化のデフォルト鍵を設定することもできます。 この鍵ロケーターは、デフォルトでは公開鍵 alice を使用するよう構成されています。
- トラステッド ID エバリュエーター
- ID アサーションで ID を断定する前に信頼を確立する場合に使用します。SampleTrustedIDEvaluator は、 com.ibm.wsspi.wssecurity.id.TrustedIDEvaluatorImpl 実装を使用するよう構成されています。 com.ibm.wsspi.wssecurity.id.TrustedIDEvaluator のデフォルトの実装には、トラステッド ID のリストが含まれています。 このリストは、鍵として trustedId_* を、トラステッド ID として値を指定したプロパティーとして定義されています。 管理コンソールを使用してサーバー・レベルでこの情報を定義するには、次のステップを実行します。
- とクリックします。
- 「追加プロパティー」の下で、 とクリックします。
- ログイン・マッピング
- SOAP メッセージの Web Services Security SOAP ヘッダーの受信セキュリティー・トークンを認証する場合に使用します。
- BasicAuth 認証メソッドは、 ユーザー名のセキュリティー・トークン (ユーザー名およびパスワード) を認証するために使用します。
- シグニチャー認証メソッドは、識別名 (DN) を WebSphere Application Server の Java™ Authentication and Authorization Server (JAAS) サブジェクトにマップする場合に使用します。
- IDAssertion 認証メソッドは、 トラステッド ID を WebSphere Application Server JAAS サブジェクトに マップして ID アサーションを行う場合に使用します。
- Lightweight Third Party Authentication (LTPA) 認証メソッドは、LTPA セキュリティー・トークンを検証する場合に使用します。
サンプル構成
以下の例では、IBM デプロイメント記述子の拡張およびバインディングの機能を示します。 分かりやすくするために、必要のない情報は例から除去されています。 この例をご使用のアプリケーション・デプロイメント記述子やバインディングにコピーして貼り付けないでください。 この例は参照用であり、推奨される構成ではありません。
- IBM デプロイメント記述子の拡張を作成または編集する場合は、アセンブリー・ツールを使用します。
- バインディング・ファイルを作成または編集する場合は、アセンブリー・ツールまたは管理コンソールを使用します。
- SOAP 本体、タイム・スタンプ、およびセキュリティー・トークンへの署名
- 本体の内容およびユーザー名トークンの暗号化
- ユーザー名トークン (基本認証データ) の送信
- 要求のタイム・スタンプの生成
応答の場合、SOAP 本体とタイム・スタンプは署名され、本体の内容は暗号化されて、タイム・スタンプを使用して SOAP メッセージの最新度がチェックされます。 メッセージの最新度によって、そのメッセージが事前定義された時間の制約に準拠しているかどうかが示されます。
要求送信側と要求受信側はペアになっています。 同様に、応答送信側と応答受信側もペアになっています。
クライアント・サイドの IBM デプロイメント記述子の拡張
クライアント・サイドの IBM デプロイメント記述子の拡張には、以下の制約が記述されています。
- SOAP 本体、タイム・スタンプ、およびセキュリティー・トークンへの署名
- 本体の内容およびユーザー名トークンの暗号化
- 基本認証トークン (ユーザー名およびパスワード) の送信
- 3 分で有効期限が切れるタイム・スタンプの生成
- SOAP 本体とタイム・スタンプが署名されていることの確認
- SOAP 本体の内容が暗号化されていることの確認
- タイム・スタンプが存在していることの確認 (メッセージの最新度のチェック)
<?xml version="1.0" encoding="UTF-8"?>
<com.ibm.etools.webservice.wscext:WsClientExtension xmi:version="2.0"
xmlns:xmi="http://www.omg.org/XMI" xmlns:com.ibm.etools.webservice.wscext=
http://www.ibm.com/websphere/appserver/schemas/5.0.2/wscext.xmi">
<serviceRefs serviceRefLink="service/myServ">
<portQnameBindings portQnameLocalNameLink="Port1">
<clientServiceConfig actorURI="myActorURI">
<securityRequestSenderServiceConfig actor="myActorURI">
<integrity>
<references part="body"/>
<references part="timestamp"/>
<references part="securitytoken"/>
</integrity>
<confidentiality>
<confidentialParts part="bodycontent"/>
<confidentialParts part="usernametoken"/>
</confidentiality>
<loginConfig authMethod="BasicAuth"/>
<addCreatedTimeStamp flag="true" expires="PT3M"/>
</securityRequestSenderServiceConfig>
<securityResponseReceiverServiceConfig>
<requiredIntegrity>
<references part="body"/>
<references part="timestamp"/>
</requiredIntegrity>
<requiredConfidentiality>
<confidentialParts part="bodycontent"/>
</requiredConfidentiality>
<addReceivedTimeStamp flag="true"/>
</securityResponseReceiverServiceConfig>
</clientServiceConfig>
</portQnameBindings>
</serviceRefs>
</com.ibm.etools.webservice.wscext:WsClientExtension>
クライアント・サイドの IBM 拡張のバインディング
例 2 では、 クライアント・サイドの IBM デプロイメント記述子の拡張に関するセクションで説明したセキュリティー制約のクライアント・サイドの IBM 拡張のバインディングが示されます。
メッセージの署名者鍵および暗号 (暗号化解除) 鍵は、鍵ストア鍵ロケーターの実装から取得できます (com.ibm.wsspi.wssecurity.config.KeyStoreKeyLocator)。 署名者鍵は、応答を暗号化する場合に使用します。 このサンプルは、Java Certification Path API を使用して、 デジタル署名の署名者の認証パスを検証するよう構成されています。 ユーザー名トークン (基本認証) データは、 デフォルトの JAAS 実装の 1 つである :javax.security.auth.callback.CallbackHandler 実装を使用して、 標準入力 (STDIN) プロンプトから収集されます (com.ibm.wsspi.wssecurity.auth.callback.StdinPromptCallbackHandler)。
<?xml version="1.0" encoding="UTF-8"?>
<com.ibm.etools.webservice.wscbnd:ClientBinding xmi:version="2.0"
xmlns:xmi="http://www.omg.org/XMI"
xmlns:com.ibm.etools.webservice.wscbnd=
"http://www.ibm.com/websphere/appserver/schemas/5.0.2/wscbnd.xmi">
<serviceRefs serviceRefLink="service/MyServ">
<portQnameBindings portQnameLocalNameLink="Port1">
<securityRequestSenderBindingConfig>
<signingInfo>
<signatureMethod algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<signingKey name="clientsignerkey" locatorRef="SampleClientSignerKey"/>
<canonicalizationMethod algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<digestMethod algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
</signingInfo>
<keyLocators name="SampleClientSignerKey" classname=
"com.ibm.wsspi.wssecurity.config.KeyStoreKeyLocator">
<keyStore storepass="{xor}PDM2OjEr" path=
"$${USER_INSTALL_ROOT}/etc/ws-security/samples/dsig-sender.ks" type="JKS"/>
<keys alias="soaprequester" keypass="{xor}PDM2OjEr" name="clientsignerkey"/>
</keyLocators>
<encryptionInfo name="EncInfo1">
<encryptionKey name="CN=Bob, O=IBM, C=US" locatorRef=
"SampleSenderEncryptionKeyLocator"/>
<encryptionMethod algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"/>
<keyEncryptionMethod algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
</encryptionInfo>
<keyLocators name="SampleSenderEncryptionKeyLocator" classname=
"com.ibm.wsspi.wssecurity.config.KeyStoreKeyLocator">
<keyStore storepass="{xor}LCswLTovPiws" path=
"$${USER_INSTALL_ROOT}/etc/ws-security/samples/enc-sender.jceks" type="JCEKS"/>
<keys alias="Group1" keypass="{xor}NDomLz4sLA==" name="CN=Group1"/>
</keyLocators>
<loginBinding authMethod="BasicAuth" callbackHandler=
"com.ibm.wsspi.wssecurity.auth.callback.StdinPromptCallbackHandler"/>
</securityRequestSenderBindingConfig>
<securityResponseReceiverBindingConfig>
<signingInfos>
<signatureMethod algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<certPathSettings>
<trustAnchorRef ref="SampleClientTrustAnchor"/>
<certStoreRef ref="SampleCollectionCertStore"/>
</certPathSettings>
<canonicalizationMethod algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<digestMethod algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
</signingInfos>
<trustAnchors name="SampleClientTrustAnchor">
<keyStore storepass="{xor}PDM2OjEr" path=
"$${USER_INSTALL_ROOT}/etc/ws-security/samples/dsig-sender.ks" type="JKS"/>
</trustAnchors>
<certStoreList>
<collectionCertStores provider="IBMCertPath" name="SampleCollectionCertStore">
<x509Certificates path="$${USER_INSTALL_ROOT}/etc/ws-security/samples/intca2.cer"/>
</collectionCertStores>
</certStoreList>
<encryptionInfos name="EncInfo2">
<encryptionKey locatorRef="SampleReceiverEncryptionKeyLocator"/>
<encryptionMethod algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"/>
<keyEncryptionMethod algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
</encryptionInfos>
<keyLocators name="SampleReceiverEncryptionKeyLocator" classname=
"com.ibm.wsspi.wssecurity.config.KeyStoreKeyLocator">
<keyStore storepass="{xor}PDM2OjEr" path=
"$${USER_INSTALL_ROOT}/etc/ws-security/samples/dsig-sender.ks" type="JKS"/>
<keys alias="soaprequester" keypass="{xor}PDM2OjEr" name="clientsignerkey"/>
</keyLocators>
</securityResponseReceiverBindingConfig>
</portQnameBindings>
</serviceRefs>
</com.ibm.etools.webservice.wscbnd:ClientBinding>
サーバー・サイドの IBM デプロイメント記述子の拡張
クライアント・サイドの IBM デプロイメント記述子の拡張には、以下の制約が記述されています。
- SOAP 本体、タイム・スタンプ、およびセキュリティー・トークンが署名されていることの確認。
- SOAP 本体の内容とユーザー名トークンが暗号化されていることの確認。
- 基本認証トークン (ユーザー名およびパスワード) が Web Services Security の SOAP ヘッダーにあることの確認。
- タイム・スタンプが存在していることの確認 (メッセージの最新度のチェック)。メッセージの最新度によって、そのメッセージが事前定義された時間の制約に準拠しているかどうかが示されます。
- SOAP 本体およびタイム・スタンプへの署名
- SOAP 本体の内容の暗号化
- 3 分で有効期限が切れるタイム・スタンプの生成
<?xml version="1.0" encoding="UTF-8"?>
<com.ibm.etools.webservice.wsext:WsExtension xmi:version="2.0"
xmlns:xmi="http://www.omg.org/XMI"
xmlns:com.ibm.etools.webservice.wsext=
http://www.ibm.com/websphere/appserver/schemas/5.0.2/wsext.xmi">
<wsDescExt wsDescNameLink="MyServ">
<pcBinding pcNameLink="Port1">
<serverServiceConfig actorURI="myActorURI">
<securityRequestReceiverServiceConfig>
<requiredIntegrity>
<references part="body"/>
<references part="timestamp"/>
<references part="securitytoken"/>
</requiredIntegrity>
<requiredConfidentiality">
<confidentialParts part="bodycontent"/>
<confidentialParts part="usernametoken"/>
</requiredConfidentiality>
<loginConfig>
<authMethods text="BasicAuth"/>
</loginConfig>
<addReceivedTimestamp flag="true"/>
</securityRequestReceiverServiceConfig>
<securityResponseSenderServiceConfig actor="myActorURI">
<integrity>
<references part="body"/>
<references part="timestamp"/>
</integrity>
<confidentiality>
<confidentialParts part="bodycontent"/>
</confidentiality>
<addCreatedTimestamp flag="true" expires="PT3M"/>
</securityResponseSenderServiceConfig>
</serverServiceConfig>
</pcBinding>
</wsDescExt>
</com.ibm.etools.webservice.wsext:WsExtension>
サーバー・サイドの IBM 拡張のバインディング
以下のバインディング情報では、システムに応じてサーバー・レベルまたはセル・レベルで定義されたデフォルトのバインディング情報の一部が再利用されます。 例えば、要求受信側は SampleCollectionCertStore 認証ストアを参照し、SampleServerTrustAnchor トラストストアはデフォルトのバインディングで定義されています。 ただし、要求受信側の暗号化情報は、アプリケーション・レベルのバインディング (同じ ibm-webservices-bnd.xmi ファイル) で定義された SampleReceiverEncryptionKeyLocator 鍵ロケーターを参照します。 応答送信側は、デフォルトの鍵ロケーター (com.ibm.wsspi.wssecurity.config.CertInRequestKeyLocator) のいずれか 1 つの実装を使用して応答を暗号化する場合、 要求のデジタル署名の署名者鍵を使用するよう構成されています。
<?xml version="1.0" encoding="UTF-8"?>
<com.ibm.etools.webservice.wsbnd:WSBinding xmi:version="2.0"
xmlns:xmi="http://www.omg.org/XMI"
xmlns:com.ibm.etools.webservice.wsbnd=
http://www.ibm.com/websphere/appserver/schemas/5.0.2/wsbnd.xmi">
<wsdescBindings wsDescNameLink="MyServ">
<pcBindings pcNameLink="Port1" scope="Session">
<securityRequestReceiverBindingConfig>
<signingInfos>
<signatureMethod algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<certPathSettings>
<trustAnchorRef ref="SampleServerTrustAnchor"/>
<certStoreRef ref="SampleCollectionCertStore"/>
</certPathSettings>
<canonicalizationMethod algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<digestMethod algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
</signingInfos>
<encryptionInfos name="EncInfo1">
<encryptionKey locatorRef="SampleReceiverEncryptionKeyLocator"/>
<encryptionMethod algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"/>
<keyEncryptionMethod algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
</encryptionInfos>
<keyLocators name="SampleReceiverEncryptionKeyLocator" classname=
"com.ibm.wsspi.wssecurity.config.KeyStoreKeyLocator">
<keyStore storepass="{xor}LCswLTovPiws" path="$${USER_INSTALL_ROOT}/
etc/ws-security/samples/enc-receiver.jceks" type="JCEKS"/>
<keys alias="Group1" keypass="{xor}NDomLz4sLA==" name="CN=Group1"/>
<keys alias="bob" keypass="{xor}NDomLz4sLA==" name="CN=Bob, O=IBM, C=US"/>
</keyLocators>
</securityRequestReceiverBindingConfig>
<securityResponseSenderBindingConfig>
<signingInfo>
<signatureMethod algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<signingKey name="serversignerkey" locatorRef="SampleServerSignerKey"/>
<canonicalizationMethod algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<digestMethod algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
</signingInfo>
<encryptionInfo name="EncInfo2">
<encryptionKey locatorRef="SignerKeyLocator"/>
<encryptionMethod algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"/>
<keyEncryptionMethod algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
</encryptionInfo>
<keyLocators name="SignerKeyLocator" classname=
"com.ibm.wsspi.wssecurity.config.CertInRequestKeyLocator"/>
</securityResponseSenderBindingConfig>
</pcBindings>
</wsdescBindings>
<routerModules transport="http" name="StockQuote.war"/>
</com.ibm.etools.webservice.wsbnd:WSBinding>