在垒中是否不可能同时具有传输级安全性和消息级安全性?为什么?

时间:2013-08-23 08:41:33

标签: java web-services ssl ws-security rampart

我正在使用rampart来保护来自Web服务客户端的通信。

遵循规范我定义了一个非对称绑定断言来提供消息级安全性,但我也希望通过SSL与webservice进行通信,因此我还定义了一个适当的传输绑定断言。

效果是我的客户端能够通过SSL连接到Web服务,但是在发送的消息中,没有签名 - 似乎忽略了非对称绑定断言。

实际情况如此吗?如果是这样 - 这是一个在垒中的错误,还是被WS安全策略规范以某种方式禁止(我还没有找到任何此类信息)?

查看wallart的MessageBuilder类源我发现了这个:

if(rpd.isTransportBinding()) {
   log.debug("Building transport binding");
   TransportBindingBuilder building = new TransportBindingBuilder();
   building.build(rmd);
} else if(rpd.isSymmetricBinding()) {
   log.debug("Building SymmetricBinding");
   SymmetricBindingBuilder builder = new SymmetricBindingBuilder();
   builder.build(rmd);
} else {
   AsymmetricBindingBuilder builder = new AsymmetricBindingBuilder();
   builder.build(rmd);
}

(整个代码:http://grepcode.com/file/repo1.maven.org/maven2/org.apache.rampart/rampart-core/1.6.2/org/apache/rampart/MessageBuilder.java

它再次让我想到,一个人只能使用一个安全绑定,如果有更多安全绑定,则根据上面的代码优先选择一个。

2 个答案:

答案 0 :(得分:0)

我也同意规范没有说明我们是否可以使用多个绑定(但可能我们都错过了它)。但您仍然可以使用非对称绑定来实现HTTPS端点。

答案 1 :(得分:0)

最后我想我已经解决了我的问题。

最初我认为客户端需要在其策略中使用传输绑定断言才能通过SSL与Web服务进行通信。我还想过,没有这样的断言ramp:sslConfig语句将被忽略。

事实是,您不需要传输绑定断言使其可能通过SSL进行通信,您需要它们使其成为 required 。如果客户端的策略中没有此类断言,但端点需要SSL连接,则客户端仍会尝试建立它,并在必要时查找策略javax.net.ssl.trustStorejavax.net.ssl.trustStorePassword变量中配置的变量1}}标签,或以其他方式(通过JVM参数,或以编程方式)。

所以在我的情况下,解决方案是保持非对称绑定断言不变,只配置trustStore,而不添加任何传输绑定断言。

我仍然不清楚为什么不允许你在一个政策中使用这两种断言。