Vorgehensweise: Konfigurieren eines Anschlusses mit einem SSL-ZertifikatHow to: Configure a Port with an SSL Certificate

Beim Erstellen eines selbst gehosteten Diensts für Windows Communication Foundation (WCF) mit der WSHttpBinding Klasse, die transportsicherheit verwendet, müssen Sie auch einen Port konfigurieren, mit einem x. 509-Zertifikat.When creating a self-hosted Windows Communication Foundation (WCF) service with the WSHttpBinding class that uses transport security, you must also configure a port with an X.509 certificate. Wenn Sie keinen selbst gehosteten Dienst erstellen, können Sie Ihren Dienst auch über Internetinformationsdienste (IIS) hosten.If you are not creating a self-hosted service, you can host your service on Internet Information Services (IIS). Weitere Informationen finden Sie unter HTTP-Transportsicherheit.For more information, see HTTP Transport Security.

Welches Tool zum Konfigurieren eines Anschlusses verwendet wird, hängt vom Betriebssystem des Computers ab.To configure a port, the tool you use depends on the operating system that is running on your machine.

Verwenden Sie unter Windows Server 2003Windows Server 2003 oder Windows XPWindows XP das HttpCfg.exe-Tool.If you are running Windows Server 2003Windows Server 2003 or Windows XPWindows XP, use the HttpCfg.exe tool. Unter Windows Server 2003Windows Server 2003 ist dieses Tool bereits installiert.With Windows Server 2003Windows Server 2003 this tool is installed. Mit Windows XPWindows XP, Sie können das Tool herunterladen Windows XP Service Pack 2-Supporttools.With Windows XPWindows XP, you can download the tool at Windows XP Service Pack 2 Support Tools. Weitere Informationen finden Sie unter Httpcfg-Übersicht.For more information, see Httpcfg Overview. Die Dokumentation der Windows-Supporttools erklärt die Syntax der Tools "Httpcfg.exe".The Windows Support Tools documentation explains the syntax for the Httpcfg.exe tool.

Verwenden Sie unter Windows VistaWindows Vista das bereits installierte Tool Netsh.exe.If you are running Windows VistaWindows Vista, use the Netsh.exe tool that is already installed.

In diesem Thema wird die Ausführung einer Reihe von Prozeduren beschrieben:This topic describes how to accomplish several procedures:

  • Bestimmen der aktuellen Anschlusskonfiguration eines ComputersDetermining a computer's current port configuration.

  • Abrufen des Fingerabdrucks eines Zertifikats (notwendig für die beiden anschließenden Prozeduren)Getting a certificate's thumbprint (necessary for the following two procedures).

  • Binden eines SSL-Zertifikats an eine AnschlusskonfigurationBinding an SSL certificate to a port configuration.

  • Binden eines SSL-Zertifikats an eine Anschlusskonfiguration und Unterstützen von ClientzertifikatenBinding an SSL certificate to a port configuration and supporting client certificates.

  • Löschen eines SSL-Zertifikats aus einer AnschlussnummerDeleting an SSL certificate from a port number.

Zum Ändern der auf dem Computer gespeicherten Zertifikate sind Administratorrechte erforderlich.Note that modifying certificates stored on the computer requires administrative privileges.

So ermitteln Sie, wie Anschlüsse konfiguriert sindTo determine how ports are configured

  1. In Windows Server 2003Windows Server 2003 oder Windows XPWindows XP, verwenden Sie die Tools "HttpCfg.exe" zum Anzeigen der aktuellen Portkonfiguration mithilfe der Abfrage und Ssl gewechselt wird, wie im folgenden Beispiel gezeigt.In Windows Server 2003Windows Server 2003 or Windows XPWindows XP, use the HttpCfg.exe tool to view the current port configuration, using the query and ssl switches, as shown in the following example.

    httpcfg query ssl  
    
  2. Verwenden Sie zum Anzeigen der aktuellen Anschlusskonfiguration unter Windows VistaWindows Vista das Netsh.exe-Tool, wie im folgenden Beispiel gezeigt:In Windows VistaWindows Vista, use the Netsh.exe tool to view the current port configuration, as shown in the following example.

    netsh http show sslcert  
    

