1

Web サービス フレームワークには、Apache axis2 の古いバージョンの 1 つを使用します。その一環として、ランパート 1.2 を使用しています。

認証に 'nonce' および 'timestamp' メカニズムでパスワード ダイジェストを使用しようとしています。検証を行うために城壁を取得しています。認証検証メカニズムが正常に機能しています (パスワード コールバックなどを含む)。

私が抱えている問題は、城壁が「リプレイ攻撃」を認識できるようにすることです。基本的に、これらの認識に関連する城壁モジュールの機能はアクティブではないようです。同じセキュリティ ヘッダーを axis2 サービスに何度でも送信でき (昨日生成したセキュリティ ヘッダーを送信しても)、問題なく認証され、Web サービス リクエストが完了します。

私の最善の推測は次のとおりです。リプレイ攻撃を検出する機能を有効にする、城壁モジュールの構成設定がどこかにありません。以下のリンク (services.xml ファイル内) に示されている構成の提案を両方試しましたが、どちらも機能していないようです:-

私が欠けているものとどこにあるかを助けたり、教えてくれる人はいますか(構成設定に関連していると思います)?

私のaxis2.xmlファイルに城壁のモジュール宣言があります:- <module ref="rampart"/>

そして、すべての操作が宣言された後、services.xml ファイルに城壁の構成設定であると思われるものがあります;-

<parameter name="InflowSecurity">
      <action>
        <items>UsernameToken Timestamp</items>
        <passwordCallbackClass>com.myCompany.service.dummy.MyAuthenticator</passwordCallbackClass>
      </action>
    </parameter>

    <rampart:rampartconfig xmlns:rampart="http://ws.apache.org/rampart/policy">  
          <rampart:timestampprecisioninmilliseconds>true  
          </rampart:timestampprecisioninmilliseconds>  
          <rampart:timestampttl>300</rampart:timestampttl>  
          <rampart:timestampmaxskew>300</rampart:timestampmaxskew>  
          <rampart:timestampstrict>false</rampart:timestampstrict>  
          <rampart:ReplayDetection>1000</rampart:ReplayDetection>
    </rampart:rampartconfig>  
4

1 に答える 1

1

ranpart-1.2 を使用している場合は、サービスにリプレイ検出を実装する必要があります。着信 TimeStamp 情報は、キー「org.apache.ws.security.handler.WSHandlerConstants.RECV_RESULTS」の下のメッセージ コンテキスト プロパティに含まれるセキュリティ ヘッダー処理結果で利用できます。これは Vector であり、この最初の項目は「org.apache.ws.security.handler.WSHandlerResult」インスタンス (次のコード スニペットの wsResult) です。

次に、以下に示すようにタイムスタンプ情報を取得できます。

actionResult = WSSecurityUtil.fetchActionResult(wsResult,
        WSConstants.TS);

if (actionResult != null) {
    Timestamp timestamp = actionResult.getTimestamp();
    //Your validation goes here...
}

参照したブログ投稿で示唆されているように、rampart-1.6.2 にアップグレードし、ポリシー ベースの構成を使用してみてください。

于 2013-01-31T13:27:06.187 に答える