Web サービス・セキュリティーのトラブルシューティングを行う場合は、
アセンブリー・ツールで構成を確認し、クライアントとサーバーの要求および応答の構成を
一致させます。
Web サービス・セキュリティーのトラブルシューティングは、
アセンブリー・ツ
ールで構成を確認し、クライアントとサーバーの要求および応答の構
成を調和させることにより最適に行えます。
これらの構成は必ず一致させる必要があります。
クライアント要求送信側の構成は、サーバー要求受信側の構成と一致している必要があります。暗号化を正常に行うには、
受信側の公開鍵が送信側に対してエクスポートされる必要があり、この鍵が暗号化情報内で正常に構成されている必要があります。認証の場合、
クライアントが使用するメソッドをサーバーのログイン・マッピングで指定する必要があります。以下は、
実行可能な汎用トラブルシューティングのステップのリストです。
このタスクのステップ
- クライアント・セキュリティーの拡張機能およびサーバー・セキュリティーの拡張機能が、
以下の送信側および受信側のダウンストリーム呼び出しのそれぞれについて一致していることを確認します。
- 「Add Created Time Stamp」オプションがクライアント・サイドで使用可能の場合に、
サーバーで「Add Received Time Stamp」オプションが構成されていることを確認します。アセンブリー・ツールで、
セキュリティーの拡張機能を構成する必要があります。
- クライアント・セキュリティー・バインディングおよびサーバー・セキュリティー・バインディングが
正しく構成されていることを確認します。クライアント認証メソッドがシグニチャーの場合、
サーバーにログイン・マッピングがあることを確認してください。
クライアントが公開鍵、cn=Bob,o=IBM,c=US を使用して本体を暗号化する場合、
このサブジェクトがサーバー鍵ストアにおける個人証明書であり、
これによって本体を秘密鍵で復号できることを確認してください。
アセンブリー・ツールまたは WebSphere Application Server 管理コンソールを使用して、セキュリティー・バインディングを構成できます。
- 問題に関する情報を提供するメッセージについては
、${USER_INSTALL_ROOT}/logs/server1 ディレクトリー
(server1 はサーバー名に応じて変化します) 内の SystemOut.log ファイルをチェックします。
- 以下のトレース仕様を使用して Web Services Security のトレースを使用可能にします。
com.ibm.xml.soapsec.*=all=enabled:com.ibm.ws.webservices.*=all=enabled:
com.ibm.wsspi.wssecurity.*=all=enabled:com.ibm.ws.security.*=all=enabled: SASRas=all=enabled
これらの 3 行は、実際には 1 行として入力してください。
Web サービスを保護する際のエラー
Web サービスを保護する際に、以下のエラーが発生することがあります。
「CWWSI5061E:
SOAP 本文に署名がありません」というエラー・メッセージが表示される
原因:
このエラーは一般に、
SOAP セキュリティー・ハンドラーが正しくロードされておらず、SOAP 本体に署名がない場合に発生します。
SOAP セキュリティー・ハンドラーは通常、サーバー側で発生する最初の検証であり、
多くの問題によりこのメッセージが表示されます。このエラーは無効な actor URI 構成により発生する場合があります。
解決策:
アセンブリー・ツール内の以下の場所で、actor Universal Resource Identifier (URI) を構成することができます。
-
クライアント構成のアセンブリー・ツール内の Web サービス・クライアント・エディターから、
- 「セキュリティー拡張」>「クライアント・サービス構成詳細」とクリックして、
「ActorURI」フィールドで actor 情報を示します。
- 「セキュリティー拡張」>「Request Sender Configuration section」>「Details」をクリックして、
「Actor」フィールドで actor 情報を示します。
- サーバー構成のアセンブリー・ツール内の Web Services Editor から、
- 「セキュリティー拡張」>「Server Service Configuration」セクションをクリックします。
actor URI にクライアント・サイドと同じ actor ストリングがあることを確認します。
- 「セキュリティー拡張」>「Response Sender Configuration Details」>「詳細」とクリックして、
「Actor」フィールドで actor 情報を示します。
クライアントおよびサーバー上の actor 情報は、
両方とも同一のストリングを参照する必要があります。
クライアントとサーバーの actor フィールドが一致すると、
要求または応答はダウンストリームに転送されるのではなく、処理されます。
他の Web サービスのゲートウェイとして動作する Web サービスがある場合は、「actor」フィールドが異なる場合があります。しかし、それ以外の場合、
クライアントおよびサーバーで actor 情報が一致することを検証してください。Web サービス・インプリメンテーションがゲートウェイとして動作し、
ゲートウェイを介して渡される要求同じ actor を構成していない場合、
この Web サービス・インプリメンテーションはクライアントからのメッセージを処理しません。代わりに、要求をダウンストリームに送信します。正しい actor ストリングを含むダウンストリーム・プロセスによって要求が処理されます。応答でも同じ状況が発生します。
したがって、該当するクライアントとサーバーの「actor」フィールドが同期化されていることを確認することが重要です。
また、本体をクライアント構成内で署名されるように指定しない場合には、
エラーが表示されることがあります。
アセンブリー・ツールの Web サービス・クライアント・エディターを使用
してメッセージ本文に署名するには、「セキュリティー拡張」>「Request Sender Configuration」>「保全性」をクリックして、
署名するメッセージ・パートを選択します。
「CWWSI5075E:
No security token found that satisfies any one of the authentication methods」というエラー・メッセージが表示される
解決策:
セキュリティー拡張機能でクライアントとサーバーのログイン構成情報が一致しているか確認してください。
また、クライアントに有効なログイン・バインディングがあること、
およびサーバーにセキュリティー・バインディングで有効なログイン・マッピングがあることを
確認してください。この情報は、
アセンブリー・ツールの以下の場所を調べることで確認できます。
-
クライアント構成のアセンブリー・ツール内の Web サービス・クライアント・エディターから、
- 「セキュリティー拡張」>「Request Sender Configuration」>
「Login Configuration」の順にクリックして、認証メソッドを確認します。
- 「Port Binding 」>「Security Request Sender Binding Configuration」>「Login Binding」の順にクリックして、
認証メソッドおよびその他のパラメーターを確認します。
- サーバー構成のアセンブリー・ツール内の Web Services Editor から、
- 「セキュリティー拡張」>「Request Receiver Service Configuration Details」>「Login Configuration」の順にクリックして、認証メソッドを確認します。
- 「Binding Configurations」>「Request Receiver Binding Configuration Details」>「Login Mapping」をクリックして、
認証メソッドおよびその他のパラメーターを確認します。
また、クライアントおよびサーバーで指定された actor URI が一致することを
確認してください。アセンブリー・ツール内の以下の場所で、actor URI を構成することができます。
-
クライアント構成のアセンブリー・ツール内の Web サービス・クライアント・エディターから、
- 「セキュリティー拡張」>「クライアント・サービス構成詳細」とクリックして、
「ActorURI」フィールドで actor 情報を示します。
- 「セキュリティー拡張」>「Request Sender
Configuration section」>「Details」をクリックして、
「Actor」フィールドで actor 情報を示します。
- サーバー構成のアセンブリー・ツール内の Web Services Editor から、
- 「セキュリティー拡張」>「Server Service Configuration」セクションをクリックします。
「アクター URI」フィールドにクライアント側と同じ actor ストリングがあることを確認します。
- 「セキュリティー拡張」>「Response Sender Configuration Details」>「詳細」とクリックして、
「Actor」フィールドで actor 情報を示します。
「CWWSI5094E: TrustMode が BasicAuth であるときに、
トラステッド・ユーザーの UsernameToken が見つからなかったか、またはユーザーのログインが失敗しました」という
エラー・メッセージが表示される
原因:
この状態は、ログイン構成で IDAssertion を認証メソッドとして構成した場合に発生します。
解決策:
送信側の Web サービスで、
ログイン・バインディング内にトラステッド基本認証エントリーを構成してください。次に、サーバー側で、
トラステッド ID エバリュエーターに基本認証エントリーのユーザー名を含むプロパティーのセットがあることを検証します。
ID アサーション用のクライアントを構成するには、以下のトピックを参照してください。
ID アサーション用にサーバーを構成するには、以下のトピックを参照してください。
「CWSCJ0053E: Authorization failed for /UNAUTHENTICATED...」というエラー・メッセージが表示される
原因:
セキュリティー名が UNAUTHENTICATED となった以下の許可エラーが発生します。CWSCJ0053E: Authorization failed
for /UNAUTHENTICATED while invoking (Home)com/ibm/wssvt/tc/pli/ejb/Beneficiary
findBeneficiaryBySsNo(java.lang.String):2 securityName: /UNAUTHENTICATED;accessID:
null is not granted any of the required roles: AgentRole
この状態は、
ログイン構成が構成されていないため、または Web サービス・セキュリティーがクライアントから
サーバーに構成されていないために発生します。
要求がサーバーに到達し、認証情報が受信されない場合、スレッドに UNAUTHENTICATED ユーザーが設定されています。
だれでもアクセスできる特殊な「Everyone」役割以外の役割がリソースに割り当てられている場合、
許可はこのエラーを戻します。
クライアントが正常に Enterprise JavaBeans (EJB) ファイルを認証しても、
EJB ファイルが Web サービス・セキュリティーまたはトランスポート・セキュリティー (HTTP ユーザー ID、
パスワードなど) で構成されていないダウンストリーム EJB ファイルを呼び出す場合、
このダウンストリーム要求に対してエラーが発生する可能性があります。
解決策:
アセンブリー・ツールを使用して、
クライアントとサーバーの両方に対するエンタープライズ・アーカイブ (EAR)
ファイルのセキュリティー機能拡張およびセキュリティー・バインディングが適切であることを検証します。詳しくは、以下のトピックを
参照してください。
トークン・コンシューマーまたはトークン・ジェネレーターに対して
値のタイプのローカル名と URI を指定すると、「WSWS3243I: 情報: 例外を WebServicesFault にマップしています」という
エラー・メッセージが表示される
原因:
値タイプの URI は、以下の事前定義された値タイプのローカル名に対しては必要ありません。
- ユーザー名トークン
- X509 証明書トークン
- PKIPath 内の X509 証明書
- PKCS#7 内の X509 証明書および CRL のリスト
解決策:
前述の値のタイプのローカル名の 1 つを指定した場合は、値のタイプ URI フィールドに値を入力しないでください。
WebSphere Application Server の
Web サービスにアクセスする Microsoft .NET クライアントを使用すると、「Invalid URI: The format of the URI could not be determined」という
エラー・メッセージが表示される
原因:
WebSphere Application Server の Web サービスにアクセスする Microsoft .NET クライアントを使用すると、
次のような例外メッセージが表示されることがあります。
Invalid URI: The format of the URI could not be determined.
例外タイプ:
System.UriFormatException
at System.Uri.Parse()
at System.Uri..ctor(String uriString, Boolean dontEscape)
at System.Uri..ctor(String uriString)
at Microsoft.Web.Services2.SoapInputFilter.CanProcessHeader(XmlElement header, SoapContext context)
at Microsoft.Web.Services2.Security.SecurityInputFilter.ProcessMessage(SoapEnvelope envelope)
at Microsoft.Web.Services2.Pipeline.ProcessInputMessage(SoapEnvelope envelope)
at Microsoft.Web.Services2.InputStream.GetRawContent()
at Microsoft.Web.Services2.InputStream.get_Length()
at System.Xml.XmlScanner..ctor(TextReader reader, XmlNameTable ntable)
at System.Xml.XmlTextReader..ctor(String url, TextReader input, XmlNameTable nt)
at System.Xml.XmlTextReader..ctor(TextReader input)
at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message,
WebResponse response, Stream responseStream, Boolean asyncCall)
WebSphere Application Server 内では Web サービス・セキュリティーが有効で、ActorURI 属性が使用されます。
このエラーが発生するのは、Microsoft .NET Web Services Enhancements (WSE) Version 2.0 Service Pack 3 が、
ActorURI 属性の相対 URI 値をサポートしていないためです。
WSE Version 2.0 Service Pack 3 は、この属性に対しては絶対 URI のみをサポートしています。
解決策:
Microsoft .NET クライアントを使用するためには、
この属性を絶対 URI として構成する必要があります。
絶対 URI とは、例えば abc://myWebService のようなものです。
相対 URI とは、例えば myWebService のようなものです。
WebSphere Application Server で使用する ActorURI 属性を
構成するには、Rational Application Developer (RAD) または
Application Server Toolkit (AST) を使用して、以下のステップを実行します。
- Web サービス・エディターを開き、「Extensions」タブをクリックして
「Server Service Configuration」を展開します。
- 「Actor」フィールドに、完全な絶対 URI を入力します。
- 「Response Generator Service Configuration Details」>「詳細」と展開します。
- 「Actor」フィールドに、完全な絶対 URI を入力します。
「WSEC6664E: PKIXBuilderParameters にヌルは指定できません。
TrustAnchor および CertStoreList の構成は正しくありません」という例外が表示される
原因:
証明書のパス設定が正しく構成されていません。
解決策:
次のステップを実行して、証明書のパス設定を構成します。
- 管理コンソールで、「セキュリティー」>「Web サービス」とクリックします。
- 見出し「デフォルト・コンシューマー・バインディング」の下で、
「署名情報」> 「configuration_name」とクリックします。
- 「すべてを信頼」オプションまたは「専用署名情報」オプションのいずれかを選択します。
「専用署名情報」オプションを選択した場合は、
ドロップダウン・リストにある構成から、トラスト・アンカーと証明書ストアを選択してください。
- 「OK」および「保管」をクリックして、マスター構成に保管します。
Microsoft .NET エラー「WSE567: The incoming Username token
must contain both a nonce and a creation time for the replay detection feature」が表示される
原因:
このシナリオでは、
WebSphere Application Server の Web サービス・クライアントと Microsoft .NET Web サービスを利用しています。
Microsoft .NET Web サービスには、構成されるユーザー名トークンに ws-security 制約があります。
Microsoft .NET サーバーから次の例外がスローされます。
WSE567: 着信ユーザー名トークンには、nonce と、
リプレイ検出機能の作成時刻の両方が含まれている必要があります。
デフォルトでは、Microsoft .NET Web サービスはユーザー名トークンの nonce (ランダム・ストリング) とタイム・スタンプを検証します。
しかし、WebSphere Application Server を使用する Web サービス・クライアントに対して nonce およびタイム・スタンプ・プロパティーを
構成するかどうかは任意です。
解決策:
以下のステップを実行して、WebSphere Application Server の Web サービス・クライアント上で、
ユーザー名トークンの nonce およびタイム・スタンプ・プロパティーを追加します。
これらのステップでは、
Rational Application Developer、Application Server Toolkit などの
アセンブリー・ツールも使用します。
- Web サービス・クライアントのデプロイメント記述子を開き、「WS-Binding」タブをクリックします。
- 「Security Request Generator Binding Configuration」>「Token Generator」セクションと展開します。
- 既に作成済みのユーザー名トークンの名前をクリックして、「編集」をクリックします。
- 「トークン・ジェネレーター」ウィンドウの「プロパティー」セクションで、「追加」をクリックします。
- 「名前」フィールドに com.ibm.wsspi.wssecurity.token.username.addNonce と入力して、nonce プロパティーの名前を指定します。
- 「値」フィールドに「true」を入力します。
- 「追加」をクリックします。
- 「名前」フィールドに com.ibm.wsspi.wssecurity.token.username.addTimestamp と入力して、タイム・スタンプ・プロパティーの名前を指定します。
- 「値」フィールドに true と入力します。
- 「OK」をクリックして、クライアントのデプロイメント記述子を保管します。
トークン・ジェネレーターの構成について詳しくは、アセンブリー・ツールによるトークン・ジェネレーターの構成
を参照してください。