我正在使用Ramart来确保来自Web服务客户端的通信的安全。
按照规范,我定义了一个非对称绑定声明来提供消息级的安全性,但是我也希望通过SSL与Web服务进行通信,因此我也定义了一个适当的传输绑定声明。
结果是我的客户端能够通过SSL连接到Web服务,但是在发送的消息中没有签名-好像非对称绑定声明被忽略了。
确实是这样吗?如果是这样-这是raftart中的错误,还是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)
再次让我想到,一个人只能使用一种安全绑定,如果有更多的安全绑定,则根据上述代码优先选择一个。
最后,我认为我已经解决了我的问题。
最初,我认为客户端需要在其策略中具有传输绑定断言,以便通过SSL与Web服务进行通信。我还认为,没有这样的断言ramp:sslConfig
语句将被忽略。
事实是,您不需要传输绑定声明就可以通过SSL进行通信,而需要它们来使它成为必不可少的。如果在您的客户端的政策没有这样的说法,但终点是需要SSL连接,客户端仍然会尝试建立它,如果有必要,寻找javax.net.ssl.trustStore
和javax.net.ssl.trustStorePassword
政策的配置变量ramp:sslConfig
标签,或者以其他方式(通过JVM参数,或以编程方式)。
因此,在我的情况下,解决方案是使非对称绑定断言保持不变,仅配置trustStore,而不添加任何传输绑定断言。
我仍然不清楚,为什么不让您在一项政策中使用两种断言。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句