X.509-Zertifikats-ValidierungssteuerelementX.509 Certificate Validator

In diesem Beispiel wird veranschaulicht, wie ein benutzerdefiniertes X.509-Zertifikats-Validierungssteuerelement implementiert wird.This sample demonstrates how to implement a custom X.509 Certificate Validator. Dies ist nützlich, wenn keines der integrierten X.509-Zertifikats-Validierungsmodi den Anforderungen der Anwendung entspricht.This is useful in cases where none of the built-in X.509 Certificate Validation modes is appropriate for the requirements of the application. Dieses Beispiel zeigt einen Dienst, der über ein benutzerdefiniertes Validierungssteuerelement verfügt, das selbst herausgegebene Zertifikate akzeptiert.This sample shows a service that has a custom validator that accepts self-issued certificates. Der Client verwendet solch ein Zertifikat, um den Dienst zu authentifizieren.The client uses such a certificate to authenticate to the service.

Hinweis: Da jeder ein selbst herausgegebenes Zertifikat erstellen kann, ist das vom Dienst verwendete benutzerdefinierte Validierungssteuerelement unsicherer als das Standardverhalten vom ChainTrust X509CertificateValidationMode.Note: As anyone can construct a self-issued certificate the custom validator used by the service is less secure than the default behavior provided by the ChainTrust X509CertificateValidationMode. Die daraus resultierenden Sicherheitsauswirkungen sollten sorgfältig bedacht werden, bevor diese Validierungslogik im Produktionscode verwendet wird.The security implications of this should be carefully considered before using this validation logic in production code.

Insgesamt zeigt dieses Beispiel Folgendes:In summary this sample demonstrates how:

  • Der Client kann mit einem X.509-Zertifikat authentifiziert werden.The client can be authenticated using an X.509 certificate.

  • Der Server überprüft die Clientanmeldeinformationen mithilfe eines benutzerdefinierten X509CertificateValidator.The server validates the client credentials against a custom X509CertificateValidator.

  • Der Server wird mit dem X.509-Zertifikat des Servers authentifiziert.The server is authenticated using the server's X.509 certificate.

Der Dienst macht einen einzelnen Endpunkt zur Kommunikation mit dem Dienst verfügbar, der mit der Konfigurationsdatei "App.conf" definiert wird. Der Endpunkt besteht aus einer Adresse, einer Bindung und einem Vertrag.The service exposes a single endpoint for communicating with the service, defined using the configuration file App.config. The endpoint consists of an address, a binding, and a contract. Die Bindung ist konfiguriert, mit einer normalen wsHttpBinding , die standardmäßig WSSecurity und Clientzertifikatauthentifizierung verwendet.The binding is configured with a standard wsHttpBinding that defaults to using WSSecurity and client certificate authentication. Das Dienstverhalten gibt den benutzerdefinierten Modus zur Prüfung von X.509-Clientzertifikaten zusammen mit dem Typ der Validierungssteuerelementklasse an.The service behavior specifies the Custom mode for validating client X.509 certificates along with the type of the validator class. Das Verhalten gibt auch das Serverzertifikat mit dem serviceCertificate-Element an.The behavior also specifies the server certificate using the serviceCertificate element. Das Serverzertifikat muss für den gleichen Wert enthalten die SubjectName als die findValue in der <ServiceCertificate >.The server certificate has to contain the same value for the SubjectName as the findValue in the <serviceCertificate>.

  <system.serviceModel>  
    <services>  
      <service name="Microsoft.ServiceModel.Samples.CalculatorService"  
               behaviorConfiguration="CalculatorServiceBehavior">  
        <!-- use host/baseAddresses to configure base address -->  
        <!-- provided by host -->  
        <host>  
          <baseAddresses>  
            <add baseAddress =  
                "http://localhost:8001/servicemodelsamples/service" />  
          </baseAddresses>  
        </host>  
        <!-- use base address specified above, provide one endpoint -->  
        <endpoint address="certificate"  
               binding="wsHttpBinding"  
               bindingConfiguration="Binding"   
               contract="Microsoft.ServiceModel.Samples.ICalculator" />  
      </service>  
    </services>  
    <bindings>  
      <wsHttpBinding>  
        <!-- X509 certificate binding -->  
        <binding name="Binding">  
          <security mode="Message">  
            <message clientCredentialType="Certificate" />  
          </security>  
        </binding>  
      </wsHttpBinding>  
    </bindings>  
    <behaviors>  
      <serviceBehaviors>  
        <behavior name="CalculatorServiceBehavior">  
          <serviceDebug includeExceptionDetailInFaults ="true"/>  
          <serviceCredentials>  
            <!--The serviceCredentials behavior allows one -->  
            <!-- to specify authentication constraints on -->  
            <!-- client certificates. -->  
            <clientCertificate>  
              <!-- Setting the certificateValidationMode to -->  
              <!-- Custom means that if the custom -->  
              <!-- X509CertificateValidator does NOT throw -->  
              <!-- an exception, then the provided certificate -- >  
              <!-- will be trusted without performing any -->  
              <!-- validation beyond that performed by the custom-->  
              <!-- validator. The security implications of this -->  
              <!-- setting should be carefully considered before -->  
              <!-- using Custom in production code. -->  
              <authentication   
                 certificateValidationMode="Custom"   
                 customCertificateValidatorType =  
