WCF – 实现需要加密一个soap:body元素的客户端,怎么做?

我一直在寻找这一点,到目前为止它看起来并不乐观,试图编写一个消耗第三方服务的客户端应用程序(下面的示例请求,来自Java客户端)。 一个问题是它期望身体中的一个元素被加密。

理想情况下,这将是一个WCF解决方案,虽然我已经阅读了一些关于使用WSE1 / 2/3接近这一点的地方(因为WSE停滞不是真的很想),有没有人必须解决这类问题?

     2010-11-23T16:17:36Z                                    

痛点是soap:Body中的authPwd元素,感谢任何见解

我有个坏消息。 开箱即用的安全实现无法做到这一点 ,我不知道如何扩展WCF以支持它,除非您从头开始编写所有WS-Security的东西。 除了要扩展已经实现的协议的场景外,WCF是非常可扩展的 – 这些类大多是密封/内部的,不能重用。

如果这些元素是SOAP头而不是body元素,那么整个问题就完全不同了。

编辑:

我再次检查了你提供的整个SOAP消息我发现了另外两个问题。

  • 我怀疑您的服务提供的安全级别。 它不显示纯文本密码,但它可以是全部。 隐藏密码不仅是您需要的安全性,因为如果安全性未正确实施,攻击者可以简单地接收您的整个消息(按原样加密)并再次从他的计算机发送。 如果服务配置不正确,它将以任何其他方式处理该请求。 这称为重放攻击,对此攻击的主要防御是时间戳,但由于您的消息未签名,攻击者可以根据需要更改时间戳值。 EncryptedKey元素中可以有其他防御机制,但很难从消息本身说出来。
  • 即使服务加密整个身体,WCF也很可能无法处理该消息。 开箱即用的安全性需要签名 – 必须签署时间戳(由于上述原因),并且消息部分可以是签名或加密签名,但不仅是加密的。 签署加密部分将确保攻击者不会将发布的数据替换为另一个。