1

我已经在互联网(和 SO)上搜索了解决方案。截至今天,RHS 中出现的所有问题都没有解决我的问题,所以就这样吧。

TLDR:我正在尝试构建一个需要客户端证书的 WCF 服务,但我遇到了这个错误:

此服务的安全设置需要 Windows 身份验证,但托管此服务的 IIS 应用程序未启用它。

我在让服务识别我为测试生成的自签名证书时遇到了几个问题。它现在似乎正在工作,因为没有证书的客户端向我显示 403(禁止)的 IIS 错误,而不是这个异常。

我的服务 web.config 的相关片段:

<wsHttpBinding>
    <binding name="clientCertificateBinding">
        <security mode="Message">
            <message clientCredentialType="Certificate" />
        </security>
    </binding>
</wsHttpBinding>

我定义了两个端点:一个用于“mex”(尝试删除它,并不能解决我的问题),一个用于实际服务。服务绑定binding="wsHttpBinding" bindingConfiguration="clientCertificateBinding"用作规范。

后来,我告诉我的行为使用服务证书:

<behavior name="AwesomeBehaviour">
    <serviceMetadata httpsGetEnabled="true"/>
    <serviceCredentials>
        <serviceCertificate
        storeLocation="LocalMachine"
        storeName="My"
        findValue = 'CN=...' />
    </serviceCredentials>
    <serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>

此外,IIS 设置为Rquire SSL 并需要客户端证书。不仅接受它们,而且要求它们。

我已经尝试(正如一些人建议的那样)将安全模式从 更改TransportMessageand TransportWithMessageCredential; 这没有任何作用。

还有这个线程讨论 NTLM 和协商作为传输凭证类型。这不能解决我的问题。

还有这篇 KB 文章讨论了cscript.exe. 我安装了兼容性工具并添加了 NTLM 身份验证提供程序,但无济于事。

我不确定我错过了什么。

4

1 回答 1

1

啊。解决方案有两个:

  • 将配置添加到我的安全标签中<transport clientCredentialType="Certificate" />
  • 移除mex绑定

然后一切正常!\o/

于 2012-07-05T16:59:28.833 回答