"Microsoft.ServiceModel.Samples.CustomX509CertificateValidator, service" />  
            </clientCertificate>  
            <!-- The serviceCredentials behavior allows one to -- >  
            <!--define a service certificate. -->  
            <!--A service certificate is used by a client to  -->  
            <!--authenticate the service and provide message  -->  
            <!--protection. This configuration references the  -->  
            <!--"localhost" certificate installed during the setup  -->  
            <!--instructions. -->  
            <serviceCertificate findValue="localhost"   
                 storeLocation="LocalMachine"   
                 storeName="My" x509FindType="FindBySubjectName" />  
          </serviceCredentials>  
        </behavior>  
      </serviceBehaviors>  
    </behaviors>  
      </system.serviceModel>  

Die Clientendpunktkonfiguration besteht aus einem Konfigurationsnamen, einer absoluten Adresse für den Dienstendpunkt, der Bindung und dem Vertrag.The client endpoint configuration consists of a configuration name, an absolute address for the service endpoint, the binding, and the contract. Die Clientbindung wird mit dem entsprechenden Modus und der clientCredentialType-Nachricht konfiguriert.The client binding is configured with the appropriate mode and message clientCredentialType.

<system.serviceModel>  
    <client>  
      <!-- X509 certificate based endpoint -->  
      <endpoint name="Certificate"  
        address=  
        "http://localhost:8001/servicemodelsamples/service/certificate"   
                binding="wsHttpBinding"   
                bindingConfiguration="Binding"   
                behaviorConfiguration="ClientCertificateBehavior"  
                contract="Microsoft.ServiceModel.Samples.ICalculator">  
      </endpoint>  
    </client>  
    <bindings>  
        <wsHttpBinding>  
            <!-- X509 certificate binding -->  
            <binding name="Binding">  
                <security mode="Message">  
                    <message clientCredentialType="Certificate" />  
               </security>  
            </binding>  
       </wsHttpBinding>  
    </bindings>  
    <behaviors>  
      <endpointBehaviors>  
        <behavior name="ClientCertificateBehavior">  
          <clientCredentials>  
            <serviceCertificate>  
              <!-- Setting the certificateValidationMode to -->  
              <!-- PeerOrChainTrust means that if the certificate -->  
              <!-- is in the user's Trusted People store, then it -->  
              <!-- is trusted without performing a validation of -->  
              <!-- the certificate's issuer chain. -->  
              <!-- This setting is used here for convenience so -->  
              <!-- that the sample can be run without having to -->  
              <!-- have certificates issued by a certification -->  
              <!-- authority (CA). This setting is less secure -->  
              <!-- than the default, ChainTrust. The security -->  
              <!-- implications of this setting should be -->  
              <!-- carefully considered before using -->  
              <!-- PeerOrChainTrust in production code.-->  
              <authentication   
                  certificateValidationMode="PeerOrChainTrust" />  
            </serviceCertificate>  
          </clientCredentials>  
        </behavior>  
      </endpointBehaviors>  
    </behaviors>  
  </system.serviceModel>  

