3

我有一个要添加传输安全性的自托管服务。我已将 WSHttpBinding.SecurityMode 设置为 Transport 并将 ClientCredentialType 设置为 HttpClientCredentialType.None。我已经创建了一个证书并使用 ServiceHost.Credentials.ServiceCertificate.SetCertificate() 将其设置到我的主机我还使用 netsh http add sslcert ipport=127.0.0.1:80 certhash=[MyCertHash] certstorename=MY appid= 注册了它[TheGuidOfTheAppTahtRunsTheService] verifyclientcertrevocation=disable

每当我尝试调用该服务时,都会收到以下错误消息:“身份验证失败,因为远程方已关闭传输流。”

这是否意味着客户端和服务器尝试相互验证?我怎样才能禁用它?为了清楚起见,我不想在客户端安装证书,我不是在寻找任何身份验证 atm,只是保护消息内容,如果可能的话。

4

3 回答 3

2

这个 MSDN帖子可能有助于解决您的问题。帖子中的初始请求是配置与您的安全模式不同的安全模式,但它们会切换到传输模式以进行故障排除,并且该信息应适用于您的情况。

如果您所描述的是您为安装证书所做的一切,那么您缺少几个步骤。该帖子概述了安装有效证书的过程。祝你好运!!

于 2008-10-13T14:18:51.947 回答
2

证书有时会让人头疼。您应该始终使用 WCF 做的第一件事是打开跟踪:

http://msdn.microsoft.com/en-us/library/ms733025.aspx

然后,您可以使用 SVCTraceViewer 查看您的服务在后台生成的异常,并了解正在发生的事情,这是许多 WCF 问题所必须的。10 次中有 9 次,跟踪会告诉你你需要知道的一切。

另外,请确保客户端和服务器都配置了证书,因为证书需要安装在两台机器上。

于 2008-10-13T14:58:30.400 回答
2

我试图追查同样的错误,并遇到了这篇文章。WCF 跟踪没有帮助,因为错误出现在 HTTP 堆栈中的客户端,而在服务器端,请求在到达 WCF 层之前被拒绝。

我发现我不够彻底。确保满足以下所有条件。我有一些但不是所有这些都正确设置:

  1. 服务器的证书颁发者在同一台机器上有一个有效且匹配的颁发可信根 CA。

  2. 服务器证书主题名称与机器名称完全匹配,客户端访问的机器名称也匹配(“localhost”与服务器的Environment.MachineName值)

  3. 服务器证书的指纹已由管理员使用以下命令设置( netsh对较新版本的 Windows 使用等效)

    httpcfg set ssl -i 0.0.0.0:{port} -h {thumbprint}
    
  4. 此客户端在客户端计算机上也具有相同的有效颁发根 CA 证书。

这是一个很好的参考:SSL with Self-hosted WCF Service

于 2011-02-15T18:07:19.403 回答