java - 如何对传出的 SOAP 消息应用 XML 签名

标签 java xml soap cxf xml-signature

我已经使用 cxf codegen 生成了 stub 和绑定(bind)。一切运行良好,但由于安全问题,服务器仍然拒绝该消息。基本上我有 3 层来处理所有这些都需要证书(我有)。

  1. 管道上的 SSL 加密
  2. 特定数据元素的证书签名
  3. 在有效载荷数据上证明 XML 签名。

为了稍微调味汤,我无法完全控制实际的签名和证书。基本上我必须提取正确的数据,将其发送出去进行签名,然后我必须在交易中重新注入(inject)已签名的数据。

我有权访问的证书位于本地计算机的 Windows 证书存储区(SSL 和一些签名)

阅读框架的文档似乎在很大程度上依赖于配置巫术魔法。不幸的是,我发现的大多数链接都花了很多时间详细解释如何生成证书,但对我们如何实际使用它们却相当吝啬。

如何使用 CXF 实现这一点?

我如何访问正确的 Hook 以及我可以使用什么代码在消息上注入(inject)签名?

谢谢

最佳答案

事实证明,CXF 具有从一开始就生成正确签名的所有能力。我们的问题是签名的接收端不接受这个标准签名。我们必须创建一个自定义签名系统,以确保服务器实现不当所需的所有挑剔和深奥的花招都到位。无论事务的命名空间声明如何,命名空间前缀都必须设置为非常具体的值。有时必须修剪空白,有时不修剪等等……

因此,我们创建了一个拦截器并将其注入(inject)到 out 拦截器列表中,仅此而已。实际上,这有点复杂,因为他们坚持使用位于最终用户 USB key 上的证书对 soap 交易进行签名。我们的系统集中了所有接口(interface),因此我们不得不进一步调整以使其正常工作,但最终一切都很好。

虽然使用标准的目标是提供做事的标准方法,但是...有些人似乎认为他们比创建标准的专家更好,并坚持将自己的泡菜添加到 jar 。有人应该告诉他们,在覆盆子果酱中加入泡菜并不会使其味道更好。

关于java - 如何对传出的 SOAP 消息应用 XML 签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3504296/

相关文章:

java - PHP解码Base64,刷新并保留数据

java - Neo4J 中的 Gremlin 遍历

xml - VS 2015 RTM web.config 全局元素 'configuration' 已经声明

php - 为亚马逊 API 添加购物车功能

java - 为 BigInteger 赋值

java 8 中的 Java 内存区域

javascript - JSON中的 '@'是什么意思?

xml - 我可以在 Delphi 中将 msxml.IXMLDOMNode 转换为 XmlIntf.IXMLNode 吗?

java - 两个不同的 SOAP 端点中是否可以存在同名的操作?

PHP SOAP 传输文件