Использование SSL-сертификата Wcf через Tcp без клиентского сертификата (только на стороне сервера)

Есть ли способ использовать WCF SSL с NetTcpBinding, который не требовал бы установки клиентского сертификата на клиентской машине? (SSL V2, если не ошибаюсь).

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

мы используем NetTcpBinding, а не customBinding с обеих сторон. Если это можно сделать, какова правильная конфигурация для него? (о конфигурации клиента и сервера)

Заранее спасибо.


вот мои конфиги wcf.

КОНФИГУРАЦИЯ СЕРВЕРА:



    <configuration>
      <system.serviceModel>
        <bindings>
         <netTcpBinding>
            <binding name="TcpSecureBinding">
            <security mode="Transport">
              <transport clientCredentialType="Certificate"/>            
            </security>
       </binding>
         </netTcpBinding>
       </bindings>
       <behaviors>
         <serviceBehaviors>
           <behavior name="ServiceCredentialsBehavior">          
             <serviceDebug includeExceptionDetailInFaults="True" />
             <serviceMetadata httpGetEnabled="true" />
             <serviceAuthorization 
                 principalPermissionMode="UseWindowsGroups">
             </serviceAuthorization>
          <serviceCredentials>
               <windowsAuthentication includeWindowsGruops="true"            
                                      allowAnonymousLogons="false"/>
               <clientCertificate>
                     <authentication certificateValidationMode="none"/>
               </clientCertificate>
               <serverCertificate
                   findValue="thumbprint"
                   storelocation="LocalMachine"
                   x509FindType="FindMyThumbprint"
                   storeName="My"/>
           </serviceCredentials>
        </behavior>
       </serviceBehaviors>
      </behaviors>
    <services>
        <service behaviorConfiguration="ServiceCredentialsBehavior"
               name="ServiceModel.Calculator">
          <endpoint address="net.tcp://localhost:8040/Calculator"
                  binding="netTcpBinding"
                  bindingConfiguration="TcpSecureBinding"
                  contract="ServiceModel.ICalculator" >
           <identity>
               <dns value="localhost"/>
           </identity>
         </endpoint>
        </service>
     </services>
    </system.serviceModel>
    </configuration>

КОНФИГУРАЦИЯ КЛИЕНТА:



    <configuration>
      <system.serviceModel>
        <client>
         <endpoint address="net.tcp://localhost:8040/Calculator"
                behaviorConfiguration="endpointCredentialBehavior"
                binding="netTcpBinding" 
                bindingConfiguration="Binding1" 
                contract="ServiceModel.ICalculator">
          <identity>
               <dns value="localhost"/>
          </identity>
          </endpoint>
        </client>
      <behaviors>
        <endpointBehaviors>
          <behavior name="endpointCredentialBehavior">
          </behavior>
         </endpointBehaviors>
       </behaviors>
       <bindings>
         <netTcpBinding>
          <binding name="Binding1">
            <security mode="Transport">
              <transport clientCredentialType="Windows" />
             </security>
          </binding>
          </netTcpBinding>
        </bindings>
     </system.serviceModel>
    </configuration>

я добавляю свои текущие конфигурации сервера и клиента. еще вопросы:

  1. на уровне аутентификации мы хотим, чтобы клиент аутентифицировал сертификат сервера (я думаю, что открытый ключ сервера должен находиться в хранилище trustPeople), возможно ли это?

  2. Вы рекомендуете нам использовать Transport Security или Message?

  3. если мы хотим аутентифицировать клиент и сервер с помощью NTLM (clientCredentialType=Windows) это можно сделать в дополнение к аутентификации сертификата сервера или можно применить только один из них? до сих пор мы использовали аутентификацию NTLM.

  4. Сейчас я получаю исключение: «Запрошенное обновление не поддерживается ‘net.tcp://servername:8040/ **». Это может быть связано с несоответствием привязок (например, безопасность включена на клиенте, а не на сервере) ." я понимаю, что эта ошибка произошла из-за того, что клиент использует безопасность Windows и сервер в сертификате om, но когда я также меняю безопасность клиента на сертификат, я получаю сообщение об ошибке: "Сертификат клиента не предоставлен". но я не хочу устанавливать сертификат клиента, и это часть моей основной проблемы.

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

    
     
     
     
    

но я думаю, что эта аутентификация по удостоверению выполняется с помощью закодированного сертификата, когда мы предпочитаем, чтобы идентификация сертификата выполнялась путем поиска открытого ключа сервера в хранилище клиента (trustedPeople). эта информация действительно соответствует действительности? что эти теги идентификации являются альтернативой поиску открытого ключа в доверенном хранилище клиента?

Надеюсь, вы сможете помочь в этом, еще раз спасибо.

5
задан Bill the Lizard 4 June 2012 в 12:24
поделиться