Beispiel für Nachrichtensicherheit
In diesem Beispiel wird veranschaulicht, wie eine Anwendung implementiert wird, die basicHttpBinding und Nachrichtensicherheit verwendet. Dieses Beispiel basiert auf dem Beispiel 'Erste Schritte', das einen Rechnerdienst implementiert.
Tipp
Die Setupprozedur und die Erstellungsanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.
Der Sicherheitsmodus von basicHttpBinding kann auf die folgenden Werte festgelegt werden: Message, Transport, TransportWithMessageCredential, TransportCredentialOnly und None. In der folgenden Datei "App.config" des Beispieldiensts gibt die Endpunktdefinition die basicHttpBinding an und verweist auf die Bindungskonfiguration Binding1
(wie in folgender Beispielkonfiguration gezeigt).
<system.serviceModel>
<services>
<service name="Microsoft.ServiceModel.Samples.CalculatorService"
behaviorConfiguration="CalculatorServiceBehavior">
<!-- This endpoint is exposed at the base address provided by -->
<!-- host: https://localhost:8000/ServiceModelSamples/service.-->
<endpoint address=""
binding="basicHttpBinding"
bindingConfiguration="Binding1"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
</service>
</services> …
</system.serviceModel>
Die Bindungskonfiguration legt das Attribut mode von security Element in basicHttpBinding auf Message fest und das Attribut clientCredentialType von message Element in basicHttpBinding auf Certificate (wie in folgender Beispielkonfiguration gezeigt).
<bindings>
<basicHttpBinding>
<!--
This configuration defines the SecurityMode as Message and
the clientCredentialType as Certificate.
-->
<binding name="Binding1" >
<security mode = "Message">
<message clientCredentialType="Certificate"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
Das vom Dienst zum Authentifizieren beim Client verwendete Zertifikat wird im Verhaltensabschnitt der Konfigurationsdatei im Element serviceCredentials
festgelegt. Der Prüfungsmodus für das Zertifikat, das der Client zum Authentifizieren beim Dienst verwendet, ist auch im Verhaltensabschnitt im clientCertificate
-Element festgelegt.
<!--For debugging purposes, set the includeExceptionDetailInFaults attribute to true.-->
<behaviors>
<serviceBehaviors>
<behavior name="CalculatorServiceBehavior">
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False" />
<!--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. -->
<serviceCredentials>
<serviceCertificate findValue="localhost"
storeLocation="LocalMachine"
storeName="My" x509FindType="FindBySubjectName" />
<clientCertificate>
<!-- 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 -->
<!-- certificate 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" />
</clientCertificate>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
Die gleichen Bindungs- und Sicherheitsinformationen sind in der Clientkonfigurationsdatei angegeben.
Die Identität des Aufrufers wird im Dienstkonsolenfenster angezeigt, indem folgender Code verwendet wird:
Console.WriteLine("Called by {0}", ServiceSecurityContext.Current.PrimaryIdentity.Name);
Wenn Sie das Beispiel ausführen, werden die Anforderungen und Antworten für den Vorgang im Clientkonsolenfenster angezeigt. Drücken Sie im Clientfenster die EINGABETASTE, um den Client zu schließen.
Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714
Press <ENTER> to terminate client.
So richten Sie das Beispiel ein und erstellen es
Stellen Sie sicher, dass Sie die Beispiele zum einmaligen Setupverfahren für Windows Communication Foundation ausgeführt haben.
Zum Erstellen der C#- oder Visual Basic .NET-Version der Projektmappe folgen Sie den unter Erstellen der Windows Communication Foundation-Beispiele aufgeführten Anweisungen.
So führen Sie das Beispiel auf demselben Computer aus
Führen Sie "Setup.bat" im Beispielinstallationsordner aus. Dadurch werden alle Zertifikate, die zum Ausführen des Beispiels erforderlich sind, installiert.
Tipp
Die Batchdatei "Setup.bat" ist darauf ausgelegt, von einer Windows SDK-Eingabeaufforderung ausgeführt zu werden. Die MSSDK-Umgebungsvariable muss auf das Verzeichnis zeigen, in dem das SDK installiert ist. Diese Umgebungsvariable wird automatisch innerhalb einer Windows SDK-Eingabeaufforderung festgelegt.
Führen Sie die Dienstanwendung in "\service\bin" aus.
Führen Sie die Clientanwendung in "\client\bin" aus. In der Clientkonsolenanwendung wird Clientaktivität angezeigt.
Wenn der Client und der Dienst nicht miteinander kommunizieren können, finden Sie weitere Informationen unter Hinweise zur Fehlerbehebung.
Wenn Sie mit dem Beispiel fertig sind, führen Sie die Datei "Cleanup.bat" aus, um die Zertifikate zu entfernen. In anderen Sicherheitsbeispielen werden die gleichen Zertifikate verwendet.
So führen Sie das Beispiel computerübergreifend aus
Erstellen Sie auf dem Dienstcomputer ein Verzeichnis für die Dienstbinärdateien.
Kopieren Sie die Dienstprogrammdateien in das Dienstverzeichnis auf dem Server. Kopieren Sie auch die Dateien "Setup.bat", "Cleanup.bat" und "ImportClientCert.bat" auf den Server.
Erstellen Sie auf dem Clientcomputer ein Verzeichnis für die Clientbinärdateien.
Kopieren Sie die Clientprogrammdateien in das Clientverzeichnis auf dem Clientcomputer. Kopieren Sie auch die Dateien "Setup.bat", "Cleanup.bat" und "ImportServiceCert.bat" auf den Client.
Führen Sie auf dem Server
setup.bat service
aus. Durch Ausführen vonsetup.bat
mit dem Argumentservice
wird ein Dienstzertifikat mit dem vollqualifizierten Domänennamen des Computers erstellt und das Dienstzertifikat in eine Datei namens "Service.cer" exportiert.Bearbeiten Sie "Service.exe.config" so, dass sie den neuen Zertifikatnamen (im findValue-Attribut im Element <serviceCertificate> of <serviceCredentials>) enthält, der derselbe wie der vollqualifizierte Domänenname des Computers ist. Ändern Sie auch den Wert der Basisadresse, um anstelle von "localhost" einen vollqualifizierten Computernamen anzugeben**.**
Kopieren Sie die Datei "Service.cer" aus dem Dienstverzeichnis in das Clientverzeichnis auf dem Clientcomputer.
Führen Sie auf dem Client
setup.bat client
aus. Durch Ausführen vonsetup.bat
mit dem Argumentclient
wird ein Clientzertifikat namens "client.com" erstellt und in eine Datei namens "Client.cer" exportiert.Ä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. Ersetzen Sie dazu "localhost" durch den vollqualifizierten Domänennamen des Servers. Ändern Sie auch das Attribut findValue von <defaultCertificate> Element in den neuen Dientzertifikatnamen, bei dem es sich um den vollqualifizierten Domänennamen des Servers handelt.
Kopieren Sie die Datei "Client.cer" aus dem Clientverzeichnis in das Dienstverzeichnis auf dem Server.
Führen Sie auf dem Client "ImportServiceCert.bat" aus. Dadurch wird das Dienstzertifikat aus der Datei "Service.cer" in den CurrentUser – TrustedPeople-Speicher importiert.
Führen Sie auf dem Server "ImportClientCert.bat" aus. Dadurch wird das Clientzertifikat aus der Datei "Client.cer" in den LocalMachine – TrustedPeople-Speicher importiert.
Führen Sie auf dem Dienstcomputer die Datei "Service.exe" über eine Eingabeaufforderung aus.
Starten Sie auf dem Clientcomputer "Client.exe" in einem Eingabeaufforderungsfenster.
- Wenn der Client und der Dienst nicht miteinander kommunizieren können, finden Sie weitere Informationen unter Hinweise zur Fehlerbehebung.
So bereinigen Sie nach dem Beispiel
Führen Sie "Cleanup.bat" im Beispielordner aus, nachdem Sie das Beispiel fertig ausgeführt haben.
Tipp
Wenn dieses Beispiel computerübergreifend ausgeführt wird, entfernt dieses Skript keine Dienstzertifikate auf einem Client. Wenn Sie Windows Communication Foundation (WCF)-Beispiele ausgeführt haben, die Zertifikate computerübergreifend verwenden, müssen Sie sicherstellen, dass Sie die Dienstzertifikate entfernen, die im CurrentUser-TrustedPeople-Speicher installiert wurden. 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
.
Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.