Benutzerdefinierte Peerkanal-Authentifizierung
Dieses Beispiel zeigt die Verwendung der NetPeerTcpBinding-Bindung mit benutzerdefiniertem Authentifizierungsmodus, die Mehrparteienkommunikation mittels von der Anwendung bereitgestellter Peerauthentifizierung bietet. Dieses Beispiel ist eine Variante vom Beispiel 'Erste Schritte'. Unter Beispiel 'Erste Schritte' finden Sie eine Übersicht über Windows Communication Foundation (WCF).
In diesem Beispiel sind alle Instanzen selbst gehostete Konsolenanwendungen, ein Client/Server-Konzept gibt es nicht.
Anders als bei den anderen Transportbindungsbeispielen wird in diesem Beispiel die IChat
-Vertragsschnittstelle verwendet, um Mehrparteienkommunikation zu veranschaulichen. Alle Instanzen implementieren diesen Vertrag, um Nachrichten zu empfangen, und erstellen Proxys desselben Vertrags, um Nachrichten zum Netz zu senden. Dies wird durch Erstellen eines Duplexkanals zum Netz veranschaulicht.
Tipp
Die Setupprozedur und die Buildanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.
Peerkanal ist eine Mehrparteien-, P2P-Kommunikationstechnologie (Peer-to-Peer) in WCF. Er stellt einen sicheren und skalierbaren nachrichtenbasierten P2P-Kommunikationschannel für Anwendungsentwickler bereit. Ein allgemeines Beispiel einer Mehrparteienanwendung, die vom Peerkanal profitieren kann, sind gemeinschaftliche Anwendungen, wie beispielsweise Chat, wo eine Gruppe von Benutzern direkt miteinander kommunizieren kann, ohne dass Server erforderlich sind. Peerkanal ermöglicht sowohl Consumer- als auch Unternehmensszenarios bei P2P-Zusammenarbeit, Inhaltsverteilung, Lastenausgleich und verteilter Verarbeitung.
Bei Peerkanal gibt es die folgenden neuen Begriffe:
Ein Netz ist eine benannte Auflistung (ein verbundenes Diagramm) von Peerknoten, die untereinander kommunizieren können und durch eine eindeutige Mesh-ID gekennzeichnet sind.
Tipp
Aktive Knoten im Netz veröffentlichen ihren Netznamen, so dass andere sie suchen können. Ein Netz besitzt die folgenden Merkmale: Es passt sich automatisch an, wenn Knoten dem Netz beitreten oder es verlassen, und stellt so sicher, dass alle Knoten eine gute Konnektivität zum Netz besitzen und die Verbindungen gemäß der aktuellen Datenverkehrsmuster dynamisch optimiert werden.
Ein Peerknoten ist ein Endpunkt in einem Netz. Eine Anwendung kann auch über mehrere Peerknoten verfügen, die an anderen Netzen teilnehmen.
Ein Peerresolver dient zum Auflösen einer Netz-ID in die Endpunktadressen einiger Knoten im Netz. Ein Peerknoten verwendet diese Adressen, um Verbindungen zu anderen Knoten im Netz herzustellen. Dies ermöglicht, dass Nachrichten über das Netz weitergegeben werden können.
PeerTransportCredentialType gibt an, wie Peers im Netz gegenseitig authentifiziert werden. Diese Eigenschaft kann entweder in den Bindungsinformationen, im NetPeerTcpBinding-Objekt oder mithilfe des PeerTransportBindingElements angegeben werden. Je nach der Verwendung muss der Verhaltensauflistung in der Kanalfactory oder dem Diensthost eine ClientCredentialSettings-Instanz (oder ServiceCredentialSettings-Instanz) mit entsprechenden, in der Peer-Eigenschaft angegebenen Anmeldeinformationen hinzugefügt werden.
Peerkanal unterstützt die folgenden Authentifizierungsmodi in der PeerTransportCredentialType-Klasse:
- Password. Dies ist der Standardauthentifizierungsmodus für Peerkanal. In diesem Modus wird von allen Teilnehmern im Netz erwartet, ein geheimes Kennwort zu kennen. Dies wird realisiert, indem zwischen Nachbarn eine sichere Verbindung hergestellt und eine Transformation dieses Kennworts ausgetauscht wird. Wenn Password angegeben ist, muss die ClientCredentialSettings.Peer-Eigenschaft ein gültiges Kennwort und optional eine X509Certificate2-Instanz (mithilfe von SetSelfCertificate) enthalten.
- Certificate. In diesem Modus wird beim Herstellen von Peerverbindungen eine anwendungsspezifische Authentifizierung ausgeführt. Wenn dieser Modus angegeben ist, müssen Anwendungen eine konkrete Implementierung von X509Certificate2Validator in ClientCredentialSettings.Peer.PeerAuthentication angeben, die der Kanalfactory hinzugefügt wird.
Die Bindung wird in der Konfigurationsdatei des Clients angegeben. Der Bindungstyp wird im binding
-Attribut des Endpunktelements angegeben (siehe folgendes Beispiel).
<client>
<!-- chat instance participating in the mesh -->
<endpoint name="ChatEndpoint"
address="net.p2p://SecurechatMesh/servicemodelsamples/chat"
binding="netPeerTcpBinding"
bindingConfiguration="MyBinding"
contract="Microsoft.ServiceModel.Samples.IChat">
</endpoint>
</client>
Wenn Sie die NetPeerTcpBinding-Bindung mit dem Standardverhalten verwenden, ist kennwortbasierte Sicherheit aktiviert. Das binding
-Element enthält Attribute zum Festlegen des Ports, der zu überwachenden IP-Adresse, des Resolvertyps, der maximalen Größe von Nachrichten, der maximalen Größe des Pufferpools, von Readerkontingenten, des Authentifizierungsmodus, von Nachrichtenauthentifizierung und von Timeoutwerten (für Schließ-, Öffnungs-, Sende- und Empfangsvorgänge).
Tipp
In diesem Beispiel wird der Standardpeerresolver (PNRP) verwendet, der in Windows Server 2003 nicht verfügbar ist. Daher müssen Sie zum Ausführen dieses Beispiels unter Windows Server 2003 einen benutzerdefinierten Peerresolver verwenden. Ein Beispiel, in dem ein benutzerdefinierter Peerresolver verwendet wird, finden Sie unter Peerkanalchat, zum Beispiel:
<netPeerTcpBinding>
<binding configurationName="Binding1">
<resolver mode="Custom">
<customResolver type=
"MyAppNameSpace.MyCustomPeerResolver, myApp"/>
</resolver>
</binding>
</netPeerTcpBinding>
Die Datei, die MyCustomPeerResolver
enthält, muss mit den Chatinstanzen kompiliert werden. Beachten Sie, dass, wenn dieses Beispiel auf mehreren Computern mit unterschiedlichen Plattformen ausgeführt wird, alle denselben Resolver verwenden müssen.
Dieses Beispiel zeigt auch, wie der Peerknoten abgerufen wird, der der Empfänger- oder Senderinstanz zugeordnet ist, und wie die Registrierung für dessen Online- und Offlineereignisse erfolgt. Ein Onlineereignis wird ausgelöst, wenn der Peerknoten mit mindestens einem anderen im Netz befindlichen Peerknoten verbunden wird. Ein Offlineereignis wird ausgelöst, wenn der Peerknoten mit keinem anderen im Netz befindlichen Peerknoten mehr verbunden ist.
Zu diesem Zeitpunkt ist der Peerkanal nicht in das ServiceModel Metadata Utility Tool (Svcutil.exe) integriert.
Beim Ausführen des Beispiels wird die Nachricht angezeigt, dass es bereit ist, Nachrichten zu senden. Von einem Client gesendete Nachrichten werden in den Konsolenfenstern aller anderen demselben Netz beigetretenen Clients angezeigt. Drücken Sie zum Beenden des Clients die Q-Taste und dann die EINGABETASTE in den Konsolenfenstern eines Clients.
Wenn Sie Ablaufverfolgung oder Nachrichtenprotokollierung aktivieren, können Sie die Nachrichtenaktivität auf einer tieferen Ebene überwachen. Die folgenden Verfahren beschreiben, wie Ablaufverfolgung und Nachrichtenprotokollierung aktiviert werden.
Tipp
Beachten Sie dabei unbedingt, dass derzeit nicht alle möglichen Ausnahmen, die die Infrastruktur unter Umständen auslöst, vom Beispiel verarbeitet werden. Wenn Sie diese Beispiele in einer kommerziellen oder Produktionsumgebung verwenden, folgen Sie bitte den bewährten Methoden zur korrekten Ausnahmebehandlung.
So richten Sie das Beispiel ein, erstellen es und führen es aus
Stellen Sie sicher, dass Sie Beispiele zum einmaligen Setupverfahren für Windows Communication Foundation ausgeführt haben.
Zum Erstellen der C#- oder Visual Basic .NET-Version der Lösung folgen Sie den in Erstellen der Windows Communication Foundation-Beispiele aufgeführten Anweisungen.
Wenn Sie das Beispiel in einer Konfiguration mit einem einzigen Computer ausführen möchten, folgen Sie den in Durchführen der Windows Communication Foundation-Beispiele aufgeführten Anweisungen.
So installieren Sie PNRP unter Windows XP SP2 (einmaliges Setup):
- Doppelklicken Sie in der Systemsteuerung auf Software.
- Klicken Sie im Dialogfeld Software auf Windows-Komponenten hinzufügen/entfernen.
- Aktivieren Sie im Assistent für Windows-Komponenten das Kontrollkästchen "Netzwerkdienste", und klicken Sie auf "Details".
- Aktivieren Sie das Kontrollkästchen "Peer-zu-Peer", und klicken Sie auf "OK".
- Klicken Sie im Dialogfeld Assistent für Windows-Komponenten auf "Weiter".
- Klicken Sie auf "Fertig stellen", wenn die Installation abgeschlossen ist.
- Starten Sie den PNRP-Dienst in einer Eingabeaufforderung mit dem folgenden Befehl:
net start pnrpsvc
.
Wenn in diesem Beispiel in Schritt 3 von Client und Dienst die Rede ist, sind damit separate Instanzen der Anwendung gemeint.
Beim ersten Ausführen dieses Beispiels auf einem Computer müssen Sie die Setup.bat ausführen, um ein Zertifikat zu erstellen, das Zertifizierungsstellen und zwei Clientzertifikate ausstellt. Der Standardname für die ausstellende Stelle ist "TrustedPeerChannelIssuer" und für die Clientzertifikate "peer1" und "peer2". Optional können Namen auch angegeben werden, indem auf die folgende Weise Argumente an die Setup.bat übergeben werden: "setup.bat <Peername> <Ausstellername>", wobei <Peername> ein Präfixname des Clients und <Ausstellername> der Name des vertrauenswürdigen Ausstellers des Beispiels ist. Beispiel: Wenn Sie "setup.bat Peer Erfundener_Aussteller" eingeben, werden ein vertrauenswürdiger Aussteller namens " Erfundener_Aussteller " und Clientzertifikate namens "Peer1" und "Peer2" erstellt. Wenn Sie alle Instanzen des Beispiels auf einem einzelnen Computer ausführen, fahren Sie mit Schritt 7 fort.
Zusätzliche Schritte beim Einrichten auf mehreren Computern: Wenn das Beispiel auf mehreren Computern ausgeführt werden soll, müssen Zertifikatinformationen von einem Computer auf alle anderen Computer kopiert werden, auf denen das Beispiel ausgeführt wird, damit die Ausstellerinformationen bei allen Peers konsistent sind. Dies kann durchgeführt werden, indem man die mit dem (von Setup.bat generierten) vertrauenswürdigen Aussteller erstellten Clientzertifikate exportiert. Auch der vertrauenswürdige Aussteller (TrustedPeerChannelIssuer.cer, wenn der Standardname verwendet wird) muss auf alle anderen Clientcomputer kopiert werden, auf denen das Beispiel ausgeführt wird. Führen Sie dies in den folgenden drei Schritten durch:
Übertragen des vertrauenswürdigen Ausstellers: Kopieren Sie die CER-Datei (die generiert wird, indem Setup.bat im selben Ordner ausgeführt wird) auf den Clientcomputer. Klicken Sie mit der rechten Maustaste auf die Datei, und wählen Sie Zertifikat installieren aus. Klicken Sie auf Weiter, und wählen Sie dann die Option Alle Zertifikate in folgendem Speicher speichern aus. Klicken Sie auf Durchsuchen, und wählen Sie Vertrauenswürdige Personen als Ziel für das Zertifikat aus. Klicken Sie auf Weiter und auf Fertig stellen, um den Import des Zertifikats abzuschließen.
Exportieren des Clientzertifikats: Beginnen Sie damit, Certmgr.msc auf dem Computer auszuführen, der zum Generieren der Clientzertifikate verwendet wird. Wählen Sie das Clientzertifikat aus dem privaten Speicher (Unter "Zertifikate - Aktueller Benutzer" -> "Persönlich" -> "Zertifikate") aus. Klicken Sie mit der rechten Maustaste auf das Zertifikat, und wählen Sie "Alle Aufgaben" -> "Exportieren…" aus, um den Zertifikatexport-Assistenten zu starten. Klicken Sie auf "Weiter", wählen Sie "Ja, privaten Schlüssel exportieren" aus, und klicken Sie dann auf "Weiter". Klicken Sie wieder auf "Weiter", um das PFX-Format und Standardwerte auszuwählen. Geben Sie ein Kennwort für die Zertifikate ein, und klicken Sie auf "Weiter". Wählen Sie zum Abschluss einen Pfad und einen Dateinamen aus, und klicken Sie auf "Weiter" und auf "Fertig stellen", um den Exportprozess abzuschließen.
Importieren des Clientzertifikats: Kopieren Sie die in Schritt (b) erstellte PFX-Datei auf den Clientcomputer. Klicken Sie mit der rechten Maustaste auf die Datei, und wählen Sie "PFX installieren" aus. Klicken Sie zweimal auf "Weiter", und geben Sie dann das Kennwort ein, das zum Exportieren des Zertifikats dient. Klicken Sie auf "Weiter" und auf "Fertig stellen", um das Zertifikat im privaten Speicher abzulegen.
Tipp
Das Erstellen eines vertrauenswürdigen Ausstellers und dessen Export per Dateiübertragung kann ein bestimmtes Sicherheitsrisiko darstellen, wenn die Datei falsch weitergegeben wird. Vergessen Sie deshalb nicht, nach dem Ausführen des Beispiels (Schritt 8) die Beispielzertifikate zu bereinigen.
Führen Sie so viele Instanzen der Anwendung aus, wie Sie möchten. Nachrichten, die von einer Instanz gesendet werden, werden von den anderen empfangen. Jede Instanz hat den Standardnamen "peer1". Um zwischen den einzelnen Instanzen unterscheiden zu können, ändern Sie den Wert des "member"-Schlüssels in appSettings in der Konfigurationsdatei der Anwendung, und erstellen Sie ein Clientzertifikat mit demselben Namen.
Führen Sie zum Schluss Cleanup.bat aus, um die von diesem Beispiel erstellten Zertifikate zu entfernen. Bei Verwendung nicht standardmäßiger Namen führen Sie "Cleanup.bat <Peername> <Ausstellername>" mit den in Schritt 6 verwendeten Werten aus.
Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.