Gewusst wie: Sichere Metadatenendpunkte
Metadaten für einen Dienst können vertrauliche Informationen über Ihre Anwendung enthalten, die böswillige Benutzer für ihre Zwecke missbrauchen können. Die Consumer Ihres Diensts benötigen möglicherweise auch einen sicheren Mechanismus für den Zugriff auf Metadaten über Ihren Dienst. Deshalb ist es manchmal notwendig, die Metadaten mit einem sicheren Endpunkt zu veröffentlichen.
Metadatenendpunkte sind in der Regel mit den Standardsicherheitsmechanismen, die in Windows Communication Foundation (WCF) zum Sichern von Anwendungsendpunkten definiert werden, gesichert. (Weitere Informationen finden Sie unter Sicherheitsübersicht.)
In diesem Thema sind die Schritte zur Erstellung eines Endpunkts beschrieben, der durch ein Verbunddienst-SSL-Zertifikat gesichert ist, also anders ausgedrückt: die Schritte zur Erstellung eines HTTPS-Endpunkts.
So erstellen Sie einen sicheren HTTPS-GET-Metadatenendpunkt in Code
Konfigurieren Sie einen Anschluss mit einem entsprechenden X.509-Zertifikat. Das Zertifikat muss von einer vertrauenswürdigen Stelle stammen und für die Verwendung zum Zwecke der Dienstautorisierung beabsichtigt sein. Sie müssen das Tool HttpCfg.exe verwenden, um das Zertifikat an den Anschluss anzufügen. Informationen finden Sie unter Gewusst wie: Konfigurieren eines Anschlusses mit einem SSL-Zertifikat.
Tipp
Der Betreff des Zertifikats oder das DNS (Domain Name System) muss mit dem Namen des Computers übereinstimmen. Dies ist deshalb wichtig, weil einer der ersten Schritte des HTTPS-Mechanismus darin besteht, zu überprüfen, ob das Zertifikat für denselben URI (Uniform Resource Identifier) ausgestellt wurde wie die Adresse, von der aus es aufgerufen wird.
Erstellen Sie eine neue Instanz der ServiceMetadataBehavior-Klasse.
Legen Sie die HttpsGetEnabled-Eigenschaft der ServiceMetadataBehavior-Klasse auf true fest.
Legen Sie für die HttpsGetUrl-Eigenschaft einen geeigneten URL fest. Beachten Sie, dass die URL mit dem Schema "https://" beginnen muss, wenn Sie eine absolute Adresse angeben. Wenn Sie eine relative Adresse angeben, müssen Sie eine HTTPS-Basisadresse für den Diensthost angeben. Wenn diese Eigenschaft nicht festgelegt ist, lautet die Standardadresse "" oder befindet sich direkt an der HTTPS-Basisadresse für den Dienst.
Fügen Sie der Verhaltenssammlung die Instanz hinzu, die von der Behaviors-Eigenschaft der ServiceDescription-Klasse zurückgegeben wird, wie im folgenden Code dargestellt.
So erstellen Sie einen sicheren HTTPS-GET-Metadatenendpunkt in der Konfiguration
Fügen Sie dem <system.ServiceModel>-Element der Konfigurationsdatei für Ihren Dienst ein <behaviors>-Element hinzu.
Fügen Sie dem <Behaviors>-Element ein <serviceBehaviors>-Element hinzu.
Fügen Sie dem <serviceBehaviors>-Element ein <behavior> of <serviceBehaviors>-Element hinzu.
Legen Sie einen angemessenen Wert für das name-Attribut des <behavior>-Elements fest. Das name-Attribut ist erforderlich. Das nachstehende Beispiel verwendet den Wert
mySvcBehavior
.Fügen Sie dem <behavior>-Element ein <serviceMetadata> Element-Element hinzu.
Legen Sie das httpsGetEnabled-Attribut des <serviceMetadata>-Elements auf true fest.
Legen Sie einen angemessenen Wert für das httpsGetUrl-Attribut des <serviceMetadata>-Elements fest. Beachten Sie, dass die URL mit dem Schema "https://" beginnen muss, wenn Sie eine absolute Adresse angeben. Wenn Sie eine relative Adresse angeben, müssen Sie eine HTTPS-Basisadresse für den Diensthost angeben. Wenn diese Eigenschaft nicht festgelegt ist, lautet die Standardadresse "" oder befindet sich direkt an der HTTPS-Basisadresse für den Dienst.
Um das Verhalten mit einem Dienst zu suchen, legen Sie für das behaviorConfiguration-Attribut des <service>-Elements denselben Wert fest wie für das Namensattribut des Verhaltenselements. Der folgende Konfigurationscode zeigt ein vollständiges Beispiel.
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior name="mySvcBehavior"> <serviceMetadata httpsGetEnabled="true" httpsGetUrl="https://localhost:8036/calcMetadata" /> </behavior> </serviceBehaviors> </behaviors> <services> <service behaviorConfiguration="mySvcBehavior" name="Microsoft.Security.Samples.Calculator"> <endpoint address="https://localhost:8037/ServiceModelSamples/calculator" binding="wsHttpBinding" bindingConfiguration="" contract="Microsoft.Security.Samples.ICalculator" /> </service> </services> </system.serviceModel> </configuration>
Beispiel
Im folgenden Beispiel wird eine Instanz einer ServiceHost-Klasse erstellt und ein Endpunkt hinzugefügt. Anschließend erstellt der Code eine Instanz der ServiceMetadataBehavior-Klasse und legt die Eigenschaften zur Erstellung eines sicheren Punkts für den Metadatenaustausch fest.
Kompilieren des Codes
Das Codebeispiel verwendet die folgenden Namespaces:
Siehe auch
Aufgaben
Gewusst wie: Konfigurieren eines Anschlusses mit einem SSL-Zertifikat
Referenz
HttpsGetEnabled
ServiceMetadataBehavior
HttpsGetUrl
Konzepte
Verwenden von Zertifikaten
Sicherheitsüberlegungen für Metadaten