HTTP-TransportsicherheitHTTP Transport Security

Bei der Verwendung von HTTP zum Transport wird die Sicherheit durch eine Secure Sockets Layer (SSL)-Implementierung bereitgestellt.When using HTTP as the transport, security is provided by a Secure Sockets Layer (SSL) implementation. SSL wird im Internet häufig verwendet, um einen Dienst gegenüber einem Client zu authentifizieren und anschließend Vertraulichkeit (Verschlüsselung) für den Kanal bereitzustellen.SSL is widely used on the Internet to authenticate a service to a client, and then to provide confidentiality (encryption) to the channel. In diesem Thema wird erläutert, wie SSL funktioniert und wie er in der Windows Communication Foundation (WCF) implementiert ist.This topic explains how SSL works and how it is implemented in Windows Communication Foundation (WCF).

Standard-SSLBasic SSL

Die Funktionsweise von SSL lässt sich am besten durch ein typisches Szenario erläutern, in diesem Fall die Website einer Bank.How SSL works is best explained through a typical scenario, in this case, a bank's Web site. Die Website ermöglicht einem Kunden die Anmeldung mit Benutzernamen und Kennwort.The site allows a customer to log on with a user name and password. Nach der Authentifizierung kann der Benutzer Transaktionen ausführen, z. B. den Kontostand anzeigen, Rechnungen begleichen und Geld auf ein anderes Konto überweisen.After being authenticated, the user can perform transactions, such as view account balances, pay bills, and move money from one account to another.

Wenn ein Benutzer zuerst die Website besucht, startet der SSL-Mechanismus mehrere Aushandlungen, bezeichnet einen Handshake, mit dem Client des Benutzers (in diesem Fall Internet Explorer).When a user first visits the site, the SSL mechanism begins a series of negotiations, called a handshake, with the user's client (in this case, Internet Explorer). SSL authentifiziert zuerst die Website der Bank für den Kunden.SSL first authenticates the bank site to the customer. Dies ist ein wichtiger Schritt, da die Kunden zuerst wissen müssen, ob sie tatsächlich mit der Website kommunizieren und nicht auf einer vorgetäuschte Site ihren Benutzernamen und das Kennwort eingeben sollen.This is an essential step because customers must first know that they are communicating with the actual site, and not a spoof that tries to lure them into typing in their user name and password. SSL führt diese Authentifizierung mit einem von einer vertrauenswürdigen Stelle, z. B. VeriSign, bereitgestellten SSL-Zertifikat durch.SSL does this authentication by using an SSL certificate provided by a trusted authority, such as VeriSign. Die Logik ist wie folgt: VeriSign verbürgt sich für die Identität der Bank-Website.The logic goes like this: VeriSign vouches for the identity of the bank site. Da Internet Explorer VeriSign vertraut, ist die Site vertrauenswürdig.Because Internet Explorer trusts VeriSign, the site is trusted. Wenn Sie Informationen zu VeriSign erhalten möchten, klicken Sie auf das VeriSign-Logo.If you want to check with VeriSign, you can do so as well by clicking on the VeriSign logo. Es wird eine Echtheitserklärung mit Ablaufdatum und Adressat der Ausstellung (die Bank-Website) angezeigt.That presents a statement of authenticity with its expiration date and who it is issued to (the bank site).

