客户端身份验证方案“匿名”禁止 HTTP 请求
Posted
技术标签:
【中文标题】客户端身份验证方案“匿名”禁止 HTTP 请求【英文标题】:The HTTP request was forbidden with client authentication scheme 'Anonymous' 【发布时间】:2011-03-01 10:54:02 【问题描述】:我正在尝试配置 WCF 服务器\客户端以使用 SSL
我得到以下异常:
HTTP 请求被客户端身份验证方案禁止 '匿名'
我有一个自托管的 WCF 服务器。 我已经运行 hhtpcfg 我的客户端和服务器证书都存储在本地计算机上的个人和受信任的人下
这是服务器代码:
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
binding.Security.Mode = WebHttpSecurityMode.Transport;
_host.Credentials.ClientCertificate.Authentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.PeerOrChainTrust;
_host.Credentials.ClientCertificate.Authentication.RevocationMode = X509RevocationMode.NoCheck;
_host.Credentials.ClientCertificate.Authentication.TrustedStoreLocation = StoreLocation.LocalMachine;
_host.Credentials.ServiceCertificate.SetCertificate("cn=ServerSide", StoreLocation.LocalMachine, StoreName.My);
客户代码:
binding.Security.Mode = WebHttpSecurityMode.Transport;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
WebChannelFactory<ITestClientForServer> cf =
new WebChannelFactory<ITestClientForServer>(binding, url2Bind);
cf.Credentials.ClientCertificate.SetCertificate("cn=ClientSide", StoreLocation.LocalMachine, StoreName.My);
ServicePointManager.ServerCertificateValidationCallback
+= RemoteCertificateValidate;
查看 web_tracelog.svclog 和 trace.log 显示服务器无法验证客户端证书 我的证书未由授权 CA 签署 但这就是我将它们添加到受信任的人的原因....
我错过了什么? 我错过了什么?
【问题讨论】:
【参考方案1】:诀窍是使客户端证书有效,
要做到这一点,您有两个选择:
1) 使其自签名,然后将其置于“受信任的根证书颁发机构”之下。
显然,在生产环境中,您希望您的客户端证书由受信任的 CA 签名,而不是自签名。 见http://msdn.microsoft.com/en-us/library/ms733813.aspx
2) 用您创建的另一个证书(我们称之为 MyCA)签署您的客户端证书,并将 MyCA 放在“受信任的根证书颁发机构”中,并将客户端证书放在“受信任的人”中。这样您的开发环境就更接近于部署了。
如何创建和签署证书: 看下http://msdn.microsoft.com/en-us/library/bfsktky3.aspx
这是我使用的一系列命令:
1)makecert -r -pe -ss My -sr LocalMachine -a sha1 -sky exchange -n cn=MyCA -sv "MyCAPrivate.pvk"
2) makecert -pe -ss My -sr LocalMachine -a sha1 -sky exchange -n cn=SignedClientCertificate -iv "MyCAPrivate.pvk" -ic "MyCAPublic.cer"
【讨论】:
第二个命令失败并出现错误:无法加载颁发者证书('MyCAPublic.cer')【参考方案2】:我收到此错误的原因是因为在我的 webconfig 中,Web 服务的 URL 为 http://localhost/myservicename.svc
,而在我们的开发服务器上,我们有一个 FQDN http://dev.myname.com/myservicename.svc.
仔细检查您的 web.configs 以确保 Web 服务的 URL 指向正确的位置。
【讨论】:
以上是关于客户端身份验证方案“匿名”禁止 HTTP 请求的主要内容,如果未能解决你的问题,请参考以下文章
收到 403 禁止错误。客户端身份验证方案“匿名”禁止 HTTP 请求