没有身份验证的WCF传输安全性

时间:2008-10-09 23:50:04

标签: wcf security authentication

是否可以在没有身份验证的情况下拥有传输安全性?我很清楚它的缺陷但是我无法在客户端安装证书。 我似乎可以将WSHttpBinding.SecurityMode设置为Transport,将ClientCredentialType设置为HttpClientCredentialType.None,但是当我尝试调用该服务时,我得到了这个异常:

https://[MyService]发出HTTP请求时发生错误。这可能是由于在HTTPS情况下未使用HTTP.SYS正确配置服务器证书。这也可能是由于客户端和服务器之间的安全绑定不匹配造成的。

我认为这与客户端和服务器之间的安全绑定不匹配,因为我使用的是svcutil生成的代理。

如果我将ClientCredentialType设置为None,为什么要查找服务器证书?

3 个答案:

答案 0 :(得分:6)

您可以在没有身份验证的情况下进行HTTPS通信,但由于HTTPS加密使用证书,因此您无法在没有证书的情况下进行HTTPS通信。

有几件事需要检查:

  1. 您可以在浏览器中通过HTTPS访问网站上的WSDL或其他资源吗?
  2. 这样做时,您是否收到有关证书的警告?
  3. 如果您无法通过HTTPS访问网站上的WSDL或其他资源,则服务器上未配置HTTPS。

    如果您收到有关证书的警告,则表示您没有客户端信任的证书。这里有三个选项;一个是从可信任的Verisign这样的地方获得有效的证书,另一个是在用户商店的可信部分安装证书(你不能像你提到的那样),最后一个是在客户端的WCF配置中关闭证书撤销。

答案 1 :(得分:1)

您设置的内容看起来正确无误。

我认为问题与确保传输级别安全性(HTTPS)所需的证书与身份验证所需的任何证书之间的差异有关。

要执行传输级别安全性,您需要为IIS服务器配置证书以用于其加密。这绝不是用于识别WCF通信中的各方,只是为了保护通信。 (用于此HTTPS传输的证书也用于标识服务器,但与WCF标识无关)

以下是blog post的链接,说明如何在IIS中为此目的设置证书。不一定是最好的谷歌必须提供,只是我发现的第一个涵盖所有重点。 MSDN也应该详细介绍这一点。

答案 2 :(得分:0)

即使将安全模式设置为transport并且客户端凭据类型设置为none,我也会遇到您描述的错误。

这是因为我的Web服务URL已由Visual Studio 2010服务引用创建者创建为具有特定端口80的 http://www.myservice.com:80/myservice.asmx 。当我将其更改为<时em> http://www.myservice.com/myservice.asmx 绑定工作正常。