Apache axis2和Rampart没有阻止'重播攻击'

时间:2013-01-31 05:58:12

标签: axis2 ws-security rampart

我们使用旧版本的apache axis2作为我们的Web服务框架。我们正在使用rampart 1.2作为其中的一部分。

我尝试使用带有'nonce'和'timestamp'机制的密码摘要进行身份验证。我们正在尝试进行验证。 我的身份验证验证机制运行正常(包括密码回调等)

我担心的问题是让壁垒识别'重放攻击',基本上与识别这些相关联的垒垒模块的功能似乎是不活动的。 我可以多次向我的axis2服务发送相同的安全头(甚至发送我昨天生成的安全头),并且它可以正常验证并完成Web服务请求。

我最好的猜测是:我在某个地方缺少一个配置设置,用于启用功能来检测重放攻击。 我已经尝试了下面链接(在services.xml文件中)中给出的配置建议,但似乎都不起作用: -

任何人都可以帮助或让我知道我错过了什么以及在哪里(我想象它的配置设置相关)?

我在axis2.xml文件中获得了rampart的模块声明: - <module ref="rampart"/>

在声明所有操作后,我认为我的services.xml文件中的rampart配置设置; -

<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>  

1 个答案:

答案 0 :(得分:1)

如果您使用的是rampart-1.2,则必须在服务中实施重播检测。 传入的TimeStamp信息在“org.apache.ws.security.handler.WSHandlerConstants.RECV_RESULTS”键下的消息上下文属性中包含的Security头处理结果中可用。这是一个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并使用基于策略的配置。