2013-07-19 4 views
1

Я использую приложение C#, asp.net с WCF.Аутентификация WCF путем сопоставления сертификата клиента и сервера

Я создал клиентский сертификат (Client.pfx) и установлен на моем компьютере под текущим пользователем. Затем я создал и установил сертификат сервера (Server.pfx) на моем компьютере, размещенном в WCF. Теперь мне нужно пройти аутентификацию от клиента, одновременно сопоставляя сертификат клиента и сервера. Если есть совпадение, тогда он должен будет разрешить доступ к методам внутри WCF. Как достичь этого?

+0

Не могли бы вы дать более подробную информацию о том, что вы подразумеваете под «соответствием сертификатам»? У обеих машин есть один и тот же сертификат? –

+0

Чтобы аутентифицировать WCF из клиентского приложения, нам нужно сопоставить, настроен ли тот же самый сертификат на хост-сервере WCF. Поэтому, если настроенный сервер и клиентский сертификат совпадают, служба затем аутентифицируется. –

ответ

0

Вам не нужно писать код для аутентификации сертификата - это может быть выполнено с помощью конфигурации.

Из этой статьи:

http://msdn.microsoft.com/en-us/library/ff648360.aspx

Есть несколько способов, чтобы указать местоположение сертификата. Этот пример использует хранилище сертификатов для службы:

<behaviors> 
    <serviceBehaviors> 
    <behavior name="ServiceBehavior"> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="false" /> 
     <serviceCredentials> 
      <serviceCertificate findValue="CN=tempCertServer" /> 
     </serviceCredentials> 
    </behavior> 
    </serviceBehaviors> 

И это один использует сертификат, который кодируется непосредственно в конфигурационном файле:

<system.serviceModel> 
    <behaviors> 
     <endpointBehaviors> 
      <behavior name="NewBehavior"> 
       <clientCredentials> 
        <clientCertificate findValue="CN=tempCertClient"/> 
       </clientCredentials> 
      </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    ... 
    <client> 
     <endpoint address="http://<<service address>>" 
      behaviorConfiguration="NewBehavior" binding="wsHttpBinding" 
      bindingConfiguration="wsHttpEnpoint1" contract="ServiceReference1.IService" 
      name="wsHttpEndpoint"> 
      <identity> 
       <certificate encodedValue="<<Encode Value>>" /> 
      </identity> 
     </endpoint> 
    </client> 
</system.serviceModel> 
+0

Это для файла WCF web.config? –

+0

Да - да, это так. Понимание сертификатов - большая тема - вам придется делать больше, чем просто копировать и вставлять чей-то ответ отсюда. Я рекомендую прочитать некоторые сведения о сертификатах и ​​конфигурации WCF. – RQDQ

0

Что вы говорите about, Praveen, является аутентификацией сертификата клиента. Об этом много написано, но в основном у вас есть два параметра проверки подлинности при использовании аутентификации сертификата клиента:

Один из них называется ChainTrust, что означает, что сертификат клиента имеет в качестве центра сертификации (CA) сертификат, найденный на хосте.

Другим вариантом называется PeerTrust, что означает, что сертификат auth клиента имеет копию, найденную на хосте в хранилище LocalMachine \ TrustedPeople на хосте.

Или вы можете использовать PeerOrChainTrust, что означает, что если либо цепь или Peer доверие верно, то клиент имеет право в

Это огромная тема. - слишком большая для этого маленького форума, но вот хорошее начало Вы должны начать с:

Ссылка: http://msdn.microsoft.com/en-us/library/ff650785.aspx

+0

Моей ситуацией является создание сертификата с клиентской стороны и отправка копии этого сертификата на принимающую сторону WCF для утверждения, как работает First Data API. Итак, какой метод мне нужно принять? –

+0

Этот метод, о котором вы говорите, является новым для меня. Используемая мной модель dev позволяет службе WCF проверять подлинность клиента на хост на основе сертификата, который клиент имеет, который соответствует (на основе того, что я изложил в своем ответе), сертификата, найденного на хосте. То, о чем вы говорите, больше похоже на процесс регистрации сертификатов ... Я понятия не имею, как вы это сделаете. – Brian

Смежные вопросы