Die Clientimplementierung legt das zu verwendende Clientzertifikat fest.The client implementation sets the client certificate to use.

// Create a client with Certificate endpoint configuration  
CalculatorClient client = new CalculatorClient("Certificate");  
try  
{  
    client.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySubjectName, "test1");  

    // Call the Add service operation.  
    double value1 = 100.00D;  
    double value2 = 15.99D;  
    double result = client.Add(value1, value2);  
    Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);  

    // Call the Subtract service operation.  
    value1 = 145.00D;  
    value2 = 76.54D;  
    result = client.Subtract(value1, value2);  
    Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result);  

    // Call the Multiply service operation.  
    value1 = 9.00D;  
    value2 = 81.25D;  
    result = client.Multiply(value1, value2);  
    Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result);  

    // Call the Divide service operation.  
    value1 = 22.00D;  
    value2 = 7.00D;  
    result = client.Divide(value1, value2);  
    Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result);  
    client.Close();  
}  
catch (TimeoutException e)  
{  
    Console.WriteLine("Call timed out : {0}", e.Message);  
    client.Abort();  
}  
catch (CommunicationException e)  
{  
    Console.WriteLine("Call failed : {0}", e.Message);  
    client.Abort();  
}  
catch (Exception e)  
{  
    Console.WriteLine("Call failed : {0}", e.Message);  
    client.Abort();  
}  

In diesem Beispiel wird ein benutzerdefinierter X509CertificateValidator verwendet, um Zertifikate zu überprüfen.This sample uses a custom X509CertificateValidator to validate certificates. Das Beispiel implementiert CustomX509CertificateValidator, das von X509CertificateValidator abgeleitet ist.The sample implements CustomX509CertificateValidator, derived from X509CertificateValidator. Weitere Informationen finden Sie in der Dokumentation zu X509CertificateValidator.See documentation about X509CertificateValidator for more information. In diesem speziellen Beispiel zu einem benutzerdefinierten Validierungssteuerelement ist die Validate-Methode so implementiert, dass sie jedes selbst herausgegebene X.509-Zertifikat akzeptiert, wie im folgenden Code gezeigt.This particular custom validator sample implements the Validate method to accept any X.509 certificate that is self-issued as shown in the following code.

public class CustomX509CertificateValidator : X509CertificateValidator  
{  
  public override void Validate ( X509Certificate2 certificate )  
  {  
   // Only accept self-issued certificates  
   if (certificate.Subject != certificate.Issuer)  
     throw new Exception("Certificate is not self-issued");  
   }  
}  

Nachdem das Validierungssteuerelement im Dienstcode implementiert ist, muss der Diensthost über die zu verwendende Validierungssteuerelementinstanz informiert werden.Once the validator is implemented in service code, the service host must be informed about the validator instance to use. Dies wird mit dem folgenden Code durchgeführt.This is done using the following code.

serviceHost.Credentials.ClientCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.Custom;  
serviceHost.Credentials.ClientCertificate.Authentication.CustomCertificateValidator = new CustomX509CertificateValidator();  

Sie können dasselbe aber auch wie folgt in der Konfiguration vornehmen.Or you can do the same thing in configuration as follows.

