代码之家  ›  专栏  ›  技术社区  ›  Dudi

客户端身份验证方案“匿名”禁止HTTP请求

  •  15
  • Dudi  · 技术社区  · 16 年前

    我正在尝试配置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_trace log.svclog和trace.log 显示服务器无法验证客户端证书 我的证书没有由授权的CA签名 但这就是为什么我把它们添加到受信任的人身上……

    我错过了什么? 我错过了什么?

    2 回复  |  直到 13 年前
        1
  •  7
  •   Dudi    14 年前

    诀窍是使客户端证书有效,

    为此,您有两个选择:

    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”

        2
  •  1
  •   Flea Chetan Bhalara    14 年前

    我收到此错误的原因是,在我的webconfig中,Web服务的URL为 http://localhost/myservicename.svc 在我们的dev服务器上我们有一个fqdn http://dev.myname.com/myservicename.svc.

    请仔细检查web.configs,确保指向Web服务的URL指向正确的位置。

    推荐文章