Verwenden des Wcf-SSl-Zertifikats über TCP ohne Clientzertifikat (nur auf der Serverseite)

Gibt es eine Möglichkeit, WCF SSL mit NetTcpBinding zu verwenden, für die kein Clientzertifikat auf dem Clientcomputer installiert werden muss? (SSL V2, wenn ich mich nicht irre).

Wir möchten, dass das Serverzertifikat zur Authentifizierung und Verschlüsselung der Nachricht mit dem öffentlichen Schlüssel des Servers im vertrauenswürdigen Speicher des Clients gespeichert wird. Das bedeutet, dass nur der Server über ein Zertifikat mit privatem Schlüssel verfügt.

Wir verwenden eine NetTcpBinding und keine benutzerdefinierte Bindung auf beiden Seiten. Wenn es möglich ist, was ist die richtige Konfiguration dafür? (in der Client & Server Konfiguration)

Danke im Voraus.

hier sind meine wcf configs.

SERVER-KONFIG:



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

KUNDENKONFIGURATION:



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

Ich füge meine aktuellen Server & Client Konfigurationen hinzu. andere Fragen:

Auf der Authentifizierungsebene soll der Client das Zertifikat des Servers authentifizieren (ich denke, der öffentliche Schlüssel des Servers sollte sich im TrustedPeople Store befinden). Ist dies möglich?

empfehlen Sie uns, Transportsicherheit oder -nachricht zu verwenden?

Wenn wir Client und Server über NTLM authentifizieren möchten (clientCredentialType = Windows), kann dies zusätzlich zur zertifizierten Authentifizierung des Servers erfolgen oder nur eine davon angewendet werden? Bisher haben wir die NTLM-Authentifizierung verwendet.

Im Moment bekomme ich eine Ausnahme: "Das angeforderte Upgrade wird von" net.tcp: // servername: 8040 / "nicht unterstützt.**'. Dies könnte an nicht übereinstimmenden Bindungen liegen (zum Beispiel aktivierte Sicherheit auf dem Client und nicht auf dem Server). "Ich verstehe, dass dieser Fehler aufgetreten ist, weil der Client Windows-Sicherheit und Server in om Certificate verwendet, aber wenn ich die Client-Sicherheit auch in Certificate ändere Ich erhalte eine Fehlermeldung: "Das Client-Zertifikat wird nicht bereitgestellt", aber ich möchte das Client-Zertifikat nicht festlegen, und das ist ein Teil meines Hauptproblems.

Wir lesen, dass wir diese Tags für die Serverzertifizierungsauthentifizierung verwenden können:


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

Ich denke jedoch, dass diese Authentifizierung durch Identität durch ein verschlüsseltes Zertifikat erfolgt, wenn wir bevorzugen, dass die Identifizierung des Zertifikats durch Durchsuchen des öffentlichen Schlüssels des Servers im Speicher des Clients (trustedPeople) durchgeführt wird. Stimmt diese Information wirklich? dass diese Identitätskennungen eine Alternative zum Durchsuchen des öffentlichen Schlüssels im vertrauenswürdigen Speicher des Clients darstellen?

Ich hoffe, Sie können uns auf diese Weise weiterhelfen. Nochmals vielen Dank.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage