0

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

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

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

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

查看壁垒的 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

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

4

2 回答 2

0

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

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

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

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

我仍然不清楚为什么壁垒不让你在一个策略中使用这两种断言。

于 2013-09-03T09:09:20.400 回答
0

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

于 2013-09-02T03:10:11.400 回答