So rufen Sie den Fingerabdruck eines Zertifikats abTo get a certificate's thumbprint

  1. Verwenden Sie das Zertifikats-MMC-Snap-In, um nach einem X.509-Zertifikat zu suchen, das eine bestimmte Clientauthentifizierungsfunktion aufweist.Use the Certificates MMC snap-in to find an X.509 certificate that has an intended purpose of client authentication. Weitere Informationen finden Sie unter Vorgehensweise: Anzeigen von Zertifikaten mit dem MMC-Snap-in.For more information, see How to: View Certificates with the MMC Snap-in.

  2. Greifen Sie auf den Fingerabdruck des Zertifikats zu.Access the certificate's thumbprint. Weitere Informationen finden Sie unter wie: Abrufen des Fingerabdrucks eines Zertifikats.For more information, see How to: Retrieve the Thumbprint of a Certificate.

  3. Kopieren Sie den Fingerabdruck des Zertifikats in einen Texteditor, beispielsweise den Windows-Editor.Copy the thumbprint of the certificate into a text editor, such as Notepad.

  4. Entfernen Sie alle Leerstellen zwischen den Hexadezimalzeichen.Remove all spaces between the hexadecimal characters. Eine Möglichkeit besteht darin, die Suchen/Ersetzen-Funktion des Editors zu nutzen, um jede Leerstelle durch ein NULL-Zeichen zu ersetzen.One way to accomplish this is to use the text editor's find-and-replace feature and replace each space with a null character.

So binden Sie ein SSL-Zertifikat an eine AnschlussnummerTo bind an SSL certificate to a port number

  1. Verwenden Sie unter Windows Server 2003Windows Server 2003 oder unter Windows XPWindows XP das Tool-HttpCfg.exe im Secure Sockets Layer (SSL)-Speicher im Modus "Set", um das Zertifikat an eine Anschlussnummer zu binden.In Windows Server 2003Windows Server 2003 or Windows XPWindows XP, use the HttpCfg.exe tool in "set" mode on the Secure Sockets Layer (SSL) store to bind the certificate to a port number. Das Tool verwendet den Fingerabdruck, um das Zertifikat zu identifizieren, wie im folgenden Beispiel gezeigt.The tool uses the thumbprint to identify the certificate, as shown in the following example.

    httpcfg set ssl -i 0.0.0.0:8012 -h 0000000000003ed9cd0c315bbb6dc1c08da5e6  
    
    • Die -i Switch verfügt über die Syntax der IP:port und weist das Tool, um das Zertifikat auf den Anschluss 8012 des Computers festzulegen.The -i switch has the syntax of IP:port and instructs the tool to set the certificate to port 8012 of the computer. Optional können Sie die vier Nullen vor der Nummer auch durch die tatsächliche IP-Adresse des Computers ersetzen.Optionally, the four zeroes that precede the number can also be replaced by the actual IP address of the computer.

    • Die -h Switch gibt den Fingerabdruck des Zertifikats.The -h switch specifies the thumbprint of the certificate.

  2. Verwenden Sie unter Windows VistaWindows Vista das Netsh.exe-Tool, wie im folgenden Beispiel gezeigt:In Windows VistaWindows Vista, use the Netsh.exe tool, as shown in the following example.

    netsh http add sslcert ipport=0.0.0.0:8000 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid={00112233-4455-6677-8899-AABBCCDDEEFF}   
    
    • Die "CertHash" Parameter gibt den Fingerabdruck des Zertifikats.The certhash parameter specifies the thumbprint of the certificate.

    • Die IP-Port lautet Parameter gibt die IP-Adresse und den Port an, und wie funktioniert die -i -Schalter des Tools "Httpcfg.exe" beschrieben.The ipport parameter specifies the IP address and port, and functions just like the -i switch of the Httpcfg.exe tool described.

    • Die Appid Parameter ist eine GUID, die mit die besitzende Anwendung identifiziert werden kann.The appid parameter is a GUID that can be used to identify the owning application.

