Beispiel für ErmittlungssicherheitDiscovery Security Sample

Die Discovery-Spezifikation erfordert nicht, dass Endpunkte, die am Suchvorgang beteiligt sind, sicher sein müssen.The Discovery specification does not require that endpoints that participate in the discovery process to be secure. Die Erweiterung der Sicherheit von Suchmeldungen mindert das Risiko für verschiedene Angriffe (Meldungsänderung, Denial of Service, Wiederholung, Spoofing).Enhancing the discovery messages with security mitigates various types of attacks (message alteration, denial of service, replay, spoofing). In diesem Beispiel werden benutzerdefinierte Kanäle implementiert, die Meldungssignaturen mit dem kompakten Signaturformat berechnen und verifizieren. (Dies wird in Abschnitt 8.2 der WS-Discovery-Spezifikation beschrieben.)This sample implements custom channels that compute and verify message signatures using the compact signature format (described in Section 8.2 of the WS-Discovery specification). Das Beispiel unterstützt sowohl die Discovery-Spezifikation von 2005 und Version 1.1.The sample supports both the 2005 Discovery specification and the 1.1 version.

Der benutzerdefinierte Kanal wird an die oberste Stelle des vorhandenen Kanalstapels für Ermittlungs- und Ankündigungsendpunkte gesetzt.The custom channel is applied on top of the existing channel stack for Discovery and Announcement endpoints. Auf diese Weise wird ein Signaturheader für jede gesendete Meldung übernommen.This way, a signature header is applied for every message sent. Die Signatur wird im Hinblick auf empfangene Meldungen überprüft. Wenn die Signatur nicht übereinstimmt oder die Meldungen nicht über eine Signatur verfügen, werden sie verworfen.The signature is verified on received messages and when it does not match or when the messages do not have a signature, the messages are dropped. Im Beispiel werden Zertifikate verwendet, um Meldungen zu signieren und zu überprüfen.To sign and verify messages, the sample uses certificates.

DiskussionDiscussion

WCF ist sehr erweiterbar und gibt Benutzern die Möglichkeit, Kanäle wie gewünscht anzupassen.WCF is very extensible and allows users the possibility to customize channels as desired. Im Beispiel wird ein sicheres Ermittlungsbindungselement implementiert, mit dem sichere Kanäle erstellt werden.The sample implements a discovery secure binding element that builds secure channels. Die sicheren Kanäle wenden Meldungssignaturen an und überprüfen diese. Sie werden an die oberste Stelle des aktuellen Stapels übernommen.The secure channels apply and verify message signatures and are applied on top of the current stack.

Mit dem sicheren Bindungselement werden sichere Kanalfactorys und Kanallistener erstellt.The secure binding element builds secure channel factories and channel listeners.

Sichere KanalfactorySecure Channel Factory

Von der sicheren Kanalfactory werden Ausgabe- oder Duplexkanäle erstellt, mit denen Nachrichtenheadern eine kompakte Signatur hinzugefügt wird.The secure channel factory creates output or duplex channels that add a compact signature to message headers. Damit Meldungen möglichst klein bleiben, wird das kompakte Signaturformat verwendet.To keep messages as small as possible the compact signature format is used. Im folgenden Beispiel wird die Struktur einer kompakten Signatur dargestellt.The structure of a compact signature is shown in the following example.

<d:Security ... >   
  [<d:Sig Scheme="xs:anyURI"   
         [KeyId="xs:base64Binary"]?  
          Refs="..."  
         [PrefixList]="xs:NMTOKENS"   
          Sig="xs:base64Binary"   
          ... />]?  
  ...   
</d:Security>  

Hinweis

Die PrefixList wurde dem Protokoll der Discovery-Version 2008 hinzugefügt.The PrefixList was added in the 2008 Discovery version protocol.

