2011-02-01 40 views
0

我的情景:验证主叫/服务器在WCF

  • 许多WCF客户端这是在环境中我控制范围之外的
  • 服务器要么是我的还是我的控制之外的环境

因此,最糟糕的情况是客户端和服务器超出了我的控制范围。更具体地说,我可能会认为托管此代码的人可能会尝试恶意地模拟服务器或客户端(服务器更可能)。但是,客户端需要验证服务器是我的代码,服务器需要验证客户端是我的代码。我已经看到所有使用证书的建议;然而,这是一个选择给我的场景?

我考虑的一种方法是编写IClientMessageInspector和IDispatchMessageInspector来设置和验证双方的自定义SOAP头。我将根据源代码中包含的密钥创建一个HMAC签名(假设我有一种方法可以将其隐藏),然后根据消息正文验证摘要。

我觉得这样会工作;不过,我觉得我可能会有更多现成的东西,我在这里失踪了。我关门了吗?感谢您的任何指导!

+0

要清楚的是,我的服务器将托管在可能不受信任的各方的基础设施上,这意味着如果我使用SSL或其他证书,不受信任方也可以访问此证书。虽然我可能在这里错过了一些东西...... – toddkitta 2011-02-01 16:17:39

回答

0

我不认为有什么开箱即可做到这一点,只是因为它是一个不寻常的要求服务器来验证客户端调用服务的代码是授权代码。

一般来说,它是足以建立信任如下:

  1. 服务器有一个证书和服务使用SSL - 这样的客户有信心,他们都连接到正确的服务器计算机。
  2. 客户端向服务器提供认证详细信息(例如用户名/密码,证书等),以便服务器知道连接客户端可以被信任。

您正在尝试执行额外的步骤来验证用户/机器不仅经过验证,而且验证了运行的代码已经过验证 - 这只是过度的。如果代码运行的是验证,或者:

  1. 一个机器受到了损害,在这种情况下你有更大的问题担心。
  2. 您的一位用户已经针对您的服务编写了代码并正在“非法使用”它。如果您的服务只允许授权用户执行“危险”操作,这应该不成问题。
+0

我更关心的是客户端知道它正在与服务器交谈。如果没有开箱,客户/派遣检查员是否合理解决方案? – toddkitta 2011-02-01 05:17:43

+0

这就是*正好* SSL证书的用途:)你提出的建议**可以工作,但SSL是开箱即用的解决方案,我看不到任何理由来实施替代方案。 – 2011-02-01 05:20:06

1

证书绝对是您的情况。

您的服务器很容易被客户端认证,因为它将提供每个客户端已知的证书,SSL在这里是一个不错的选择。

服务器还可以通过请求每个客户端提供一个证书来验证客户端(服务器可以检查特定的证书颁发者 - 在这种情况下您自己的颁发者)。

现在您只需要正确管理/保护您的证书服务器,以确保它不会受到威胁。