close
Kaspersky Endpoint Security

Welcome to

Kaspersky Endpoint Security


By Kaspersky Endpoint Security


Deep Security für neue Bedrohungen



Der WCF-Framework ist gigantisch. Es hat so eine enorme Menge an Möglichkeiten, dass es ziemlich einfach ist, vollständig verloren gehen. Für unser Szenario benötigten wir nur eine kleine gemeinsame Untergruppe. Unsere Anwendung bietet eine Reihe von Dienstleistungen, die durch eine Vielfalt von Kunden verbraucht sind, was zu erzählen, wer sie sind durch einen neuen Benutzernamen und Kennwort angeben. Es gibt viele, viele Dokumente und Handbücher, die im Internet zu finden sind, aber ich habe nichts gefunden, das mir die ganze Geschichte gab. Die meisten von ihnen alle Arten von Sidesteps in anderen Teilen der reichen WCF Rahmen folgen. Dinge, die wir überhaupt nicht brauchen, benötigt das, was wir unsere Sachen zur Arbeit zu kommen entweder weggelassen wurden oder nur kurz in einem Kommentar erwähnt.

Dieser Beitrag versucht, die ganze Geschichte zu beschreiben. Er wird versuchen, auf allen Lärm auf anderen kühlen ruhig zu halten, aber nicht mehr benötigte, Funktionen. Diese Informationen werden von einer reichen Auswahl an Sachen auf, die von der WCF-Framework selbst bereitgestellt Nachrichten Web und Fehler zusammengebaut. Letztere sind oft ganz auf den Punkt und viele wichtige Informationen liefern. Dieser Beitrag ist nur eine Art Kochbuch Rezept, ich behaupte nicht, jedes Detail zu verstehen und jeden Kommentar zu schätzen wissen würde weiter um die Details zu klären.

Der Service

Der Service ist eine ASP.NET-Service, gehostet von IIS und im system.serviceModel Teil des web.config konfiguriert.

<System.serviceModel> <Dienste> <servicebehaviorConfiguration="FarmService.CustomerDeskOperationsBehavior"name="FarmService.CustomerDeskOperations"> <endpointaddress=""binding="wsHttpBinding"bindingConfiguration="RequestUserName"contract="FarmService.ICustomerDeskOperations"> </ Endpunkt> <EndpointAddress = "mex" Bindung = "mexHttpBinding" Vertrag = "IMetadataExchange" /> </ service> </ Dienstleistungen>

Der Endpunkt-Adresse ist die Wurzel des IIS-Site, in dem er seine Gastgeber. So verwenden Sie Benutzernamen Authentifizierung benötigen Sie wsHttpBinding zu verwenden. Die Dienste-Funktionalität wird im ICustomerDeskOperations Vertrag beschrieben.

In der Bindung Sie die Legitimierungsart als Benutzernamen angeben.

<Bindungen> <wsHttpBinding> <Binding = "RequestUserName"> <SECURITY = "Message"> <messageclientCredentialType = "username" /> </ security> </ binding>

Im servicebehaviour richten Sie, wie der Benutzername validiert werden soll

<Verhalten> <serviceBehaviors> <behaviorName = "FarmService.CustomerDeskOperationsBehavior"> <serviceMetadatahttpGetEnabled = "true" /> <serviceCredentials> <userNameAuthenticationuserNamePasswordValidationMode="Custom"customUserNamePasswordValidatorType="FarmService.Authentication.DistributorValidator, FarmService "/> <serviceCertificatefindValue="Farm"storeLocation="LocalMachine"storeName="TrustedPeople"x509FindType="FindBySubjectName"/> </ ServiceCredentials> </ Verhalten>

Der Benutzername wird individuell geprüft. Dies wird durch die FarmService.Authentication.DistributorValidator Klasse in der FarmService Montage durchgeführt. Diese Klasse erbt von WCF-Klasse UserNamePasswordValidator und überschreibt die Validate-Methode.

public class DistributorValidator: UserNamePasswordValidator {public override void Validate (string username, string Passwort) {if (string.IsNullOrEmpty (Benutzername) || string.IsNullOrEmpty (Passwort)) throw new SecurityTokenException ( "Benutzername und Passwort erforderlich"); var Repository = new DistributorRepository (); wenn werfen neue FaultException (string.Format ( "Falscher Benutzername ({0}) oder Passwort", username)) (repository.IsKnownDistributor (Benutzername, Passwort)!); }}

Die Methode überprüft die eingehenden Benutzernamen und Passwort in einem Repository und wirft entsprechenden Ausnahmen, wenn nötig. Das ist wirklich benutzerdefinierten Code. Solange Sie akzeptiert werden keine Ausnahme der Dienstaufruf zu werfen.

Bisher könnte dies eine Kopie von vielen eine Geschichte auf dem Netz haben. Mit Ausnahme von ein Detail, das absolut notwendig ist. die Hosting-Service benötigt ein X509-Zertifikat für Benutzername Passwort-Authentifizierung des Servers zu arbeiten. Else alle Service-Aufrufe fehl. Dieses Zertifikat wird im Serviceverhalten festgelegt.

