2012-06-03 18 views
5

Czy istnieje sposób użycia protokołu WCF SSL z programem NetTcPBinding, który nie wymaga zainstalowania certyfikatu klienta na komputerze klienta? (SSL V2, jeśli się nie mylę).Używanie certyfikatu Wcf SSl przez Tcp bez certyfikatu klienta (tylko po stronie serwera)

chcemy, aby certyfikat serwera znajdował się w zaufanym sklepie klienta w celu uwierzytelnienia i zaszyfrowania wiadomości za pomocą klucza publicznego serwera, co oznacza, że ​​tylko komputer serwera będzie przechowywać certyfikat klucza prywatnego.

używamy NetTcpBinding, a nie customBinding po obu stronach. Jeśli można go zrobić, jaka jest jego odpowiednia konfiguracja? (w przypadku konfiguracji klienta &)

Z góry dziękuję.


Oto moje konie z wcf.

Server Config:



    <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> 

KLIENT config:



    <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> 

im dodając moje aktualne serwer & configs klienta. kolejne pytania:

  1. na poziomie uwierzytelniania chcemy klienta do uwierzytelniania serwera cert Ther (myślę, że klucz publiczny serwera powinna być w sklepie trustedPeople), jest to możliwe?

  2. czy polecasz nam używać Transport Security Or Message?

  3. jeśli chcemy aby uwierzytelnić serwer klient & przez NTLM (clientCredentialType = Windows) to można to zrobić w uzupełnieniu do uwierzytelniania serwera cert lub tylko jeden z nich może być stosowana? do tej pory używaliśmy uwierzytelniania NTLM.

  4. teraz im uzyskiwanie wyjątek: „Żądana aktualizacja nie jest obsługiwana przez«Net.TCP: // nazwa_serwera: 8040/**». Może to być spowodowane niedopasowane powiązań (na przykład bezpieczeństwa włączone klienta, a nie na serwerze). " Rozumiem, że wystąpił ten błąd, ponieważ klient korzysta z zabezpieczeń systemu Windows i serwera w certyfikacie om, , ale po zmianie zabezpieczeń klienta na certyfikat również otrzymuję komunikat o błędzie: "Certyfikat klienta nie jest dostarczany". ale nie chcę ustawiać certyfikatu klienta i to jest część mojego głównego problemu.

  5. czytamy, że możemy użyć do uwierzytelniania cert serwera to tags:

    
        <identity> 
         <certificate encodedValue="encoded certificate"/> 
        </identity> 
    

, ale myślę, że to uwierzytelnianie przez tożsamości odbywa się za pomocą kodowanego certyfikatu kiedy preffer że identyfikacja CERT będzie wykonać poprzez przeszukanie klucza publicznego serwera w sklepie klienta (trustedPeople). czy te informacje są naprawdę prawdziwe? że te znaczniki tożsamości są alternatywą dla poszukiwania klucza publicznego w kliencie "s zaufanego sklepu?

nadzieję, że będzie w stanie pomóc w tym sposoby, dzięki jeszcze raz.

+0

Jest to możliwe. Czego spróbowałeś do tej pory? – Bernard

+0

Nie powinieneś potrzebować certyfikatu klienta, chyba że prosisz o jedno; Jak wygląda twoja powiązana konfiguracja? –

+0

Czy ktoś może mi pomóc z naszym problemem? – AmirT

Odpowiedz

11

że używasz netTcpBiding i trzeba użyć Bezpieczeństwo transportu to masz 3 opcje, pierwsza opcja wymaga certyfikatu usługi, druga nie wymaga żadnego certyfikatu, trzecia wymaga zarówno certyfikatu usługi, jak i certyfikatu klienta, dla swojego scenariusza powinieneś użyć opcji1, która uwierzytelni usługę za pośrednictwem certyfikatu i będzie działać jako poufność i integralność wiadomości. 10 I >> Integrity
>> Authentication (To się stanie dla klienta)

1- Opcja pierwsza dostarczyć (C + I) uwierzytelnianie nie stanie się dla klienta, w tym przypadku SSL TCP (nie SSL HTPS) zostaną wykorzystane w celu zapewnienia C oraz i, a usługa będzie

<!--//Below are the configuration for both the service and the client--> 
<netTcpBinding> 
    <binding name="TcpSecureBinding"> 
     <security mode="Transport"> 
     <transport clientCredentialType="None"></transport> 
     </security> 
    </binding> 
    </netTcpBinding> 

także dlatego, że TCP SSL zostaną wykorzystane następnie usługa musi dostarczyć zaświadczenie dla klienta, więc trzeba zainstaluj certyfikat na serwerze i skonfiguruj usługę do korzystania z tego certyfikatu, aby potwierdzić jego tożsamość, również musisz zainstalować certyfikat głównego urzędu certyfikacji dla usługi Certyfikat zaciskają się na komputerze klienckim (zwykle w LocalMachine/Zaufany certyfikacyjnych organów), i obsługa musi mieć poniżej zachowanie określić certyfikat dla usługi

<serviceBehaviors> 
    <behavior> 
     <serviceCredentials> 
     <serviceCertificate findValue="localhost" 
          x509FindType="FindByIssuerName" /> 
     </serviceCredentials> 
    </behavior> 
    </serviceBehaviors> 

2- Opcja druga dostarczenia (A + [C + I]), C i I są opcjonalne podczas konfigurowania za pomocą elementu protectionLevel. auth klient będzie Okna auth (zwykle będzie używać Windows Stream Security do osiągnięcia A, C i I)

<!--//Below are the configuration for both the service and the client--> 
<netTcpBinding> 
    <binding name="TcpSecureBinding"> 
     <security mode="Transport"> 
     <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign"></transport> 
     </security> 
    </binding> 
    </netTcpBinding> 

3- opcję 3 świadczenia (A + C + I), C i nie są opcjonalne i uwierzytelnianie klient będzie poprzez certyfikat klienta (każdy klient musi posiadać własny certyfikat), W tym przypadku SSL TCP (nie SSL HTPS) zostaną wykorzystane w celu zapewnienia a, C i I.

<!--//Below are the configuration for both the service and the client--> 
<binding name="TcpSecureBinding"> 
     <security mode="Transport"> 
     <transport clientCredentialType="Certificate"></transport> 
     </security> 
    </binding> 

również dlatego, że zostanie użyty protokół TCP SSL, a następnie usługa musi dostarczyć certyfikat dla klienta, więc musisz zainstalować certyfikat na serwerze i skonfigurować usługę do użycia ten certyfikat służy do potwierdzenia tożsamości użytkownika, należy również zainstalować certyfikat głównego urzędu certyfikacji dla certyfikatu usługi na komputerze klienta (zazwyczaj w lokalnych/zaufanych głównych urzędzie certyfikacji), a usługa musi mieć poniższe zachowanie, aby określić certyfikat dla usługi

+0

Co oznacza, że ​​konfiguracja punktu końcowego klienta musi wyglądać tak, aby używać tylko publicznego głównego klucza urzędu certyfikacji? Próbowałem skonfigurować moją usługę za pomocą certyfikatu komputera podpisanego przez główny urząd certyfikacji, ale gdy konfiguruję klienta do korzystania z głównego urzędu certyfikacji, klient i serwer nie mogą rozmawiać. Ale kiedy umieściłem klucz publiczny na certyfikacie komputera serwisowego na kliencie (i zmienię "findValue" na tę nazwę certyfikatu), to działa. Co ja robię źle? –

+0

Odpowiedź z [Blogu Ryana Gunna] (https://talkdotnet.wordpress.com/tag/nettcp/) – noobob

Powiązane problemy