<behaviors>  
    <serviceBehaviors>  
     <behavior name="CalculatorServiceBehavior">  
       ...  
   <serviceCredentials>  
    <!--The serviceCredentials behavior allows one to specify -->   
    <!--authentication constraints on client certificates.-->  
    <clientCertificate>  
    <!-- Setting the certificateValidationMode to Custom means -->   
    <!--that if the custom X509CertificateValidator does NOT -->   
    <!--throw an exception, then the provided certificate will-- >   
    <!-- be trusted without performing any validation beyond that-- >  
    <!-- performed by the custom validator. The security -- >   
    <!--implications of this setting should be carefully -- >  
    <!--considered before using Custom in production code. -->  
    <authentication certificateValidationMode="Custom"  
       customCertificateValidatorType =  
"Microsoft.ServiceModel.Samples. CustomX509CertificateValidator, service" />  
   </clientCertificate>  
   ...  
  </behavior>  
 </serviceBehaviors>  
</behaviors>  

Wenn Sie das Beispiel ausführen, werden die Anforderungen und Antworten für den Vorgang im Clientkonsolenfenster angezeigt.When you run the sample, the operation requests and responses are displayed in the client console window. Der Client sollte alle Methoden erfolgreich aufrufen.The client should successfully call all the methods. Drücken Sie im Clientfenster die EINGABETASTE, um den Client zu schließen.Press ENTER in the client window to shut down the client.

SetupbatchdateiSetup Batch File

Mit der in diesem Beispiel enthaltenen Batchdatei Setup.bat können Sie den Server mit relevanten Zertifikaten zum Ausführen einer selbst gehosteten Anwendung konfigurieren, die serverzertifikatbasierte Sicherheit erfordert.The Setup.bat batch file included with this sample allows you to configure the server with relevant certificates to run a self-hosted application that requires server certificate-based security. Diese Batchdatei muss angepasst werden, wenn sie computerübergreifend oder in einem nicht gehosteten Szenario verwendet werden soll.This batch file must be modified to work across computers or to work in a non-hosted case.