<ServiceCertificatefindValue = "Farm" storelocation = "Localmachine" store = "Trusted" x509FindType = "FindBySubjectName" />

Zuerst müssen Sie ein Zertifikat. Statt eines Kauf (die zu Testzwecken auf einem bestimmten Server-Adresse und damit so gut wie nutzlos gebunden ist) können Sie Ihre eigenen erstellen. Das .NET-Framework kommt mit Werkzeugen diese zu erzeugen und es gibt mehrere Tutorials, wie man diese Werkzeuge zu benutzen. Weit einfacher ist ein Werkzeug, das sich um den gesamten Prozess in ein paar Klicks nimmt.

Was sie tun, Sie hier nicht sagen, ist, dass Sie das Tool als Administrator ausführen müssen, sonst wird es den meisten ungracefully abstürzen. Was ist das Tool auch unklar ist, wo das generierte Zertifikat zu speichern. Standardmäßig wird es in MyStore gespeichert. Bei der Validierung der Vertrauenswürdigkeit des Zertifikats auf dem Standort abhängt, wird es gespeichert. Wenn der Speicher ist eine Kette von Validierung nicht vertraut wird gestartet. Statt der Einrichtung einer Kette von Zertifikaten können Sie auch speichern direkt Ihr Zertifikat in einem vertrauenswürdigen Speicher.

Mit diesen Einstellungen wird das Zertifikat in einer vertrauenswürdigen Stelle gespeichert. Der Name und Speicherort entsprechen die Einstellungen im Betriebsverhalten

Troubles nicht zu Ende. Nach einer Weile, wie im nächsten Mal anmelden, wird der Service-Host starten zu beschweren können den privaten Schlüssel des Zertifikats mit einem "Keyset existiert nicht" Fehlermeldung nicht finden. Was passiert es, dass der Dienst nicht mehr das Zugriffsrecht, das Zertifikat zu lesen. Was half mir ausdrücklich wurde Rechte auf das Zertifikat des privaten Schlüsseldatei festlegen.

Hier bin ich mit einer stumpfen Axt von nur damit alle Rechte auf das Zertifikat des privaten Schlüsseldatei lesen. Ich bin kein Sicherheitsexperte, aber ich bin mir bewusst, das ist absolut nicht die Art und Weise, Dinge zu tun. Aber hey, ich nur einen Dienst aufbauen wollen, nie für dieses Zertifikat Sachen gefragt und das einzige, was ich hier tun möchte, ist, dass zu bekommen aus dem Weg in den Entwicklungsprozess.

Jetzt ist der Service bereit, die von einem Client verbraucht werden

Der Klient

Um verbrauchen dieser Dienst einen Dienstverweis in dem Client hinzufügen. Die mexHttpBinding in der Service-Konfiguration ermöglicht es, alle Metadaten bilden den Dienst ohne Anmeldeinformationen zu lesen.

Einrichten erfordert eine Verbindung mit dem Client etwas Fummelei. Auch nicht alle diese Einstellungen sind klar in der Standardeinstellung.

var endPoint = new EndpointAddress (neu Uri (Farm.FarmUrl), EndpointIdentity.CreateDnsIdentity ( "Farm")); var Bindung = new WSHttpBinding (); binding.Security.Mode = SecurityMode.Message; binding.Security.Message.ClientCredentialType = MessageCredentialType.UserName; var result = new CustomerDeskOperationsClient (Bindung, endPoint); result.ClientCredentials.UserName.UserName = Farm.FarmUserName; result.ClientCredentials.UserName.Password = Farm.FarmPassword;

Zunächst müssen wir einen Endpunkt. Dies wird aus der URL in der Client-Konfiguration zusammengebaut, hier eine konstante Farm.FarmUrl. Für die individuelle Benutzerauthentifizierung den Endpunkt arbeiten muss auch eine EndpointIndentity. Nach Angaben der spärlichen msdn Dokumentation ist diese Phishing zu verhindern. Die Tatsache, dass die Identität benötigt wurde und der Parameter hatte das Zertifikat des Namens durch die WCF-Fehlermeldungen wurde vorgeschlagen werden.

Die Sicherheit wird entsprechend den Sicherheitseinstellungen wir im Dienst gesehen haben. Sowohl der Benutzername und das Passwort in Username-Eigenschaft der ClientCredentails gesetzt.

Einwickeln

Das ist es. Jetzt ist unser Service und Kunden sprechen. Aber es dauerte viel zu viel Mühe, die richtigen Einstellungen zu finden. Die Zahl ist nicht groß, aber sie alle wurden als wesentlich gefunden. Das Finden der richtigen wurde ein Prozess der endlos alle Sidesteps Ausmerzung. Ich hoffe, das auch helfen Ihnen, es ist ein wenig schneller zu erledigen.

<Update>

Die vielen nützlichen Kommentare und ihre Möglichkeiten sind zusammengefasst in. Alle nebligen Dinge in diesem Beitrag sind dort geklärt. Achten Sie darauf, es zu lesen.

</ Update>


Endpoint-Security 2014     Endpoint-Security 2015

Categories and tags