Vorübergehend den SSL-Clientschlüssel für die Clientauthentifizierung in C # laden

Ich verwende das WebBrowser-Steuerelement, um ein WebInterface zu C# -App hinzuzufügen. Ich möchte überprüfen, ob nur solche Apps eine Verbindung zu unserem Webserver herstellen können, indem SSL-Clientzertifikate verwendet werden.

Meine Idee war, das Client-Zertifikat in die App einzubetten und nur bei der Verbindung über meine App zu verwenden. Hat jemand eine Vermutung, wie man das macht? Oder der einzige Weg, es zum Laufen zu bringen, ist, den Schlüssel in den X509Store zu laden.

Wenn ich es in X509Store ablege, wird es meinen Schlüssel für den allgemeinen Gebrauch des Internet Explorers verfügbar machen?

0

3 Antworten

Bist du sicher, dass du das willst? Wenn Sie den privaten Schlüssel in Ihre Anwendung einbetten (wie es Ihr Ansatz erfordert), kann ein Angreifer ihn extrahieren und damit seine Rogue-Software authentifizieren.

Ein Server kann die Client-Software nicht authentifizieren. Es kann nur testen, ob ein Client ein Geheimnis besitzt. Wenn Sie einen privaten Schlüssel in Ihren Client einbetten und ihn verteilen, ist das kein Geheimnis mehr.

Ich würde empfehlen, Benutzer Ihrer Software und nicht die Software selbst zu authentifizieren. Sie müssen den Benutzern ermöglichen, ihr eigenes Geheimnis zu erzeugen, sei es ein Passwort oder ein privater Schlüssel, und ihnen einen Anreiz geben, sie zu schützen.

0
hinzugefügt

Die Absicht, den Schlüssel zu verwenden, besteht nicht so sehr darin, die Benutzer zu validieren, als den Zugriff auf Benutzer der Anwendung zu beschränken, anstatt irgendeinen WebBrowser zu verwenden. Dies ist eine Art Intranet-Verhalten über das öffentliche Internet.

Das ist ein DRM eines armen Mannes. Die Verluste durch Leute, die den Schlüssel extrahieren, sind nicht so wichtig. Ich denke, das Risiko, dass dies passiert, ist gering und was wir verlieren könnten, ist minimal.

Wenn es jedoch eine andere Idee gibt, den Zugriff auf den WebServer auf Benutzer der App zu beschränken, bin ich offen für Vorschläge. Grundsätzlich ist es mein Wunsch, einen öffentlichen WebServer weit offen zu haben, um von jedem gelesen zu werden, aber ein Zugriff über das öffentliche Netzwerk von verschiedenen Orten aus ist notwendig, so dass das Einrichten einer Intranet-Infrastruktur auch nicht möglich ist.

0
hinzugefügt

Also, einige Gedanken hier:

1.

Ich stimme "Erickson" zu und bestätige, dass NUR Ihre App mit der App kommunizieren kann, was mit Ihrem aktuellen Design nahezu unmöglich ist. Es ist nur eine Frage der Zeit, bis jemand deine App rückgängig macht und dann sein Spiel beendet (wenn das nur eine Form der Sicherheit ist). Wenn Sie Ihre App und einen gültigen Benutzer validieren möchten, müssen Sie den Benutzer authentifizieren und die Signatur der betreffenden App überprüfen (was in einem Client-Server-Modell nicht möglich ist). ..nach allem kann ich immer lügen und sagen, dass meine "hackyou" -App die gleiche Signatur wie Ihr "reAlapp" hat und Sie das nicht von der Serverseite aus überprüfen können.

2.

Denken Sie daran, dass das WebBrowser-Steuerelement im Wesentlichen ein Wrapper für den IE ist. Ohne einige Tricks (auf die ich in einer Sekunde eingehen werde) müssten Sie das Zertifikat dem Benutzerspeicher hinzufügen.

3.

Hier ist ein hacky Weg, um zu erreichen, was Sie fragen (obwohl es eine schlechte Idee ist):

  • Verwenden Sie zuerst die WebRequest.Create um ein HttpWebRequest-Objekt zu erstellen
  • Laden Sie ein X509Certificate2-Objekt manuell aus einer Datei oder dem binären Stream, der im Programm
  • codiert ist
  • verwenden Sie die HttpWebRequest.ClientCertificates um Ihr Zertifikat zur Webanfrage hinzuzufügen
  • Senden Sie die Anfrage, erhalten Sie die Antwort
  • Senden Sie die Antwort an den WebBrowser, indem Sie den ResponseStream der HttpWebResponse auf den DocumentStream des WebBrowsers
  • drücken

Dies bedeutet im Wesentlichen, dass Sie einige Wrapper-Klassen schreiben müssen, um die Requests und Responses vom und zum Server zu bearbeiten und den WebBrowser nur zur Bearbeitung der HTML-Anzeige verwenden.

In Wirklichkeit müssen Sie die Bedrohungen, die Sie handhaben möchten, neu gestalten und betrachten!

0
hinzugefügt