Zum Initiieren einer sicheren Sitzung sendet der Client das Äquivalent eines "Hallo" an den Server, zusammen mit einer Liste kryptografischer Algorithmen zum Signieren, Generieren von Hashs sowie zum Verschlüsseln und Entschlüsseln.To initiate a secure session, the client sends the equivalent of a "hello" to the server along with a list of cryptographic algorithms it can use to sign, generate hashes, and encrypt and decrypt with. Als Antwort sendet die Site eine Bestätigung und ihre Wahl einer der Algorithmensuites zurück.In response, the site sends back an acknowledgment and its choice of one of the algorithms suites. Während dieses ersten Handshakes senden und empfangen beide Seiten Nonces.During this initial handshake, both parties send and receive nonces. Ein Nonce ist ein zufällig generierter Teil der Daten, die in Kombination mit dem öffentlichen Schlüssel des Standorts verwendet werden, zum Erstellen eines Hashs.A nonce is a randomly generated piece of data that is used, in combination with the site's public key, to create a hash. Ein Hash ist eine neue Zahl, die von den beiden Zahlen mit einem Standardalgorithmus, z. B. SHA1 abgeleitet ist.A hash is a new number that is derived from the two numbers using a standard algorithm, such as SHA1. (Der Client und die Site tauschen auch Nachrichten aus, um sich auf einen Hashalgorithmus zu einigen.) Der Hash ist eindeutig und wird nur für die Sitzung zwischen dem Client und der Website zum Verschlüsseln und Entschlüsseln von Nachrichten verwendet.(The client and the site also exchange messages to agree which hash algorithm to use.) The hash is unique and is used only for the session between the client and the site to encrypt and decrypt messages. Sowohl der Client als auch die Site verfügen über die ursprüngliche Nonce und den öffentlichen Schlüssel des Zertifikats, sodass beide Seiten den gleichen Hash generieren können.Both client and service have the original nonce and the certificate's public key, so both sides can generate the same hash. Deshalb prüft der Client den vom Dienst gesendeten Hash durch (a) Verwenden des vereinbarten Algorithmus zum Berechnen des Hashs auf Basis der Daten und durch (b) Vergleichen des Hashs mit dem vom Dienst gesendeten Hash. Stimmen die beiden überein, ist sichergestellt, dass der Hash nicht manipuliert wurde.Therefore, the client validates the hash sent by the service by (a) using the agreed upon algorithm to calculate the hash from the data, and (b) comparing it to the hash sent by the service; if the two match, then the client has assurance that the hash has not been tampered with. Der Client kann dann diesen Hash als Schlüssel zum Verschlüsseln einer Nachricht verwenden, die noch einen weiteren neuen Hash enthält.The client can then use this hash as a key to encrypt a message that contains yet another new hash. Der Dienst kann die Nachricht mit dem Hash entschlüsseln und diesen vorletzten Hash wiederherstellen.The service can decrypt the message using the hash, and recover this second-to-final hash. Die gesammelten Informationen (Nonces, öffentlicher Schlüssel und andere Daten) sind jetzt beiden Seiten bekannt, und ein letzter Hash (oder Hauptschlüssel) kann erstellt werden.The accumulated information (nonces, public key, and other data) is now known to both sides, and a final hash (or master key) can be created. Dieser letzte Schlüssel wird verschlüsselt mit dem vorletzten Hash gesendet.This final key is sent encrypted using the next-to-last hash. Der Hauptschlüssel wird anschließend verwendet, um Nachrichten für das Zurücksetzen der Sitzung zu verschlüsseln und zu entschlüsseln.The master key is then used to encrypt and decrypt messages for the reset of the session. Da Client und Dienst den gleichen Schlüssel verwenden, dies wird auch bezeichnet eine Sitzungsschlüssel.Because both client and service use the same key, this is also called a session key.

Der Sitzungsschlüssel wird auch als symmetrischer Schlüssel oder "gemeinsamer geheimer Schlüssel" gekennzeichnet.The session key is also characterized as a symmetric key, or a "shared secret." Ein symmetrischer Schlüssel ist wichtig, das er die von beiden Seiten für die Transaktion erforderliche Berechnung reduziert.Having a symmetric key is important because it reduces the computation required by both sides of the transaction. Wenn jede Nachricht einen neuen Austausch von Nonces und Hashs erfordern würde, würde sich die Leistung verschlechtern.If every message demanded a new exchange of nonces and hashes, performance would deteriorate. Daher ist das wichtigste Ziel von SSL die Verwendung eines symmetrischen Schlüssels, der die freie Übertragung von Nachrichten zwischen den beiden Seiten mit höherer Sicherheit und Effizienz ermöglicht.Therefore, the ultimate goal of SSL is to use a symmetric key that allows messages to flow freely between the two sides with a greater degree of security and efficiency.

Die vorangehende Beschreibung ist eine vereinfachte Version des Ablaufs, da die Protokolle je nach Website variieren können.The previous description is a simplified version of what happens, because the protocol may vary from site to site. Es ist auch möglich, dass sowohl der Client als auch die Site Nonces generieren, die während des Handshakes algorithmisch kombiniert werden, um mehr Komplexität und demzufolge Schutz für den Datenaustausch zu erreichen.It is also possible that both the client and the site both generate nonces that are algorithmically combined during the handshake to add more complexity, and therefore protection, to the process of exchanging data.

Zertifikate und Public Key-InfrastrukturCertificates and Public Key Infrastructure

Während des Handshakes sendet der Dienst auch sein SSL-Zertifikat an den Client.During the handshake, the service also sends its SSL certificate to the client. Das Zertifikat enthält Informationen wie Ablaufdatum, ausstellende Stelle und URI (Uniform Resource Identifier) der Website.The certificate contains information, such as its expiration date, issuing authority, and the site's Uniform Resource Identifier (URI). Der Client vergleicht, ob der URI mit dem ursprünglich kontaktierten URI übereinstimmt, und überprüft auch das Datum und die ausstellende Stelle.The client compares the URI to the URI it had originally contacted to ensure a match, and also checks the date and issuing authority.

