Я пытаюсь разместить wcf на IIS, используя транспортную безопасность. Я нашел хорошее руководство и следую инструкциям: http://robbincremers.me/2011/12/27/wcf-transport-security-and-client-certificate-authentication-with-self-signed-certificates/. Я всегда получаю сообщение «HTTP-запрос был запрещен с использованием схемы аутентификации клиента« Анонимный »». Как я могу с этим справиться?

Что я сделал до сих пор:

  1. Я создал самоподписанный сертификат корневого центра сертификации, как описано здесь < / а>.

    makecert -n "CN = TempCA" -r -sv TempCA.pvk TempCA.cer

  2. Создан новый сертификат сервера, подписанный сертификатом корневого центра

    makecert -sk SignedByCA -iv TempCA.pvk -n "CN = localhost" -ic TempCA.cer localhost.cer -sr localmachine -ss My

  3. Создан новый сертификат клиента, подписанный сертификатом корневого центра

    makecert -sk SignedByCA -iv TempCA.pvk -n "CN = clientCert" -ic TempCA.cer clientCert.cer -sr localmachine -ss My

  4. Добавлен ЦС в доверенный корневой сертификат

    введите описание изображения здесь

  5. Эти сертификаты добавлены в Personal -> Certificates введите описание изображения здесь

  6. Добавлен сертификат клиента для доверенных лиц введите описание изображения здесь

  7. Все в порядке введите описание изображения здесь

  8. Создал очень простое приложение WCF. Добавил IIS введите описание изображения здесь

  9. Настройте параметры безопасности введите описание изображения здесь

  10. Это мой служебный файл web.config

> <?xml version="1.0"?> <configuration>   <system.web>
>     <compilation debug="true" targetFramework="4.5" />
>     <httpRuntime targetFramework="4.5"/>   </system.web>   <system.serviceModel>
>     <bindings>
>       <basicHttpBinding>
>         <binding name="EmployeeBindingConfig">
>           <security mode="Transport">
>             <transport clientCredentialType="Certificate" />
>           </security>
>         </binding>
>       </basicHttpBinding>
>     </bindings>
>     <behaviors>
>       <serviceBehaviors>
>         <behavior name="EmployeeServiceBehavior">
>           <serviceMetadata httpsGetEnabled="true"/>
>           <serviceDebug includeExceptionDetailInFaults="true"/>
>           <serviceCredentials>
>             <clientCertificate>
>               <authentication certificateValidationMode="PeerOrChainTrust"
> trustedStoreLocation="LocalMachine" />
>             </clientCertificate>
>           </serviceCredentials>
>         </behavior>
>       </serviceBehaviors>
>     </behaviors>
>     <services>
>       <service
>         behaviorConfiguration="EmployeeServiceBehavior"
>         name="WCF.Tutorial.TransportSecurity.ServiceNew.EmployeeService">
>         <host>
>           <baseAddresses>
>             <add baseAddress="https://localhost/WCF.Tutorial.TransportSecurity.ServiceNew"/>
>           </baseAddresses>
>         </host>
>         <endpoint address="EmployeeService"
>                   binding="basicHttpBinding"
>                   bindingConfiguration="EmployeeBindingConfig"
>                   contract="WCF.Tutorial.TransportSecurity.ServiceNew.IEmployeeService"
> />
>         <endpoint
>            address="mex"
>            binding="mexHttpsBinding"
>            contract="IMetadataExchange" />
>       </service>
>     </services>   </system.serviceModel>   <system.webServer>
>     <modules runAllManagedModulesForAllRequests="true"/>   </system.webServer> </configuration>
  1. Это мой клиент app.config
>     <?xml version="1.0" encoding="utf-8" ?>
>     <configuration>
>         <startup> 
>             <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
>         </startup>
>       <system.serviceModel>
>         <behaviors>
>           <endpointBehaviors>
>             <behavior name="EmployeeEndpointBehaviour">
>               <clientCredentials>
>                 <clientCertificate storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName" findValue="omer-HP"/>
>               </clientCredentials>
>             </behavior>
>           </endpointBehaviors>
>         </behaviors>
>         <bindings>
>           <basicHttpBinding>
>             <binding name="EmployeeBindingConfig">
>               <security mode="Transport">
>                 <transport clientCredentialType="Certificate" />
>               </security>
>             </binding>
>           </basicHttpBinding>
>         </bindings>
>         <client>
>           <endpoint address="https://localhost/WCF.Tutorial.TransportSecurity.ServiceNew/EmployeeService.svc"
>                     binding="basicHttpBinding" bindingConfiguration="EmployeeBindingConfig"
>             contract="WCF.Tutorial.TransportSecurity.ServiceNew.IEmployeeService"
> name="serviceEndpoint"
> behaviorConfiguration="EmployeeEndpointBehaviour"/>
>         </client>
>       </system.serviceModel>
>     </configuration>
  1. Это мой клиентский код и ошибка введите описание изображения здесь

У меня вопрос, как передать эту ошибку? Мне нужна твоя помощь.

5
Omer K 18 Авг 2014 в 17:21

2 ответа

Лучший ответ

По крайней мере, проблема была найдена. Когда я заглянул в журнал событий Windows, я увидел эту ошибку

При запросе аутентификации клиента этот сервер отправляет клиенту список доверенных центров сертификации. Клиент использует этот список для выбора сертификата клиента, которому доверяет сервер. В настоящее время этот сервер доверяет такому количеству центров сертификации, что список слишком расширился. Таким образом, этот список был усечен. Администратор этого компьютера должен проверить центры сертификации, которым доверяют для аутентификации клиентов, и удалить те, которым на самом деле не нужно доверять.

Я сделал резервную копию некоторых сертификатов и удалил их. После этой операции моя программа работает.

5
TheCodeArtist 18 Апр 2015 в 16:10

Change the anonymous identity as shown in the IIS Websitee

Измените анонимную личность, как показано на веб-сайте IIS.

0
thatskj 6 Июн 2019 в 10:59