1

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

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

我担心要让壁垒识别“重放攻击”的问题,基本上与识别这些相关的壁垒模块的功能似乎是不活动的。我可以多次向我的axis2服务发送相同的安全标头(甚至发送我昨天生成的安全标头),它可以很好地进行身份验证并完成网络服务请求。

我最好的猜测是:我在某个地方缺少用于启用检测重放攻击的功能的壁垒模块的配置设置。我已经尝试了下面链接中给出的配置建议(在 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

如果您使用的是rampart-1.2,则必须在您的服务中实现重放检测。传入的时间戳信息在键“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...
}

正如您引用的博客文章所建议的那样,您可以尝试升级到 armart-1.6.2 并使用基于策略的配置。

于 2013-01-31T13:27:06.187 回答