客户端身份验证方案'Anonymous'禁止HTTP请求.3.

本文关键字:HTTP 请求 禁止 Anonymous 身份验证 客户端 方案 | 更新日期: 2023-09-27 18:06:09

我正在使用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");

我已经使用httpfg将证书分配给端口。

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

如果我运行我的服务的两个实例(在一个进程中),一个使用netttcpbinding,另一个使用BasicHttpBinding,并从net tcp客户端和https客户端消费它,两者都工作良好(客户端使用相同的证书)。

什么情况下,如果我只运行我的https客户端我得到" HTTP请求被禁止与客户端身份验证方案'匿名' "?

客户端身份验证方案'Anonymous'禁止HTTP请求.3.

我注意到我有很多双重证书(对两个相同的证书-具有相同的thumbpint)在商店(我不知道我是如何把它们放在那里那样),我认为这是一个问题。也许当存储的证书加倍时,服务器只向客户端发送那些来自未加倍证书的发行者?