Im Beispiel werden die erweiterten Signaturelemente bestimmt, um die Signatur zu berechnen.To compute the signature, the sample determines the expanded signature items. Wie in der WS-Discovery-Spezifikation gefordert, wird eine XML-Signatur (SignedInfo) mit dem ds-Namespacepräfix erstellt.An XML signature (SignedInfo) is created, using the ds namespace prefix, as required by the WS-Discovery specification. In der Signatur wird auf den Text und auf alle Header in Ermittlungs- und Adressierungsnamespaces verwiesen, damit diese nicht manipuliert werden können.The body and all the headers in discovery and addressing namespaces are referenced in the signature, so they cannot be tampered with. Jedes referenzierte Element wird mit der exklusiven Kanonisierung (http://www.w3.org/2001/10/xml-exc-c14n#) umgewandelt. Danach wird ein SHA-1-Digestwert (http://www.w3.org/2000/09/xmldsig #sha1) berechnet.Each referenced element is transformed using the Exclusive Canonicalization (http://www.w3.org/2001/10/xml-exc-c14n# ), and then an SHA-1 digest value is computed (http://www.w3.org/2000/09/xmldsig#sha1 ). Auf Grundlage aller referenzierten Elemente und den zugehörigen Digestwerten wird der Signaturwert mithilfe des RSA-Algorithmus (http://www.w3.org/2000/09/xmldsig #rsa-sha1) berechnet.Based on all referenced elements and their digest values, the signature value is computed using the RSA algorithm (http://www.w3.org/2000/09/xmldsig#rsa-sha1 ).

Die Meldungen werden mit einem vom Client angegebenen Zertifikat signiert.The messages are signed with a client-specified certificate. Bei der Erstellung des Bindungselements müssen Speicherort, Name und Zertifikatantragstellername angegeben werden.The store location, name and the certificate subject name must be specified when the binding element is created. Die KeyId in der kompakten Signatur stellt den Schlüsselbezeichner des Signaturtokens dar und ist die Schlüsselkennung des Antragstellers (SKI) des Signaturtokens oder, wenn der SKI nicht vorhanden ist, ein SHA-1-Hash des öffentlichen Schlüssels des Signaturtokens.The KeyId in the compact signature represents the key identifier of the signing token and is the Subject Key Identifier (SKI) of the signing token or (if the SKI does not exist) a SHA-1 hash of the public key of the signing token.

Sicherer KanallistenerSecure Channel Listener

Der sichere Kanallistener erstellt Eingabe- oder Duplexkanäle, die die kompakte Signatur in empfangenen Meldungen überprüfen.The secure channel listener creates input or duplex channels that verify the compact signature in received messages. Um die Signatur zu überprüfen, wird die KeyId verwendet, die in der an die Meldung angefügten kompakten Signatur angegeben ist, um ein Zertifikat aus dem angegebenen Speicher auszuwählen.To verify the signature, the KeyId specified in the compact signature attached to the message is used to select a certificate from the specified store. Wenn die Meldung über keine Signatur verfügt oder die Signaturüberprüfung nicht erfolgreich ist, werden die Meldungen verworfen.If the message does not have a signature or the signature check fails, the messages are dropped. Im Beispiel wird zur Verwendung der sicheren Bindung eine Factory definiert, mit der benutzerdefinierte UdpDiscoveryEndpoint und UdpAnnouncementEndpoint mit dem zusätzlichen sicheren Ermittlungsbindungselement erstellt werden.To use the secure binding, the sample defines a factory that creates custom UdpDiscoveryEndpoint and UdpAnnouncementEndpoint with the added discovery secure binding element. Diese sicheren Endpunkte können in Discovery-Ankündigungslistenern und erkennbaren Diensten verwendet werden.These secure endpoints can be used in discovery announcement listeners and discoverable services.

BeispieldetailsSample Details

Das Beispiel enthält eine Bibliothek und 4 Konsolenanwendungen:The sample includes a library and 4 console applications:

  • DiscoverySecurityChannels: eine Bibliothek, die die sichere Bindung verfügbar macht.DiscoverySecurityChannels: A library that exposes the secure binding. Die Bibliothek berechnet und überprüft die kompakte Signatur für ausgehende/eingehende Meldungen.The library computes and verifies the compact signature for outgoing/incoming messages.

  • Dienst: Verfügbarmachen von ICalculatorService-Vertrag Dienst selbst gehostet.Service: A service exposing ICalculatorService contract, self hosted. Der Dienst wird als erkennbar markiert.The service is marked as Discoverable. Der Benutzer gibt die Details des Zertifikats an, mit dem Meldungen signiert werden. Dazu werden Speicherort, Name und Antragsstellername oder andere eindeutige Bezeichner für das Zertifikat sowie der Speicher, in dem sich die Clientzertifikate befinden, angegeben. (Clientzertifikate sind Zertifikate, mit denen die Signatur auf eingehende Meldungen überprüft werden.)The user specifies the details of the certificate used to sign messages by specifying the store location and name and the subject name or other unique identifier for the certificate, and the store where the client certificates are located (the certificates used to check signature for incoming messages). Auf Grundlage dieser Details wird ein UdpDiscoveryEndpoint mit zusätzlicher Sicherheit erstellt und verwendet.Based on these details, a UdpDiscoveryEndpoint with added security is built and used.

  • Client: Diese Klasse versucht, einen ICalculatorService zu ermitteln und Methoden für den Dienst aufzurufen.Client: This class tries to discover an ICalculatorService and to call methods on the service. Es wird ein UdpDiscoveryEndpoint mit erweiterter Sicherheit erstellt, mit dem die Meldungen signiert und überprüft werden.Again, a UdpDiscoveryEndpoint with added security is built and used to sign and verify the messages.

  • AnnouncementListener: ein selbst gehosteter Dienst, der für Online- und offlineankündigungen lauscht und den sicheren ankündigungsendpunkt verwendet.AnnouncementListener: A self-hosted service that listens for online and offline announcements and uses the secure announcement endpoint.

Hinweis

Wenn Setup.bat mehrmals ausgeführt wird, werden Sie vom Zertifikat-Manager dazu aufgefordert, ein Zertifikat auszuwählen, das hinzugefügt werden soll, da es doppelte Zertifikate gibt.If Setup.bat is run multiple times, the certificate manager prompts you for choosing a certificate to add, as there are duplicate certificates. In diesem Fall muss Setup.bat abgebrochen und Cleanup.bat aufgerufen werden, da die Duplikate bereits erstellt wurden.In that case, Setup.bat should be aborted and Cleanup.bat should be called, because the duplicates have already been created. Sie werden außerdem von Cleanup.bat dazu aufgefordert, ein Zertifikat auszuwählen, das gelöscht werden soll.Cleanup.bat also prompts you to choose a certificate to delete. Wählen Sie ein Zertifikat aus der Liste aus, und führen Sie weiterhin Cleanup.bat aus, bis keine Zertifikate mehr verbleiben.Select a certificate from the list and continue executing Cleanup.bat until no certificates are remaining.

So verwenden Sie dieses BeispielTo use this sample

  1. Führen Sie das Skript Setup.bat über eine Visual Studio-Eingabeaufforderung aus.Execute the Setup.bat script from a Visual Studio command prompt. Im diesem Beispiel werden Zertifikate verwendet, um Meldungen zu signieren und zu überprüfen.The sample uses certificates to sign and verify messages. Das Skript erstellt die Zertifikate mit Makecert.exe und installiert sie dann mit Certmgr.exe.The script creates the certificates using Makecert.exe and then installs them using Certmgr.exe. Das Skript muss mit Administratorberechtigungen ausgeführt werden.The script must be run with administrator privileges.

  2. Klicken Sie zum Erstellen und Ausführen des Beispiels, öffnen Sie die Datei Security.sln in Visual Studio, und wählen Sie Rebuild All.To build and run the sample, open the Security.sln file in Visual Studio and choose Rebuild All. Aktualisieren Sie die Projektmappeneigenschaften, um mehrere Projekte zu starten: Wählen Sie starten für alle Projekte außer DiscoverySecureChannels.Update the solution properties to start multiple projects: select Start for all projects except DiscoverySecureChannels. Führen Sie die Projektmappe wie gewohnt aus.Run the solution normally.

  3. Nachdem Sie das Beispiel abgeschlossen haben, führen Sie das Skript Cleanup.bat aus. Damit werden alle für dieses Beispiel erstellten Zertifikate entfernt.After you are done with the sample, execute the Cleanup.bat script that removes the certificates created for this sample.

Wichtig

Die Beispiele sind möglicherweise bereits auf dem Computer installiert.The samples may already be installed on your machine. Suchen Sie nach dem folgenden Verzeichnis (Standardverzeichnis), bevor Sie fortfahren.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Wenn dieses Verzeichnis nicht vorhanden ist, rufen Sie Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 auf, um alle Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) - und WFWF -Beispiele herunterzuladen.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) and WFWF samples. Dieses Beispiel befindet sich im folgenden Verzeichnis.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WCF\Scenario\DiscoveryScenario

Siehe auchSee Also