Ошибка прокси WCF с использованием сертификата X509 - PullRequest
2 голосов
/ 27 апреля 2011


Я создал службу wcf и мог УСПЕШНО отослать ее в клиентское приложение.Но проблема возникает, когда я внедряю сертификат X509.

1) когда я изменяю службу на использование сертификата x509, я не смог создать прокси, так как конечные точки mex не отображаются в браузере.Итак, в таком случае, как я должен ссылаться на службу в клиентском приложении, если служба защищена, а конечные точки mex не открыты?

2) Могу ли я использовать безопасность сообщений и транспорта в качестве сертификата?Будет ли этот сценарий работать для basicHttpBinding?Я слышал, что basicHttpBinding не может обеспечить безопасность сообщений с помощью сертификата.

Любая помощь в этом отношении будет высоко оценена.

Вот моя модель сервиса в Сервисе.

<system.serviceModel>
<client>       
  <endpoint behaviorConfiguration="" 
    binding="basicHttpBinding"
        bindingConfiguration="WCFServiceX509Binding" 
    contract="WCFService.Contract.Service.IWCFServiceContract"
        name="WCFServiceClientEndPoint" />      
</client>
<bindings>
  <basicHttpBinding>
    <binding name="WCFServiceX509Binding" maxBufferSize="6553600"
      maxBufferPoolSize="52428800" maxReceivedMessageSize="6553600">
      <security mode="TransportWithMessageCredential">
        <transport clientCredentialType="Certificate" />
        <message clientCredentialType="Certificate" />
      </security>
    </binding>        
  </basicHttpBinding>
</bindings>
<services>
  <service  behaviorConfiguration="ServiceBehavior" 
    name="WCFService.Model.WCFServiceModel">
    <endpoint 
    address="" 
    binding="basicHttpBinding" 
    bindingConfiguration="WCFServiceX509Binding"
        name="WCFServiceBasicHttpEndPoint" 
    contract="WCFService.Contract.Service.IWCFServiceContract">
      <identity>
            <certificateReference findValue="WCFUADOCServer" />
      </identity>
    </endpoint>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="ServiceBehavior">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <serviceCredentials />
    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="ClientCertificateBehavior">
      <clientCredentials>
        <clientCertificate  findValue="WCFUADOCServer"
                  x509FindType="FindBySubjectName"
                  storeLocation="LocalMachine"
                  storeName="TrustedPeople" />
      </clientCredentials>
    </behavior>
  </endpointBehaviors>
</behaviors>

Большое спасибо, Чанд.

1 Ответ

0 голосов
/ 27 апреля 2011
  1. Конечная точка Mex не зависит от сертификата.Исходя из вашей конфигурации, вы вообще не предоставляете конечную точку mex, и страница справки с WSDL должна быть по-прежнему доступна через HTTP.
  2. Что вы хотите сделать?Безопасность - немного термин высокого уровня в этом случае .Вы можете использовать защищенный транспортный канал и, возможно, использовать сертификат, транспортируемый в сообщении, для аутентификации (я никогда не пробовал эту комбинацию).Сценарий должен работать над BasicHttpBinding.Я сам был удивлен, но BasicHttpBinding фактически поддерживает полную асимметричную защиту сообщений обоюдного сертификата.

Если вы хотите предоставить сервис с безопасностью транспорта, вы должны использовать HTTPS - либо настроенный с помощью IIS management.console (при размещении в IIS) или назначение сертификата для порта с помощью netsh (self hosting).Помните, что учетная запись, на которой запущена служба, должна иметь доступ к закрытым ключам в сертификате - , необходимо правильно настроить ACL .

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

<serviceCredentials>
  <clientCertificate>
   <authentication certificateValidationMode="PeerTrust" />
  </clientCertificate>
</serviceCredentials>

Вы также можете определить специальный сертификат для проверки сертификатов .Для конечной точки используйте скорее dns identity.

Для клиента используйте также режим проверки PeerTrust для сертификата службы.

...