我已经使用 cxf codegen 生成了 stub 和绑定(bind)。一切运行良好,但由于安全问题,服务器仍然拒绝该消息。基本上我有 3 层来处理所有这些都需要证书(我有)。
- 管道上的 SSL 加密
- 特定数据元素的证书签名
- 在有效载荷数据上证明 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/