So binden Sie ein SSL-Zertifikat an eine Anschlussnummer und unterstützen ClientzertifikateTo bind an SSL certificate to a port number and support client certificates

  1. Führen Sie zum Unterstützen von Clients, die die Authentifizierung mithilfe von X.509-Zertifikaten auf der Transportebene durchführen, unter Windows Server 2003Windows Server 2003 oder Windows XPWindows XP die obige Prozedur aus, übergeben Sie jedoch einen zusätzlichen Befehlszeilenparameter an HttpCfg.exe, wie im folgenden Beispiel gezeigt:In Windows Server 2003Windows Server 2003 or Windows XPWindows XP, to support clients that authenticate with X.509 certificates at the transport layer, follow the preceding procedure but pass an additional command-line parameter to HttpCfg.exe, as shown in the following example.

    httpcfg set ssl -i 0.0.0.0:8012 -h 0000000000003ed9cd0c315bbb6dc1c08da5e6 -f 2  
    

    Die -f Switch verfügt über die Syntax der n wobei n eine Zahl zwischen 1 und 7 ist.The -f switch has the syntax of n where n is a number between 1 and 7. Bei dem Wert "2" (wie im vorherigen Beispiel gezeigt) sind Clientzertifikate auf der Transportebene aktiviert.A value of 2, as shown in the preceding example, enables client certificates at the transport layer. Der Wert "3" aktiviert Clientzertifikate und ordnet die Zertifikate einem Windows-Konto zu.A value of 3 enables client certificates and maps those certificates to a Windows account. Das Verhalten bei anderen Werten finden Sie in der Hilfe zu HttpCfg.exe.See HttpCfg.exe Help for the behavior of other values.

  2. Führen Sie zum Unterstützen von Clients, die die Authentifizierung mithilfe von X.509-Zertifikaten auf der Transportebene durchführen, unter Windows VistaWindows Vista die obige Prozedur aus, verwenden Sie jedoch einen zusätzlichen Parameter, wie im folgenden Beispiel gezeigt:In Windows VistaWindows Vista, to support clients that authenticate with X.509 certificates at the transport layer, follow the preceding procedure, but with an additional parameter, as shown in the following example.

    netsh http add sslcert ipport=0.0.0.0:8000 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid={00112233-4455-6677-8899-AABBCCDDEEFF} clientcertnegotiation=enable  
    

So löschen Sie ein SSL-Zertifikat aus einer AnschlussnummerTo delete an SSL certificate from a port number

  1. Verwenden Sie das HttpCfg.exe- oder das Netsh.exe-Tool, um die Anschlüsse und Fingerabdrücke aller Bindungen auf dem Computer anzuzeigen.Use the HttpCfg.exe or Netsh.exe tool to see the ports and thumbprints of all bindings on the computer. Verwenden Sie das Umleitungszeichen ">", um die Informationen auf den Datenträger auszugeben, wie im folgenden Beispiel gezeigt:To print the information to disk, use the redirection character ">", as shown in the following example.

    httpcfg query ssl>myMachinePorts.txt  
    
  2. In Windows Server 2003Windows Server 2003 oder Windows XPWindows XP, verwenden Sie die Tools "HttpCfg.exe" mit der löschen und Ssl Schlüsselwörter.In Windows Server 2003Windows Server 2003 or Windows XPWindows XP, use the HttpCfg.exe tool with the delete and ssl keywords. Verwenden der -i Switch an, die IP:port Anzahl, und die -h Switch den Fingerabdruck angegeben.Use the -i switch to specify the IP:port number, and the -h switch to specify the thumbprint.

    httpcfg delete ssl -i 0.0.0.0:8005 -h 0000000000003ed9cd0c315bbb6dc1c08da5e6  
    
  3. Verwenden Sie unter Windows VistaWindows Vista das Netsh.exe-Tool, wie im folgenden Beispiel gezeigt:In Windows VistaWindows Vista, use the Netsh.exe tool, as shown in the following example.

    Netsh http delete sslcert ipport=0.0.0.0:8005  
    

BeispielExample

Der folgende Code zeigt, wie Sie einen selbst gehosteten Dienst erstellen, indem Sie die auf die Transportsicherheit festgelegte WSHttpBinding-Klasse verwenden.The following code shows how to create a self-hosted service using the WSHttpBinding class set to transport security. Geben Sie beim Erstellen einer Anwendung die Anschlussnummer in der Adresse an.When creating an application, specify the port number in the address.