Nachfolgend erhalten Sie einen kurzen Überblick über die verschiedenen Abschnitte der Batchdateien, damit Sie sie so ändern können, dass sie in der entsprechenden Konfiguration ausgeführt werden:The following provides a brief overview of the different sections of the batch files so that they can be modified to run in the appropriate configuration:

  • Erstellen des ServerzertifikatsCreating the server certificate:

    Mit den folgenden Zeilen aus der Batchdatei "Setup.bat" wird das zu verwendende Serverzertifikat erstellt.The following lines from the Setup.bat batch file create the server certificate to be used. Die Variable %SERVER_NAME% gibt den Servernamen an.The %SERVER_NAME% variable specifies the server name. Ändern Sie diese Variable, und geben Sie Ihren eigenen Servernamen an.Change this variable to specify your own server name. Der Standardwert ist localhost.The default value is localhost.

    echo ************  
    echo Server cert setup starting  
    echo %SERVER_NAME%  
    echo ************  
    echo making server cert  
    echo ************  
    makecert.exe -sr LocalMachine -ss MY -a sha1 -n CN=%SERVER_NAME% -sky exchange -pe  
    
  • Installieren des Serverzertifikats in den Clientspeicher für vertrauenswürdige Zertifikate:Installing the server certificate into client's trusted certificate store:

    Mit den folgenden Zeilen in der Batchdatei Setup.bat wird das Serverzertifikat in den Clientspeicher für vertrauenswürdige Personen kopiert.The following lines in the Setup.bat batch file copy the server certificate into the client trusted people store. Dieser Schritt ist erforderlich, da von Makecert.exe generierten Zertifikaten nicht implizit vom Clientsystem vertraut wird.This step is required since certificates generated by Makecert.exe are not implicitly trusted by the client system. Wenn Sie bereits über ein Zertifikat verfügen, dass von einem vertrauenswürdigen Clientstammzertifikat abstammt (z. B. ein von Microsoft ausgegebenes Zertifikat), ist dieser Schritt zum Auffüllen des Clientzertifikatspeichers mit dem Serverzertifikat nicht erforderlich.If you already have a certificate that is rooted in a client trusted root certificate—for example, a Microsoft issued certificate—this step of populating the client certificate store with the server certificate is not required.

    certmgr.exe -add -r LocalMachine -s My -c -n %SERVER_NAME% -r CurrentUser -s TrustedPeople  
    
  • Erstellen des ClientzertifikatsCreating the client certificate:

    Die folgenden Zeilen aus der Batchdatei Setup.bat erstellen das zu verwendende Clientzertifikat.The following lines from the Setup.bat batch file create the client certificate to be used. Die Variable % USER_NAME% gibt den Clientnamen an.The %USER_NAME% variable specifies the client name. Dieser Wert wird auf "test1" festgelegt, da dies der Name ist, nach dem der Clientcode sucht.This value is set to "test1" because this is the name the client code looks for. Wenn Sie den Wert von %USER_NAME% ändern, müssen Sie auch den zugehörigen Wert in der Client.cs-Quelldatei ändern und den Client neu erstellen.If you change the value of %USER_NAME% you must change the corresponding value in the Client.cs source file and rebuild the client.

    Das Zertifikat wird im persönlichen Speicher unterhalb von CurrentUser gespeichert.The certificate is stored in My (Personal) store under the CurrentUser store location.

    echo ************  
    echo Client cert setup starting  
    echo %USER_NAME%  
    echo ************  
    echo making client cert  
    echo ************  
    makecert.exe -sr CurrentUser -ss MY -a sha1 -n CN=%USER_NAME% -sky exchange -pe  
    
  • Installieren des Clientzertifikats in den Serverspeicher für vertrauenswürdige Zertifikate:Installing the client certificate into server's trusted certificate store:

    Die folgenden Zeilen in der Batchdatei Setup.bat kopieren das Clientzertifikat in den Speicher für vertrauenswürdige Personen.The following lines in the Setup.bat batch file copy the client certificate into the trusted people store. Dieser Schritt ist erforderlich, da von "Makecert.exe" generierten Zertifikaten nicht implizit vom Serversystem vertraut wird.This step is required because certificates generated by Makecert.exe are not implicitly trusted by the server system. Wenn Sie bereits über ein Zertifikat verfügen, das von einem vertrauenswürdigen Stammzertifikat abstammt (z. B. ein von Microsoft ausgegebenes Zertifikat), ist dieser Schritt zum Auffüllen des Serverzertifikatspeichers mit dem Clientzertifikat nicht erforderlich.If you already have a certificate that is rooted in a trusted root certificate—for example, a Microsoft issued certificate—this step of populating the server certificate store with the client certificate is not required.

    certmgr.exe -add -r CurrentUser -s My -c -n %USER_NAME% -r LocalMachine -s TrustedPeople  
    

So richten Sie das Beispiel ein und erstellen esTo set up and build the sample

  1. Führen Sie zum Erstellen der Projektmappe die Anweisungen im Erstellen der Windows Communication Foundation-Beispiele.To build the solution, follow the instructions in Building the Windows Communication Foundation Samples.

  2. Um das Beispiel in einer Konfiguration mit einem einzigen Computer oder computerübergreifend auszuführen, befolgen Sie die folgenden Anweisungen.To run the sample in a single- or cross-computerconfiguration, use the following instructions.

