我正在使用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);
}
它再次让我想到,一个人只能使用一个安全绑定,如果有更多安全绑定,则根据上面的代码优先选择一个。
答案 0 :(得分:0)
我也同意规范没有说明我们是否可以使用多个绑定(但可能我们都错过了它)。但您仍然可以使用非对称绑定来实现HTTPS端点。
答案 1 :(得分:0)
最后我想我已经解决了我的问题。
最初我认为客户端需要在其策略中使用传输绑定断言才能通过SSL与Web服务进行通信。我还想过,没有这样的断言ramp:sslConfig
语句将被忽略。
事实是,您不需要传输绑定断言使其可能通过SSL进行通信,您需要它们使其成为 required 。如果客户端的策略中没有此类断言,但端点需要SSL连接,则客户端仍会尝试建立它,并在必要时查找策略javax.net.ssl.trustStore
和javax.net.ssl.trustStorePassword
变量中配置的变量1}}标签,或以其他方式(通过JVM参数,或以编程方式)。
所以在我的情况下,解决方案是保持非对称绑定断言不变,只配置trustStore,而不添加任何传输绑定断言。
我仍然不清楚为什么不允许你在一个政策中使用这两种断言。