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

Posted

技术标签:

【中文标题】客户端身份验证方案“匿名”禁止 HTTP 请求。 3【英文标题】:The HTTP request was forbidden with client authentication scheme 'Anonymous'. 3 【发布时间】:2014-07-22 12:55:26 【问题描述】:

我正在使用 wcf 通过 https 实现相互握手,我收到一个错误: “客户端身份验证方案‘匿名’禁止 HTTP 请求。”

服务代码:

        var binding = new BasicHttpBinding()
        
            Security =
            
                Mode = BasicHttpSecurityMode.Transport,
                Transport =  ClientCredentialType = HttpClientCredentialType.Certificate ,
            ,
        ;

        var sh = new ServiceHost(typeof(EchoService), new Uri("https://localhost:9876"));
        //sh.Description.Behaviors.Add(new ServiceMetadataBehavior());
        //sh.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName, MetadataExchangeBindings.CreateMexHttpsBinding(), "mex");
        sh.AddServiceEndpoint(typeof(IEchoService), binding, "");
        sh.Credentials.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindByThumbprint, "AAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
        sh.Open();

客户端代码:

        var binding = new BasicHttpBinding()
        
            Security =
            
                Mode = BasicHttpSecurityMode.Transport,
                Transport =  ClientCredentialType = HttpClientCredentialType.Certificate ,
            ,
        ;

        var sslClientFactory = new ChannelFactory<IEchoService>(binding, "https://localhost:9876");
        sslClientFactory.Credentials.ClientCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindByThumbprint, "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
        var sslClient = sslClientFactory.CreateChannel();
        var response = sslClient.Echo("Https Echo");

我已使用 httpcfg 将此证书分配给端口。

如果我将绑定从 BasicHttpBinding 更改为 NetTcpBinding,它可以正常工作。

如果我运行我的服务的两个实例(在一个进程中),一个使用 NetTcpBinding,第二个使用 BasicHttpBinding,并从 net tcp 客户端和 https 客户端使用它,两者都可以正常工作(客户端使用相同的证书)。

如果我只运行我的 https 客户端,我会收到“客户端身份验证方案‘匿名’禁止 HTTP 请求。”的情况?

【问题讨论】:

【参考方案1】:

我注意到我有很多双倍的证书(两个相同的证书对 - 具有相同的指纹)(我不知道我是如何将它们放在那里的),我认为这是一个问题。也许当存储中的证书加倍时,服务器仅将那些未加倍证书的颁发者发送给客户端?

【讨论】:

以上是关于客户端身份验证方案“匿名”禁止 HTTP 请求。 3的主要内容,如果未能解决你的问题,请参考以下文章

重现问题:客户端身份验证方案“匿名”禁止 http 请求

收到 403 禁止错误。客户端身份验证方案“匿名”禁止 HTTP 请求

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

如何修复“客户端身份验证方案‘匿名’禁止 HTTP 请求”

客户端身份验证方案“匿名”禁止 HTTP 请求。远程服务器返回错误:(403) Forbidden

添加 WCF 服务引用时,HTTP 请求被客户端身份验证方案“匿名”错误禁止