2011-01-05 1 views
2

私はこの問題を永遠に見てきたようです。Axis2とRampartを使用してSOAPメッセージを投稿しようとすると、「wsse:リクエストのセキュリティヘッダーがありません」

背景: セキュリティで保護された第三者のWebサービスを呼び出す必要があります。本文とヘッダーブロックの両方をクライアント証明書で署名する必要があります。 Rampartを無効にしてtcpmonを使用して送信エンベロープをキャプチャすると、メッセージを送信するようにSOAPUIを設定できます(前述の重要な部分に署名するために証明書を使用するSOAPUIを構成します)。それはメッセージが問題ではないことを私に伝えます。

もし私がランプパートを有効にして発信メッセージをキャプチャすると、それは正しいように見えます(2つの要素が署名され、セキュリティ要素がすべて配置されています)。

私はランパートでサービスを呼び出すしようとすると、私は次のスタックを取得する:

<?xml version="1.0" encoding="UTF-8"?> 
<wsp:Policy wsu:Id="SigEncr" 
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" 
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"> 
<wsp:ExactlyOne> 
    <wsp:All> 
     <sp:AsymmetricBinding 
      xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"> 
      <wsp:Policy> 
       <sp:InitiatorToken> 
        <wsp:Policy> 
         <sp:X509Token 
          sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient"> 
          <wsp:Policy> 
           <sp:RequireThumbprintReference /> 
           <sp:WssX509V1Token10 /> 
          </wsp:Policy> 
         </sp:X509Token> 
        </wsp:Policy> 
       </sp:InitiatorToken> 
       <sp:RecipientToken> 
        <wsp:Policy> 
         <sp:X509Token 
          sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Never"> 
          <wsp:Policy> 
           <sp:RequireThumbprintReference /> 
           <sp:WssX509V3Token10 /> 
          </wsp:Policy> 
         </sp:X509Token> 
        </wsp:Policy> 
       </sp:RecipientToken> 
       <sp:AlgorithmSuite> 
        <wsp:Policy> 
         <sp:TripleDesRsa15 /> 
        </wsp:Policy> 
       </sp:AlgorithmSuite> 
       <sp:Layout> 
        <wsp:Policy> 
         <sp:Strict /> 
        </wsp:Policy> 
       </sp:Layout> 
       <sp:OnlySignEntireHeadersAndBody /> 
      </wsp:Policy> 
     </sp:AsymmetricBinding> 
     <sp:Wss10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"> 
      <wsp:Policy> 
       <sp:MustSupportRefKeyIdentifier /> 
       <sp:MustSupportRefIssuerSerial /> 
      </wsp:Policy> 
     </sp:Wss10> 
     <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"> 
      <sp:Body /> 
      <sp:Header Name="CAISOWSHeader" Namespace="http://www.caiso.com/soa/2006-09-30/CAISOWSHeader.xsd" /> 
     </sp:SignedParts> 
    </wsp:All> 
</wsp:ExactlyOne> 
</wsp:Policy> 

をだから私はしたいもの:

org.apache.axis2.AxisFault: Missing wsse:Security header in request 
    at org.apache.rampart.handler.RampartReceiver.setFaultCodeAndThrowAxisFault(RampartReceiver.java:166) 
    at org.apache.rampart.handler.RampartReceiver.invoke(RampartReceiver.java:99) 
    at org.apache.axis2.engine.Phase.invoke(Phase.java:318) 
    at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:254) 
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:160) 
    at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:364) 
    at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:417) 
    at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229) 
    at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165) 
    at org.apache.axis2.axis2userguide.RetrieveCurrentBidResults_v20090801ServiceStub.retrieveCurrentBidResults_v20090801(RetrieveCurrentBidResults_v20090801ServiceStub.java:225) 
    at org.transalta.weezer.soap.client.RetrieveCleanBidsClient.main(RetrieveCleanBidsClient.java:64) 

、ここでは、私が使用しているpolicy.xmlファイルであります知っているのは何ですか?私はそこに存在するとは思わないコンポーネントを知っています。

答えて

0

私は、「セキュリティ」フェーズと流入のためのすべてのフェーズをスキップするように脇のモジュールを修正することでこれを解決しました。

private static void modifyRampartModule(ServiceClient serviceClient) { 
    AxisConfiguration axisConfig = serviceClient.getAxisConfiguration(); 

    List<Phase> phases = axisConfig.getInFlowPhases(); 
    List<Phase> newPhases = new ArrayList<Phase>(); 
    for (Phase phase : phases) { 
     if (!phase.getName().equalsIgnoreCase("security")) 
      newPhases.add(phase); 

     if (phase.getName().equalsIgnoreCase("security")) 
      break;   
    } 
    axisConfig.setInPhasesUptoAndIncludingPostDispatch(newPhases); 
} 
+0

こんにちはタンブー。私は同じ問題を抱えている。上記のコードはどこでどのように変更しましたか?手順を詳しく説明できますか? – Abdul

0

キャプチャされたリクエスト/レスポンスメッセージの1つでも投稿した方が良いでしょう。ポリシーで定義されている期待される要素が歌われていると言っているので、リクエストメッセージにTimeStamp要素があるかどうか確認してください。タイムスタンプがあれば、それも署名されなければならない(MUST)。その場合、これが失敗の理由かもしれない。

関連する問題