// This string uses a function to prepend the computer name at run time.
string addressHttp = String.Format(
    "http://{0}:8080/Calculator",
    System.Net.Dns.GetHostEntry("").HostName);

WSHttpBinding b = new WSHttpBinding();
b.Security.Mode = SecurityMode.Transport;
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;

// You must create an array of URI objects to have a base address.
Uri a = new Uri(addressHttp);
Uri[] baseAddresses = new Uri[] { a };

// Create the ServiceHost. The service type (Calculator) is not
// shown here.
ServiceHost sh = new ServiceHost(typeof(Calculator), baseAddresses);

// Add an endpoint to the service. Insert the thumbprint of an X.509 
// certificate found on your computer. 
Type c = typeof(ICalculator);
sh.AddServiceEndpoint(c, b, "MyCalculator");
sh.Credentials.ServiceCertificate.SetCertificate(
    StoreLocation.LocalMachine,
    StoreName.My,
    X509FindType.FindBySubjectName,
    "contoso.com");

// This next line is optional. It specifies that the client's certificate
// does not have to be issued by a trusted authority, but can be issued
// by a peer if it is in the Trusted People store. Do not use this setting
// for production code. The default is PeerTrust, which specifies that 
// the certificate must originate from a trusted certifiate authority.

// sh.Credentials.ClientCertificate.Authentication.CertificateValidationMode =
// X509CertificateValidationMode.PeerOrChainTrust;
try
{
    sh.Open();

    string address = sh.Description.Endpoints[0].ListenUri.AbsoluteUri;
    Console.WriteLine("Listening @ {0}", address);
    Console.WriteLine("Press enter to close the service");
    Console.ReadLine();
    sh.Close();
}
catch (CommunicationException ce)
{
    Console.WriteLine("A commmunication error occurred: {0}", ce.Message);
    Console.WriteLine();
}
catch (System.Exception exc)
{
    Console.WriteLine("An unforseen error occurred: {0}", exc.Message);
    Console.ReadLine();
}
' This string uses a function to prepend the computer name at run time.
Dim addressHttp As String = String.Format("http://{0}:8080/Calculator", _
System.Net.Dns.GetHostEntry("").HostName)

Dim b As New WSHttpBinding()
b.Security.Mode = SecurityMode.Transport
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate

' You must create an array of URI objects to have a base address.
Dim a As New Uri(addressHttp)
Dim baseAddresses() As Uri = {a}

' Create the ServiceHost. The service type (Calculator) is not
' shown here.
Dim sh As New ServiceHost(GetType(Calculator), baseAddresses)

' Add an endpoint to the service. Insert the thumbprint of an X.509 
' certificate found on your computer. 
Dim c As Type = GetType(ICalculator)
sh.AddServiceEndpoint(c, b, "MyCalculator")
sh.Credentials.ServiceCertificate.SetCertificate( _
                StoreLocation.LocalMachine, _
                StoreName.My, _
                X509FindType.FindBySubjectName, _
                "contoso.com")

' This next line is optional. It specifies that the client's certificate
' does not have to be issued by a trusted authority, but can be issued
' by a peer if it is in the Trusted People store. Do not use this setting
' for production code. The default is PeerTrust, which specifies that 
' the certificate must originate from a trusted certifiate authority.
' sh.Credentials.ClientCertificate.Authentication.CertificateValidationMode =
' X509CertificateValidationMode.PeerOrChainTrust
Try
    sh.Open()

    Dim address As String = sh.Description.Endpoints(0).ListenUri.AbsoluteUri
    Console.WriteLine("Listening @ {0}", address)
    Console.WriteLine("Press enter to close the service")
    Console.ReadLine()
    sh.Close()
Catch ce As CommunicationException
    Console.WriteLine("A commmunication error occurred: {0}", ce.Message)
    Console.WriteLine()
Catch exc As System.Exception
    Console.WriteLine("An unforseen error occurred: {0}", exc.Message)
    Console.ReadLine()
End Try

Siehe auchSee Also

HTTP-TransportsicherheitHTTP Transport Security