.NET SOAP通信,带有用于签名和加密的单独证书

时间:2018-05-25 19:30:43

标签: c# wcf soap

我尝试配置客户端与用Java编写的SOAP服务进行通信,但到目前为止我失败了。虽然使用SoapUI连接该服务非常容易(我只需要将这两个证书放在适当的位置并且它只是有效),但它在C#中远非简单(直观)。 / p>

服务使用两种不同的证书 - 一种用于签名消息(二进制令牌),另一种用于TLS加密。我使用本教程实现了自己的类:

https://docs.microsoft.com/pl-pl/dotnet/framework/wcf/extending/how-to-use-separate-x-509-certificates-for-signing-and-encryption

感谢我能够连接和发送请​​求,但这不是问题的结束。下一个错误是"传入的消息使用与用于加密正文的令牌不同的令牌进行签名。这不是预期的。"

根据我的研究,我应该擦除整个Security标头并配置我的客户端以允许不安全的响应。因此,我应该使用它实现我自己的MessageEncoder:

https://docs.microsoft.com/pl-pl/dotnet/framework/wcf/samples/custom-message-encoder-custom-text-encoder

我只添加了一个应该删除安全标头的额外功能,就像@nuronce在这个帖子中所做的那样:

https://social.msdn.microsoft.com/Forums/vstudio/en-US/16de05ed-3776-40e5-b576-139603e4b374/the-incoming-message-was-signed-with-a-token-which-was-different-from-what-used-to-encrypt-the-body?forum=wcf

但这仍然不是问题的结束......现在它说:"传出消息的消息版本(Soap11(http://schemas.xmlsoap.org/soap/envelope/)AddressingNone({{3} }))与编码器(Soap12(http://schemas.microsoft.com/ws/2005/05/addressing/none)Addressing10(http://www.w3.org/2003/05/soap-envelope))不匹配。确保使用与消息相同的版本配置绑定。"

这很奇怪,因为在我的自定义编码器类中具有MessageVersion属性的每个地方,它都设置为MessageVersion.Soap11作为默认值,不应修改,因为我不会改变任何内容我的CustomTextMessageEncodingBindingSection。

对于每个解决方案,WCF都会给我带来另一个问题,我对此失去了耐心,因为这些解决方案并不容易找到并适应我的需求。我也很确定,即使我经历了当前的问题 - 我会找到另一个,也许更难,甚至无法解决。

是否有其他.NET库允许我默认使用两个不同的证书并保存我的代码,使其不断增长,难以理解?如果没有,我该如何处理WCF?

0 个答案:

没有答案