代码之家  ›  专栏  ›  技术社区  ›  kemot

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

  •  0
  • kemot  · 技术社区  · 11 年前

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

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

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

    事实真的是这样吗?如果是这样的话,这是rampart中的一个bug,还是WS-Security Policy规范以某种方式禁止了它(我没有找到任何这样的信息)?

    通过查看rampart的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 回复  |  直到 11 年前
        1
  •  0
  •   SureshAtt    11 年前

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

        2
  •  0
  •   kemot    11 年前

    终于我想我解决了我的问题。

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

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

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

    尽管如此,我仍然不清楚为什么rampart不让你在一项政策中使用这两种断言。