【问题标题】:Configuring WCF security settings配置 WCF 安全设置
【发布时间】:2008-12-22 11:37:29
【问题描述】:

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

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


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

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

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

【问题讨论】:

    标签: wcf security msmq


    【解决方案1】:

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

    【讨论】:

    • 但是 MSMQ 是我唯一的选择,因为客户端和服务器并不总是同时在线。我的意思是有断开的呼叫,根据 MSDN,建议在这种情况下使用 MSMQ。那么证书是消息级安全性的唯一选择吗?那么传输级别的安全性呢?
    • 我认为传输级别的安全性通常不如消息级别的安全性,特别是在像您这样的情况下,当消息在传输过程中实际上是持久的,因为此时它是 volunerable。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-10-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-10-29
            • 1970-01-01
            相关资源
            最近更新 更多