IIS 托管具有 SSL 安全性的 WCF -“HTTP 请求被客户端身份验证方案‘匿名’禁止”错误
Posted
技术标签:
【中文标题】IIS 托管具有 SSL 安全性的 WCF -“HTTP 请求被客户端身份验证方案‘匿名’禁止”错误【英文标题】:IIS hosted WCF with SSL security -"The HTTP request was forbidden with client authentication scheme 'Anonymous'" error 【发布时间】:2014-10-11 10:22:04 【问题描述】:我正在尝试使用传输安全性在 IIS 上托管 wcf。我找到了一个很好的教程并按照说明进行操作:http://robbincremers.me/2011/12/27/wcf-transport-security-and-client-certificate-authentication-with-self-signed-certificates/。我总是收到“客户端身份验证方案‘匿名’禁止 HTTP 请求”。我该如何处理?
到目前为止我所做的是:
我按照here 的说明创建了自签名根授权证书。
makecert -n "CN=TempCA" -r -sv TempCA.pvk TempCA.cer
创建了一个由根授权证书签名的新服务器证书
makecert -sk SignedByCA -iv TempCA.pvk -n "CN=localhost" -ic TempCA.cer localhost.cer -sr localmachine -ss My
创建了一个由根授权证书签名的新客户端证书
makecert -sk SignedByCA -iv TempCA.pvk -n "CN=clientCert" -ic TempCA.cer clientCert.cer -sr localmachine -ss My
将 CA 添加到受信任的根证书
将这些证书添加到个人 --> 证书
向受信任的人添加了客户端证书
一切正常
创建了非常简单的 WCF 应用程序。添加它 IIS
调整安全设置
这是我的服务 web.config 文件
> <?xml version="1.0"?> <configuration> <system.web> > <compilation debug="true" targetFramework="4.5" /> > <httpRuntime targetFramework="4.5"/> </system.web> <system.serviceModel> > <bindings> > <basicHttpBinding> > <binding name="EmployeeBindingConfig"> > <security mode="Transport"> > <transport clientCredentialType="Certificate" /> > </security> > </binding> > </basicHttpBinding> > </bindings> > <behaviors> > <serviceBehaviors> > <behavior name="EmployeeServiceBehavior"> > <serviceMetadata httpsGetEnabled="true"/> > <serviceDebug includeExceptionDetailInFaults="true"/> > <serviceCredentials> > <clientCertificate> > <authentication certificateValidationMode="PeerOrChainTrust" > trustedStoreLocation="LocalMachine" /> > </clientCertificate> > </serviceCredentials> > </behavior> > </serviceBehaviors> > </behaviors> > <services> > <service > behaviorConfiguration="EmployeeServiceBehavior" > name="WCF.Tutorial.TransportSecurity.ServiceNew.EmployeeService"> > <host> > <baseAddresses> > <add baseAddress="https://localhost/WCF.Tutorial.TransportSecurity.ServiceNew"/> > </baseAddresses> > </host> > <endpoint address="EmployeeService" > binding="basicHttpBinding" > bindingConfiguration="EmployeeBindingConfig" > contract="WCF.Tutorial.TransportSecurity.ServiceNew.IEmployeeService" > /> > <endpoint > address="mex" > binding="mexHttpsBinding" > contract="IMetadataExchange" /> > </service> > </services> </system.serviceModel> <system.webServer> > <modules runAllManagedModulesForAllRequests="true"/> </system.webServer> </configuration>
-
这是我的客户端 app.config
> <?xml version="1.0" encoding="utf-8" ?> > <configuration> > <startup> > <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> > </startup> > <system.serviceModel> > <behaviors> > <endpointBehaviors> > <behavior name="EmployeeEndpointBehaviour"> > <clientCredentials> > <clientCertificate storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName" findValue="omer-HP"/> > </clientCredentials> > </behavior> > </endpointBehaviors> > </behaviors> > <bindings> > <basicHttpBinding> > <binding name="EmployeeBindingConfig"> > <security mode="Transport"> > <transport clientCredentialType="Certificate" /> > </security> > </binding> > </basicHttpBinding> > </bindings> > <client> > <endpoint address="https://localhost/WCF.Tutorial.TransportSecurity.ServiceNew/EmployeeService.svc" > binding="basicHttpBinding" bindingConfiguration="EmployeeBindingConfig" > contract="WCF.Tutorial.TransportSecurity.ServiceNew.IEmployeeService" > name="serviceEndpoint" > behaviorConfiguration="EmployeeEndpointBehaviour"/> > </client> > </system.serviceModel> > </configuration>
-
这是我的客户端代码和错误
我的问题是如何传递这个错误?我需要你的帮助。
【问题讨论】:
我无法将配置文件添加为代码 sn-p。该网站没有显示这些线条,所以我不得不将它们添加为图像。 屏幕截图意味着我们无法阅读图片中的文字(或者我无法阅读它们),我们无法搜索重要的文字(如x509FindType=FindBySubjectName
)。跨度>
@jww,终于可以添加代码了,请审核。
【参考方案1】:
至少问题已经找到了。当我查看 Windows 事件日志时,我看到了那个错误
当请求客户端身份验证时,此服务器发送一个列表 客户信任的证书颁发机构。客户端使用这个 列表以选择服务器信任的客户端证书。 目前,该服务器信任如此多的证书颁发机构,以至于 列表太长了。因此,此列表已被截断。这 这台机器的管理员应该检查证书 信任客户端身份验证的权威机构并删除那些 真的不需要被信任。
我备份了一些证书并删除了它们。在这个操作之后,我的程序就可以工作了。
【讨论】:
【参考方案2】:更改 IIS 网站中显示的匿名身份
【讨论】:
以上是关于IIS 托管具有 SSL 安全性的 WCF -“HTTP 请求被客户端身份验证方案‘匿名’禁止”错误的主要内容,如果未能解决你的问题,请参考以下文章
WCF 托管在 IIS 中,连接到具有集成安全性的数据库时出现问题
SSL WCF“无法为具有权限‘localhost’的 SSL/TLS 安全通道建立信任关系