Web services 通过web服务发送二进制数据并使用WS-Security

Web services 通过web服务发送二进制数据并使用WS-Security,web-services,binary,digital-signature,ws-security,Web Services,Binary,Digital Signature,Ws Security,我们必须使用web服务堆栈传输二进制数据,在此过程中,我们必须对web服务请求/响应进行签名 主要问题是:人们更喜欢用什么方式来做这件事 我们应该使用MTOM和WS-Security吗? 从中我得出结论,当使用MTOM和WS-Security时会出现问题。CXF和axis2使用WSS4J,当您使用MTOM时,WSS4J似乎不能很好地处理数字签名消息 其他web服务堆栈呢?只需将数据作为字节[]发送即可。如果存在大量数据,则WCF支持MTOM 在无情况下,您应使用WSE。WSE基于ASMX web

我们必须使用web服务堆栈传输二进制数据,在此过程中,我们必须对web服务请求/响应进行签名

主要问题是:人们更喜欢用什么方式来做这件事

我们应该使用MTOM和WS-Security吗? 从中我得出结论,当使用MTOM和WS-Security时会出现问题。CXF和axis2使用WSS4J,当您使用MTOM时,WSS4J似乎不能很好地处理数字签名消息


其他web服务堆栈呢?

只需将数据作为
字节[]
发送即可。如果存在大量数据,则WCF支持MTOM


情况下,您应使用WSE。WSE基于ASMX web服务之上。微软表示,ASMX技术是“遗留的”,他们不会修复其中的漏洞。更糟糕的是,WSE已经相当过时,并且已经被WCF所取代。

我建议使用Spring WS而不是ApacheCXF API,它更轻,文档更完善,更易于使用。然而,SpringWS不兼容JAX-WS(在我看来,这不是坏事,但您可能会有不同的想法)


SpringWS只是一个围绕底层SOAP实现的轻量级、Spring友好的包装器,应该可以在Sun JAX-WS或Apache CXF之上工作,尽管我建议使用Sun的实现。它还具有完整的MTOM和WS-Security支持(通过Apache WSS4J)。

CXF可以与MTOM一起完成与WS-Security相关的工作,但附件最终不会签名或加密。SOAP消息本身是经过签名/加密的,但附件不是由于WSS4J中的限制。(如果SpringWS使用WSS4J,它将具有相同的限制)

出于安全原因,当将WSS4JOutInterceptor与CXF一起使用时,我们会关闭MTOM以确保它们内联,然后签名/加密。这是一个安全的选择。WSS4JOutInterceptor确实有一个标志(out.setAllowTom(true)),它允许MTOM作为附件保留,但请记住,这些附件不会被“保护”。

来自:


WSS4J 2.0.0通过带附件的SOAP(SWA)概要文件1.1规范引入了对SOAP消息附件签名和加密的支持。WSS4J 1.6.x中不支持对邮件附件进行签名或加密。附件可以在WSS4J中通过基于“操作”的方法或WS-SecurityPolicy进行签名和加密,如下所述

是的,我知道WCF和WSE。我在征求关于web服务设计的建议:应该选择什么标准,它们是否真的有效。从一个角度来看:我在一家IBM Java商店工作,因此考虑MS.NET是为了互操作性,而不是为了实现。问题更多地与二进制数据的序列化和数字签名有关:MTOM是序列化二进制数据的首选方法。WS-Security指定如何对SOAP消息进行签名。但还有更多的问题:MTOM与数字签名一起工作吗?它真的标准化了吗?有例子吗?谢谢你的澄清。您应该编辑您的问题以包含此信息。此外,您可能没有注意到,但之前有一个答案建议您使用WSE。这就是为什么我提到你永远不应该。另外,BTW,我不会考虑WSE的互操作性测试。谢谢答案!它可能会帮助来自.NET世界的人。你说得对:我没有注意到前面的答案。没问题。回答者删除了前面的答案。您是在实现WS客户端还是服务器(或两者兼有)?我们只在服务器端实现。客户可以自由选择自己的服务堆栈。您好!您知道spring WS是否可以发送数字签名消息并将签名消息正文的一部分作为附件发送吗?如果WSS4J可以这样做,那么是的,因为spring WS就是这么使用的。Daniel,这个功能是否可以从某个CXF版本获得,或者版本无关紧要?非常感谢。