Jedes Zertifikat verfügt über zwei Schlüssel, einen privaten Schlüssel und ein öffentlicher Schlüssel ist und die beiden als bekannt sind ein Austauschschlüsselpaar.Every certificate has two keys, a private key and a public key, and the two are known as an exchange key pair. Kurz gesagt ist der private Schlüssel nur dem Besitzer des Zertifikats bekannt, während der öffentliche Schlüssel aus dem Zertifikat gelesen werden kann.In brief, the private key is known only to the owner of the certificate while the public key is readable from the certificate. Jeder der beiden Schlüssel kann zum Verschlüsseln oder Entschlüsseln eines Digests, Hashs oder anderen Schlüssels verwendet werden, jedoch nur als umgekehrte Vorgänge.Either key can be used to encrypt or decrypt a digest, hash, or other key, but only as contrary operations. Wenn z. B. der Client mit dem öffentlichen Schlüssel verschlüsselt, kann nur die Site die Nachricht mit dem privaten Schlüssel entschlüsseln.For example, if the client encrypts with the public key, only the site can decrypt the message using the private key. Analog kann der Client mit dem öffentlichen Schlüssel entschlüsseln, wenn die Site mit dem privaten Schlüssel verschlüsselt.Similarly, if the site encrypts with the private key, the client can decrypt with the public key. Dies gibt dem Client die Gewissheit, dass die Nachrichten nur mit dem Besitzer des privaten Schlüssels ausgetauscht werden, da nur mit dem privaten Schlüssel verschlüsselte Nachrichten mit dem öffentlichen Schlüssel entschlüsselt werden können.This provides assurance to the client that the messages are being exchanged only with the possessor of the private key because only messages encrypted with the private key can be decrypted with the public key. Für die Site wird sichergestellt, dass sie Nachrichten mit einem Client austauscht, der mit dem öffentlichen Schlüssel verschlüsselt hat.The site is assured that it is exchanging messages with a client that has encrypted using the public key. Dieser Austausch ist jedoch nur für einen ersten Handshake sicher, daher wird mehr für das Erstellen des tatsächlichen symmetrischen Schlüssels getan.This exchange is secure only for an initial handshake, however, which is why much more is done to create the actual symmetric key. Alle Kommunikationen hängen trotzdem davon ab, dass der Dienst über ein gültiges SSL-Zertifikat verfügt.Nevertheless, all communications depend on the service having a valid SSL certificate.

Implementieren von SSL mit WCFImplementing SSL with WCF

HTTP-transportsicherheit (oder SSL) wird in WCF extern bereitgestellt.HTTP transport security (or SSL) is provided externally to WCF. Sie können SSL auf zwei Wegen implementieren; der entscheidende Faktor ist, wie die Anwendung gehostet wird:You can implement SSL in one of two ways; the deciding factor is how your application is hosted:

  • Bei Verwendung von Internet Information Services (IIS) als Ihre WCF-Diensthost verwenden Sie die IIS-Infrastruktur, um eine SSL-Dienst einzurichten.If you are using Internet Information Services (IIS) as your WCF host, use the IIS infrastructure to set up an SSL service.

  • Wenn Sie eine selbst gehostete WCF-Anwendung erstellen, können Sie auf die Adresse, die mit dem Tool HttpCfg.exe ein SSL-Zertifikat binden.If you are creating a self-hosted WCF application, you can bind an SSL certificate to the address using the HttpCfg.exe tool.

Verwenden von IIS für TransportsicherheitUsing IIS for Transport Security

IIS 7.0IIS 7.0

Zum Einrichten von IIS 7.0IIS 7.0 als sicheren Host (mit SSL), finden Sie unter IIS 7.0 Beta: Konfigurieren von Secure Sockets Layer in IIS 7.0.To set up IIS 7.0IIS 7.0 as a secure host (using SSL), see IIS 7.0 Beta: Configuring Secure Sockets Layer in IIS 7.0.

So konfigurieren Sie Zertifikate für die Verwendung mit IIS 7.0IIS 7.0, finden Sie unter IIS 7.0 Beta: Konfigurieren von Serverzertifikaten in IIS 7.0.To configure certificates for use with IIS 7.0IIS 7.0, see IIS 7.0 Beta: Configuring Server Certificates in IIS 7.0.

IIS 6.0IIS 6.0

Zum Einrichten von IIS 6.0IIS 6.0 als sicheren Host (mit SSL), finden Sie unter Konfigurieren von Secure Sockets Layer.To set up IIS 6.0IIS 6.0 as a secure host (using SSL), see Configuring Secure Sockets Layer.

So konfigurieren Sie Zertifikate für die Verwendung mit IIS 6.0IIS 6.0, finden Sie unter Certificates_IIS_SP1_Ops.To configure certificates for use with IIS 6.0IIS 6.0, see Certificates_IIS_SP1_Ops.

Verwenden von HttpCfg für SSLUsing HttpCfg for SSL

Wenn Sie eine selbst gehostete WCF-Anwendung erstellen, laden Sie das Tool HttpCfg.exe an die Windows XP Service Pack 2-Supporttools Standort.If you are creating a self-hosted WCF application, download the HttpCfg.exe tool, available at the Windows XP Service Pack 2 Support Tools site.

Weitere Informationen zur Verwendung des Tools "HttpCfg.exe" Einrichten eines Ports mit einem x. 509-Zertifikat finden Sie unter Vorgehensweise: Konfigurieren eines Anschlusses mit einem SSL-Zertifikat.For more information about using the HttpCfg.exe tool to set up a port with an X.509 certificate, see How to: Configure a Port with an SSL Certificate.

Siehe auchSee Also

TransportsicherheitTransport Security
NachrichtensicherheitMessage Security