Ich möchte eine Form der "einfachen" Verschlüsselung verwenden, die einigermaßen sicher ist, aber sehr geringe Auswirkungen auf den Entwicklungsprozess hat.
Angenommen, ich besitze beide Seiten der Konversation in einem Client & lt; & gt; Web-Service-Situation. Meine Anwendung ist eine Windows Phone / Win8 / Silverlight / Desktop-App und der Server ist ASP.Net MVC oder WebAPI.
In meiner Vorstellung möchte ich etwas so einfaches wie: -
%Vor%als eine Form von Konfigurationsparametern auf dem Client und dem Server. Außerdem wird eine Authentifizierungsroutine zurückgegeben und speichert eine Form des öffentlichen Schlüssels.
Dadurch wird der "Verschlüsselungsmodus" aktiviert und alle HTTP-Anfragen werden verschlüsselt. in der ausgewählten Weise mit den bereitgestellten Schlüsseln hashed. Das Endergebnis besteht darin, dass alles, was auf den lokalen, Proxy- oder Remote-Computern gefunden wurde, die Daten nicht ohne den Schlüssel und die Entschlüsselungsmethode anzeigen kann. Auf dem Server werden die Daten mit dem gleichen Schlüssel entschlüsselt, bevor Controller-Aktionen ausgeführt werden.
Abgesehen vom Austauschen von HttpRequest / WebClient wird etwas wie EncryptedHttpRequest aufgerufen und der entsprechende Hook auf der MVC / WebAPI-Seite hinzugefügt. Alle anderen Client-Code- und Controller-Aktionen wären unwissend dafür, dass die Daten verschlüsselt waren.
>Fehle ich etwas oder könnte Setup nicht so einfach sein? Soweit ich gesucht habe, gibt es nichts, was diese Einfachheit bietet, also denke ich, dass mir ein klaffender Fehler in meiner Logik fehlt?
Ich habe das erfolgreich gemacht. Es ist nicht zu schwierig und funktioniert gut. Ich benutze es um eine Lizenz für ein Produkt zu aktivieren. Das Wichtigste ist, dass Sie wirklich den Client und den Server kontrollieren - niemand kann Ihren privaten Schlüssel aus Ihrem Code auf dem Client extrahieren.
Schritt 1: Erstellen Sie eine MVC-Controller-Aktionsmethode, die keine Argumente annimmt:
%Vor%Schritt 2: Verwenden Sie im Controller einfach den HttpRequest.InputStream, um die vom Client gesendeten Bytes zu erhalten.
var stream = this.HttpContext.Request.InputStream;
Schritt 3: Erstellen Sie einen CryptoStream für die Deserialisierung.
Ich habe hier Beispiele für die Verschlüsselung und Entschlüsselung aufgenommen. Das sharedSecret ist ein Byte [] mit ausreichender Länge (512 Bytes) von zufälligen Bytes - das ist was Sie schützen!
%Vor%Schritt 4: Verwenden Sie Ihren CryptoStream anderen Stream-Reader zum Entschlüsseln.
Ich benutze einen XmlReader, damit mein existierender Serialisierungscode entweder im Klartext (beim Lesen / Schreiben auf Platte oder Datenbank auf dem Server) oder verschlüsselt (beim Übertragen) funktionieren kann.
%Vor%Schritt 5: Formulieren Sie eine sichere Antwort in Ihrem Controller.
Dies geschieht in umgekehrter Reihenfolge der Schritte 1-4, um Ihr Antwortobjekt zu verschlüsseln. Dann schreiben Sie Ihre verschlüsselte Antwort einfach in einen Speicherstream und geben sie als Dateiergebnis zurück. Im Folgenden habe ich gezeigt, wie ich dies für mein Lizenzantwortobjekt tue.
%Vor%Schritt 6: Implementieren Sie Ihre Clientanforderungsantwort.
Sie können HttpWebRequest oder die WebClient-Klassen verwenden, um die Anforderung zu formulieren. Hier sind ein paar Beispiele aus dem Code, den ich verwende.
%Vor%Zusammenfassung und Tipps
Tags und Links asp.net-mvc asp.net-web-api security