Аутентификация Wcf - сертификата
This is on a workgroup system, the Client is run as IIS APPPOOL\DefaultAppPool and Service is run as System
Получаю эту ошибку:
Error :System.ServiceModel.CommunicationException: The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '00:29:59.9687496'. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
Конфигурационный файл клиента
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.serviceModel> <client> <endpoint kind="discoveryEndpoint" address="net.tcp://localhost:8005/Probe" binding="netTcpBinding" bindingConfiguration="RequestReplyNetTcpBinding"> </endpoint> <endpoint binding="netTcpBinding" bindingConfiguration="RequestReplyNetTcpBinding" contract="Test2ServLib.IService1" behaviorConfiguration="LargeEndpointBehavior"> <!--The behaviorConfiguration is required to enable WCF deserialization of large data sets --> </endpoint> </client> <behaviors> <endpointBehaviors> <behavior name="disableEndpointDiscovery"> <endpointDiscovery enabled="false" /> <!--The behavior is required to enable WCF deserialization of large data sets --> <dataContractSerializer maxItemsInObjectGraph="2147483647" /> <clientCredentials> <clientCertificate findValue="WCFClient" storeLocation="LocalMachine" storeName="TrustedPeople" x509FindType="FindBySubjectName" /> <serviceCertificate > <authentication certificateValidationMode="PeerTrust" revocationMode="NoCheck"/> </serviceCertificate> </clientCredentials> </behavior> <behavior name="LargeEndpointBehavior"> <!--The behavior is required to enable WCF deserialization of large data sets --> <dataContractSerializer maxItemsInObjectGraph="2147483647" /> <clientCredentials> <clientCertificate findValue="WCFClient" storeLocation="LocalMachine" storeName="TrustedPeople" x509FindType="FindBySubjectName" /> <serviceCertificate > <authentication certificateValidationMode="PeerTrust" revocationMode="NoCheck"/> </serviceCertificate> </clientCredentials> </behavior> </endpointBehaviors> </behaviors> <bindings> <netTcpBinding> <binding name="RequestReplyNetTcpBinding" receiveTimeout="05:00:00" openTimeout="00:00:59" closeTimeout="00:00:59" maxBufferPoolSize="524288" maxBufferSize="25000000" maxConnections="50" maxReceivedMessageSize="25000000" sendTimeout="00:05:00" listenBacklog="1500"> <reliableSession ordered="false" inactivityTimeout="00:01:00" enabled="true" /> <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> <security mode="Message"> <message clientCredentialType="Certificate"/> </security> </binding> </netTcpBinding> </bindings> </system.serviceModel> </configuration>
Обслуживание Конфигурации
<configuration> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior name="announcementBehavior2"> <!--The following behavior attribute is required to enable WCF serialization of large data sets --> <dataContractSerializer maxItemsInObjectGraph="2147483647"/> <serviceDiscovery> <announcementEndpoints> <endpoint kind="announcementEndpoint" address="net.tcp://localhost:8005/Announcement" binding="netTcpBinding" bindingConfiguration="nonSecure"/> </announcementEndpoints> </serviceDiscovery> <serviceThrottling maxConcurrentCalls="1500" maxConcurrentSessions="1500" maxConcurrentInstances="1500"/> </behavior> <behavior name="announcementBehavior"> <!--The following behavior attribute is required to enable WCF serialization of large data sets --> <dataContractSerializer maxItemsInObjectGraph="2147483647"/> <serviceDiscovery> <announcementEndpoints> <endpoint kind="announcementEndpoint" address="net.tcp://localhost:8005/Announcement" binding="netTcpBinding" bindingConfiguration="RequestReplyNetTcpBinding"/> </announcementEndpoints> </serviceDiscovery> <serviceThrottling maxConcurrentCalls="1500" maxConcurrentSessions="1500" maxConcurrentInstances="1500"/> <serviceCredentials> <serviceCertificate findValue="WCFServer" storeLocation="LocalMachine" storeName="TrustedPeople" x509FindType="FindBySubjectName" /> <clientCertificate> <authentication certificateValidationMode="PeerTrust" trustedStoreLocation="LocalMachine" revocationMode="NoCheck"/> </clientCertificate> </serviceCredentials> </behavior> </serviceBehaviors> <endpointBehaviors> <behavior name="disableEndpointDiscovery"> <endpointDiscovery enabled="false"/> <!--The behavior is required to enable WCF deserialization of large data sets --> <dataContractSerializer maxItemsInObjectGraph="2147483647"/> </behavior> <behavior name="LargeEndpointBehavior"> <!--The behavior is required to enable WCF deserialization of large data sets --> <dataContractSerializer maxItemsInObjectGraph="2147483647"/> </behavior> <behavior name="NonSecureDisableEndpointDiscovery"> <endpointDiscovery enabled="false" /> <!--The behavior is required to enable WCF deserialization of large data sets --> <dataContractSerializer maxItemsInObjectGraph="2147483647" /> </behavior> <behavior name="NonSercureLargeEndpointBehavior"> <!--The behavior is required to enable WCF deserialization of large data sets --> <dataContractSerializer maxItemsInObjectGraph="2147483647" /> </behavior> </endpointBehaviors> </behaviors> <services> <service name="Test2ServLib.IService1" behaviorConfiguration="announcementBehavior"> <host> <baseAddresses> <add baseAddress="net.tcp://localhost:8006/Service1"/> </baseAddresses> </host> <endpoint binding="netTcpBinding" bindingConfiguration="RequestReplyNetTcpBinding" contract="Test2ServLib.IService1" behaviorConfiguration="LargeEndpointBehavior" /> </service> </services> <bindings> <netTcpBinding> <binding name = "RequestReplyNetTcpBinding"> <security mode="Message"> <message clientCredentialType="Certificate" /> </security> </binding> </netTcpBinding> </bindings> </system.serviceModel> </configuration>
Что я уже пробовал:
Удостоверился, что сертификат находится в локальном машинном хранилище, используя отпечаток большого пальца и имя субъекта