HTTP-запрос был запрещен со схемой аутентификации клиента "Anonymous"
Это швы, чтобы быть общей проблемой, и я посмотрел на все ответы здесь, но никто не помог.
Я пытаюсь заставить SSL работать с basichttpbinding и службой WCF, размещенной в iis. Я думаю, что проблема в IIS или с сертификатами. Я создал самозаверяющий сертификат в диспетчере iis. Мой сертификат называется "mycomputer" и также был помещен под доверенную корневую сертификацию. У клиента нет проблем с поиском сертификатов.
мой настройки в iis включают анонимную аутентификацию и отключают все остальное. Также требуется SSL и принять сертификат клиента. Это верно? Я получаю ошибку, если решаю игнорировать.
Я не вижу ничего плохого в моих конфигурациях, это правильно?
настройки:
<system.serviceModel>
<services>
<service behaviorConfiguration="MyBehaviour" name="BasicHttpSecTest.Service1">
<endpoint name="MyEndPoint" address="https://mycomputer/wp/" binding="basicHttpBinding" bindingConfiguration="ClientCertificateTransportSecurity" contract="BasicHttpSecTest.IService1" />
<!--<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />-->
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MyBehaviour">
<serviceMetadata httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceCredentials>
<clientCertificate>
<authentication certificateValidationMode="PeerOrChainTrust" revocationMode="NoCheck"/>
</clientCertificate>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding name="ClientCertificateTransportSecurity">
<security mode="Transport">
<transport clientCredentialType="Certificate" />
</security>
</binding>
</basicHttpBinding>
</bindings>
</system.serviceModel>
Клиентский Конфиг:
<system.serviceModel>
<client>
<endpoint address="https://mycomputer/wp/Service1.svc" binding="basicHttpBinding"
bindingConfiguration="MyEndPoint" contract="ServiceSSLref.IService1"
name="MyEndPoint1" behaviorConfiguration="ClientCertificateCredential"/>
</client>
<bindings>
<basicHttpBinding>
<binding name="MyEndPoint">
<security mode="Transport">
<transport clientCredentialType="Certificate" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="ClientCertificateCredential">
<clientCredentials>
<clientCertificate findValue="mycomputer" storeLocation="LocalMachine" storeName="My" x509FindType="FindByIssuerName" />
<serviceCertificate>
<authentication certificateValidationMode="PeerOrChainTrust" revocationMode="NoCheck"/>
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
1 ответов
Я полагаю, что ваша проблема может быть в ваш клиентский сертификат. Установка clientCredentialType= "сертификат" вы сообщаете WCF, что клиент должен указать сертификат, которому доверяет сервер. Как я понял, у вас есть только серверного сертификата. Попробуйте установить
<transport clientCredentialType="None" />
Это позволит вам отправлять сообщения, не требуя сертификата, которому доверяет сервер. Или вы можете попытаться создать сертификат на стороне клиента и поместить его в доверенную папку на вашем сервере. Возможно это состояние поможет вам http://msdn.microsoft.com/en-us/library/ms731074.aspx