WCF基于内容的路由

时间:2014-02-21 09:35:52

标签: c# wcf encryption wcf-security

说,我有4台服务器,一台公开可见(A),其他(B,C和D)仅对一台(A)可见。 B,C和D是相同的服务,每个服务都在自己的公司。

我可以将呼叫从客户端路由到服务器A到服务器B,C或D,具体取决于呼叫中使用的客户端证书吗?

此外,是否可以指定到服务器A的消息中的目的地是什么? (需要部分加密的消息)(例如:我需要向公司C提供员工记录,但A不应该能够读取记录。)

我的意思是,如果我在A上重新实现B,C和D的服务,并且让A成为B,C和D的新客户端,这当然是可能的。 但是我希望将来自客户端的消息保密到B,C或D,让A只知道将它传递给他们需要知道什么。 因此,如果我重新实现该服务,我将无法使用WCF可以提供的透明消息加密,因为它只会解密它。

编辑:

目标是将数据从客户端获取到B,C或D,而B,C或D只接受来自A的TCP数据包。并且,A不允许读取用于B,C或D的数据

1 个答案:

答案 0 :(得分:0)

简短回答是的,WCF技术可以做那些事情。

更长的回答:是的,您可以将“A”设置为SSL WCF端点。例如,入站请求可以具有指向其在“B”,“C”或“D”上的最终目的地的客户端证书或内部值。

所以工作流程是这样的:

  • 客户端应用初始化WCF客户端并联系服务器“A”

  • “A”与客户端应用协商SSL

  • “A”WCF Web服务主机接收入站SSL请求。

  • “A”解密消息

  • “A”检查目的地内容 - 结果最终目的地为“D”

  • “A”初始化WCF客户端连接

  • “A”将WCF客户端URL设置为“D”WCF主机端点URL

  • “D”从“A”接收初始请求,初始化SSL通信

  • 服务器“A”WCF客户端将新加密的请求转发给“D”,“D”解密,处理然后发回“A”中继回原始客户端的确认。

当然有很多选择,但除了加密细节之外,工作流程大致相同。

如果服务器“A”在传递之前不应该读取消息的内容,我不确定你去哪里。 SSL基本上都是全有或全无。

除了SSL之外,另一种常用的加密方法是消息级(SOAP)加密,但只有在发送原始消息的客户端在设备上驻留用于消息加密的证书的公钥和私钥时才有效。因此,可以想象,您可以让客户端向服务器“A”发送SSL包装的请求,该服务器具有使用“A”无法读取的消息加密进行加密的内部内容。在请求的标题中可能有足够的未加密信息,“A”知道将消息路由到服务器“D”。

但是,如果我们谈论服务器到服务器的流量,我只会这样做。如果您正在谈论使用iPhone的客户,我所建议的将不起作用。