Я пытаюсь разместить wcf на IIS, используя транспортную безопасность. Я нашел хорошее руководство и следую инструкциям: http://robbincremers.me/2011/12/27/wcf-transport-security-and-client-certificate-authentication-with-self-signed-certificates/. Я всегда получаю сообщение «HTTP-запрос был запрещен с использованием схемы аутентификации клиента« Анонимный »». Как я могу с этим справиться?
Что я сделал до сих пор:
Я создал самоподписанный сертификат корневого центра сертификации, как описано здесь < / а>.
makecert -n "CN = TempCA" -r -sv TempCA.pvk TempCA.cer
Создан новый сертификат сервера, подписанный сертификатом корневого центра
makecert -sk SignedByCA -iv TempCA.pvk -n "CN = localhost" -ic TempCA.cer localhost.cer -sr localmachine -ss My
Создан новый сертификат клиента, подписанный сертификатом корневого центра
makecert -sk SignedByCA -iv TempCA.pvk -n "CN = clientCert" -ic TempCA.cer clientCert.cer -sr localmachine -ss My
Добавлен ЦС в доверенный корневой сертификат
Эти сертификаты добавлены в Personal -> Certificates
Добавлен сертификат клиента для доверенных лиц
Все в порядке
Создал очень простое приложение WCF. Добавил IIS
Настройте параметры безопасности
Это мой служебный файл 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>
- Это мой клиент 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>
- Это мой клиентский код и ошибка
У меня вопрос, как передать эту ошибку? Мне нужна твоя помощь.
2 ответа
По крайней мере, проблема была найдена. Когда я заглянул в журнал событий Windows, я увидел эту ошибку
При запросе аутентификации клиента этот сервер отправляет клиенту список доверенных центров сертификации. Клиент использует этот список для выбора сертификата клиента, которому доверяет сервер. В настоящее время этот сервер доверяет такому количеству центров сертификации, что список слишком расширился. Таким образом, этот список был усечен. Администратор этого компьютера должен проверить центры сертификации, которым доверяют для аутентификации клиентов, и удалить те, которым на самом деле не нужно доверять.
Я сделал резервную копию некоторых сертификатов и удалил их. После этой операции моя программа работает.
Измените анонимную личность, как показано на веб-сайте IIS.
Похожие вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.