So führen Sie das Beispiel auf demselben Computer ausTo run the sample on the same computer

  1. Öffnen Sie eine Visual Studio 2012Visual Studio 2012-Eingabeaufforderung mit Administratorrechten, und führen Sie Setup.bat aus dem Beispielinstallationsordner aus.Run Setup.bat from the sample install folder inside a Visual Studio 2012Visual Studio 2012 command prompt opened with administrator privileges. Hiermit werden alle Zertifikate installiert, die zum Ausführen des Beispiels erforderlich sind.This installs all the certificates required for running the sample.

    Wichtig

    Die Batchdatei Setup.bat ist darauf ausgelegt, an einer Visual Studio 2012Visual Studio 2012-Eingabeaufforderung ausgeführt zu werden.The Setup.bat batch file is designed to be run from a Visual Studio 2012Visual Studio 2012 Command Prompt. Die innerhalb der Visual Studio 2012Visual Studio 2012-Eingabeaufforderung festgelegte PATH-Umgebungsvariable zeigt auf das Verzeichnis mit den ausführbaren Dateien, die für das Skript Setup.bat erforderlich sind.The PATH environment variable set within the Visual Studio 2012Visual Studio 2012 Command Prompt points to the directory that contains executables required by the Setup.bat script.

  2. Starten Sie Service.exe aus dem Ordner \service\bin.Launch Service.exe from service\bin.

  3. Starten Sie Client.exe aus dem Ordner \client\bin.Launch Client.exe from \client\bin. In der Clientkonsolenanwendung wird Clientaktivität angezeigt.Client activity is displayed on the client console application.

  4. Wenn Client und Dienst nicht miteinander kommunizieren können, finden Sie unter Tipps zur Problembehandlung.If the client and service are not able to communicate, see Troubleshooting Tips.

