WCF net.tcp с подписанным сертификатом

Если у меня есть сертификат SSL, выданный доверенным ЦС, нужно ли мне по-прежнему импортировать сертификат SSL на клиентский компьютер при подключении к службе WCF через net.tcp?

Когда я использовал wsdualhttpbinding, я мог просто подключиться через https. Теперь я переключился на net.tcp и добавил

   <bindings>
      <netTcpBinding>
        <binding name="InsecureTcp" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
          <security mode="TransportWithMessageCredential">
            <message clientCredentialType="Certificate"/>
          </security>
        </binding>
      </netTcpBinding>
    </bindings>

в файл web.config.

Я могу получить доступ к WSDL-файлу через https, но когда я пытаюсь подключиться с моего клиента, я получаю следующую ошибку:

Дополнительная информация: сертификат клиента не предоставлен. Укажите сертификат клиента в ClientCredentials.

Я попытался добавить пользовательское поведение в файл конфигурации клиента:

 <behaviors>
  <endpointBehaviors>
    <behavior name="CustomBehavior">
      <clientCredentials>
        <clientCertificate findValue="example.com" x509FindType="FindBySubjectName"
          storeLocation="LocalMachine" storeName="My" />
      </clientCredentials>
    </behavior>
  </endpointBehaviors>
</behaviors>

Но это работает только в сочетании с импортом сертификата в мое локальное хранилище сертификатов...


person libjup    schedule 09.09.2014    source источник


Ответы (1)


Надеюсь, я понял вашу мысль — вы не хотите использовать клиентские сертификаты для аутентификации? Затем измените <security mode="TransportWithMessageCredential"> <message clientCredentialType="Certificate"/> </security> clientCredentialType на один из следующих: http://msdn.microsoft.com/en-us/library/system.servicemodel.httpclientcredentialtype(v=vs.110).aspx

При желании вы можете использовать несколько механизмов проверки подлинности: http://msdn.microsoft.com/de-de/library/ms731316(v=vs.110).aspx

person Sebastian    schedule 09.09.2014
comment
Мне не нужна аутентификация. Я просто хочу зашифровать обмен данными между моим клиентом WCF и службой... - person libjup; 09.09.2014
comment
затем просто замените Certificate в clientCredentialType на None (чтобы клиенты не аутентифицировались) и добавьте сервисное поведение для сертификата сервера. Смотри сюда: - person Sebastian; 09.09.2014
comment
извините, но не могли бы вы уточнить, что вы имеете в виду под сервисным поведением? конфигурация клиента или сервера? какие параметры? - person libjup; 09.09.2014
comment
извините, я не нашел ссылку так быстро: stackoverflow.com/questions/10870677/ - person Sebastian; 09.09.2014
comment
Я думаю, вам подходит вариант 1 - это помогло? - person Sebastian; 09.09.2014