Клиентский компьютер имеет сертификат «TicketSalesClient» в «Моем» хранилище текущего пользователя и сертификат «TicketSalesServer» в хранилище «TrustedPeople» текущего пользователя. Серверный компьютер имеет сертификат «TicketSalesClient» в хранилище «TrustedPeople» локального компьютера и сертификат «TicketSalesServer» в хранилище «My» локального компьютера.
Служба работает под управлением IIS 7. Ниже приведен файл web.config:
<system.serviceModel>
<services>
<service behaviorConfiguration="secureBehavior" name="InternetRailwayTicketSales.TicketSalesImplementations.TicketSalesService">
<endpoint address="TicketSalesService"
binding="basicHttpBinding"
bindingConfiguration="secureHttpBinding" contract="InternetRailwayTicketSales.TicketSalesInterface.ITicketSales" />
<endpoint address="TicketSalesServiceSecureMex"
binding="basicHttpBinding"
bindingConfiguration="secureHttpBinding"
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="https://localhost:443/TicketSales/" />
</baseAddresses>
</host>
</service>
</services>
<bindings>
<basicHttpBinding>
<binding name="secureHttpBinding">
<security mode="Transport">
<transport clientCredentialType="Certificate"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="secureBehavior">
<serviceThrottling maxConcurrentInstances="5000" maxConcurrentSessions="5000" />
<serviceMetadata httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="True" />
<serviceCredentials>
<serviceCertificate findValue="TicketSalesServer"
storeLocation="LocalMachine"
storeName="My"
x509FindType="FindBySubjectName"/>
<clientCertificate>
<authentication certificateValidationMode="PeerTrust"/>
</clientCertificate>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
Служба в IIS настроена на использование SSL и сертификатов.
1) Теперь, когда я пытаюсь добавить сервисную ссылку в клиент, я получаю: «HTTP-запрос был запрещен с помощью схемы аутентификации клиента« Anonymous ». Удаленный сервер возвратил ошибку: (403) Forbidden».
2) Если я пытаюсь запросить конечную точку метаданных с помощью браузера, я сначала применяю сертификат SSL, а затем получаю сообщение об ошибке «Учетные данные не дают права на просмотр этого каталога или страницы». Насколько я понимаю, это потому, что я не могу предоставить учетные данные клиента через браузер.
3) Я пытался использовать svcutil с файлом конфигурации, который содержит учетные данные клиента:
<configuration>
<system.serviceModel>
<client>
<endpoint
behaviorConfiguration="ClientCertificateBehavior"
binding="basicHttpBinding"
bindingConfiguration="Binding1"
contract="IMetadataExchange"
name="https" />
</client>
<bindings>
<basicHttpBinding>
<binding name="Binding1">
<security mode="Transport">
<transport clientCredentialType="Certificate" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="ClientCertificateBehavior">
<clientCredentials>
<clientCertificate findValue="TicketSalesClient"
storeLocation="CurrentUser"
storeName="My"
x509FindType="FindBySubjectName" />
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
А потом:
svcutil https://veryLongAddress.svc? Wsdl /config:svcutilConf.config
А ответ таков: «Основное соединение было закрыто: не удалось установить доверительные отношения для безопасного канала SSL / TLS. Удаленный сертификат недействителен в соответствии с процедурой проверки»
Так что я делаю не так?