So führen Sie das Beispiel computerübergreifend ausTo run the sample across computers

  1. Erstellen Sie auf dem Dienstcomputer ein Verzeichnis.Create a directory on the service computer.

  2. Kopieren Sie die Dienstprogrammdateien aus \service\bin in das virtuelle Verzeichnis auf dem Dienstcomputer.Copy the service program files from \service\bin to the virtual directory on the service computer. Kopieren Sie außerdem die Dateien Setup.bat, Cleanup.bat, GetComputerName.vbs und ImportClientCert.bat auf den Dienstcomputer.Also copy the Setup.bat, Cleanup.bat, GetComputerName.vbs and ImportClientCert.bat files to the service computer.

  3. Erstellen Sie auf dem Clientcomputer ein Verzeichnis für die Clientbinärdateien.Create a directory on the client computerfor the client binaries.

  4. Kopieren Sie die Clientprogrammdateien in das Clientverzeichnis auf dem Clientcomputer.Copy the client program files to the client directory on the client computer. Kopieren Sie die Dateien Setup.bat, Cleanup.bat und ImportServiceCert.bat ebenfalls auf den Client.Also copy the Setup.bat, Cleanup.bat, and ImportServiceCert.bat files to the client.

  5. Führen Sie auf dem Server setup.bat service an einer Visual Studio-Eingabeaufforderung mit Administratorrechten aus.On the server, run setup.bat service in a Visual Studio command prompt opened with administrator privileges. Ausführen setup.bat mit der service Argument erstellt ein Dienstzertifikat mit dem vollqualifizierten Domänennamen des Computers erstellt und Exporte das Dienstzertifikat in eine Datei "Service.cer" exportiert.Running setup.bat with the service argument creates a service certificate with the fully-qualified domain name of the computerand exports the service certificate to a file named Service.cer.

  6. Bearbeiten Service.exe.config, um den neuen Zertifikatnamen entspricht (in der findValue Attribut in der <ServiceCertificate >) die ist identisch mit den vollqualifizierten Domänennamen des Computers.Edit Service.exe.config to reflect the new certificate name (in the findValue attribute in the <serviceCertificate>) which is the same as the fully-qualified domain name of the computer. Ändern Sie auch den Computernamen in die <Service > /<BaseAddresses >-Element von "localhost" den vollqualifizierten Namen Ihres dienstcomputers.Also change the computer name in the <service>/<baseAddresses> element from localhost to fully qualified name of your service computer.

  7. Kopieren Sie die Datei Service.cer aus dem Dienstverzeichnis in das Clientverzeichnis auf dem Clientcomputer.Copy the Service.cer file from the service directory to the client directory on the client computer.

  8. Führen Sie auf dem Client setup.bat client an einer Visual Studio-Eingabeaufforderung mit Administratorrechten aus.On the client, run setup.bat client in a Visual Studio command prompt opened with administrator privileges. Durch Ausführen von setup.bat mit dem Argument client wird ein Clientzertifikat mit dem Namen client.com erstellt und in die Datei Client.cer exportiert.Running setup.bat with the client argument creates a client certificate named client.com and exports the client certificate to a file named Client.cer.

  9. Ändern Sie in der Datei Client.exe.config auf dem Clientcomputer den Wert für die Adresse des Endpunkts, sodass er mit der neuen Adresse Ihres Diensts übereinstimmt.In the Client.exe.config file on the client computer, change the address value of the endpoint to match the new address of your service. Ersetzen Sie dazu localhost durch den vollqualifizierten Domänennamen des Servers.Do this by replacing localhost with the fully-qualified domain name of the server.

  10. Kopieren Sie die Datei Client.cer aus dem Clientverzeichnis in das Dienstverzeichnis auf dem Server.Copy the Client.cer file from the client directory to the service directory on the server.

  11. Führen Sie auf dem Client ImportServiceCert.bat an einer Visual Studio-Eingabeaufforderung mit Administratorrechten aus.On the client, run ImportServiceCert.bat in a Visual Studio command prompt opened with administrator privileges. Dadurch wird das Dienstzertifikat aus der Datei Service.cer in den Speicher CurrentUser – TrustedPeople importiert.This imports the service certificate from the Service.cer file into the CurrentUser - TrustedPeople store.

  12. Führen Sie auf dem Server ImportClientCert.bat an einer Visual Studio-Eingabeaufforderung mit Administratorrechten aus.On the server, run ImportClientCert.bat in a Visual Studio command prompt opened with administrator privileges. Dadurch wird das Clientzertifikat aus der Datei Client.cer in den Speicher LocalMachine – TrustedPeople importiert.This imports the client certificate from the Client.cer file into the LocalMachine - TrustedPeople store.

  13. Starten Sie auf dem Servercomputer Service.exe in einem Eingabeaufforderungsfenster.On the server computer, launch Service.exe from the command prompt window.

  14. Starten Sie auf dem Clientcomputer Client.exe in einem Eingabeaufforderungsfenster.On the client computer, launch Client.exe from a command prompt window. Wenn Client und Dienst nicht miteinander kommunizieren können, finden Sie unter Tipps zur Problembehandlung.If the client and service are not able to communicate, see Troubleshooting Tips.

So stellen Sie den Zustand vor Ausführung des Beispiels wieder herTo clean up after the sample

  1. Führen Sie Cleanup.bat im Beispielordner aus, nachdem Sie das Beispiel fertig ausgeführt haben.Run Cleanup.bat in the samples folder once you have finished running the sample. Dadurch werden die Server- und Clientzertifikate aus dem Zertifikatspeicher entfernt.This removes the server and client certificates from the certificate store.

Hinweis

Wenn dieses Beispiel computerübergreifend ausgeführt wird, entfernt dieses Skript keine Dienstzertifikate auf einem Client.This script does not remove service certificates on a client when running this sample across computers. Wenn Sie Windows Communication Foundation (WCF)-Beispielen, die Zertifikate computerübergreifend verwenden ausgeführt haben, achten Sie darauf, dass Sie die Dienstzertifikate entfernen, die in den Speicher CurrentUser - trustedpeople installiert wurden.If you have run Windows Communication Foundation (WCF) samples that use certificates across computers, be sure to clear the service certificates that have been installed in the CurrentUser - TrustedPeople store. Verwenden Sie dazu den folgenden Befehl: certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name> Beispiel: certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com.To do this, use the following command: certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name> For example: certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com.

Siehe auchSee Also