2

我有一个托管在 Windows 应用程序中的 WCF 服务。该服务使用 netMsmqBinding。客户端和主机位于不同的域中。我的问题是如何配置安全设置?

传输的数据很敏感,所以我想保护客户端和服务主机之间的通信。唯一的问题是我不知道该怎么做......(我不想使用证书)任何帮助将不胜感激!


James Schek:当我在没有安全性的情况下运行它时(无论 MSMQ 在哪里),它都能完美运行。在我的情况下,MSMQ 托管在服务器上,如果它关闭 - 那么客户端的消息将留在其传出队列中,当 MSMQ 重新启​​动并运行时,所有消息都会被发送 - 这是 MSMQ 的强大功能,也是预期的行为(这就是为什么通过 MSMQ 发送的所有消息都必须是 OneWay 的原因,因为我们不知道服务器或客户端何时在线 - 我们只希望消息传递)。

我们组织中的一位管理员问我是否有其他方式(而不是证书) - 这就是我问的原因(他想知道在这种情况下所有可能的保护方式)。

我处于工作组模式而不是域模式!所以我无法使用域...而且根本没有 AD。

4

5 回答 5

1

MSMQ 通常不适合在 Internet 上使用(如果您打算这样做)。否则,如果您想要消息级安全性,我认为您无法避免使用证书。

于 2008-12-22T11:57:41.337 回答
1

您可能想查看 MSDN 中的这篇文章以了解您有哪些选择。您还可以实现自定义绑定,其中根据您的选择实现消息的传输和加密。顺便说一句,这里是链接。

于 2008-12-22T17:15:27.453 回答
0

我怀疑 WCF 在这种情况下是否会像您期望的那样工作。MSMQ 托管在哪里?在“服务器”上还是在“客户端”上?还是有独立的MSMQ主机?当断开连接时,我相信唯一可以工作的系统是托管 MSMQ 的系统。其他系统将无法初始化 WCF。

如果您的系统在不同的域上,但在同一个 AD 林中,那么您可以使用域身份验证传输安全性。如果它们完全在森林中,那么您必须自己加密有效负载或依赖消息级安全性——即证书。

如果标头不敏感(即您正在调用的函数的名称、调用它的人等),那么您可以手动加密有效负载。即将您的数据序列化为二进制或xml,加密序列化的对象,然后使用生成的字节数组作为参数调用您的WCF 方法。

您还没有解释为什么要避免使用证书。显然,您还没有告诉我们另一个限制条件。为什么不使用证书?

于 2008-12-22T17:39:50.447 回答
0

如果您需要消息级别的安全性,您可以通过在绑定上指定适当的属性来轻松使用传输安全性,证书是您的最佳选择。

于 2008-12-22T22:01:26.487 回答
0

我建议获取 O'Reilly 的 Juval Lowy 的“Programming WCF Services”的副本。他有一整章专门介绍将 WCF 与 MSMQ 结合使用。

于 2008-12-22T22:32:36.860 回答