2015-04-21 6 views
7

Ich schreibe Client für meine Webapplikation, und ich signierte Release-Jar mit meinem Entwickler-Zertifikat, wie kann ich überprüfen, dass Anfrage auf Rest-Service war von meinem signierten Glas?Verify HTTP-Anfragen von signierten Jar

+13

Sie können nicht. Jede Person, die Ihr signiertes Glas besitzt, kann es zerlegen und daher herausfinden, wie solche Anfragen gefälscht werden können. Sie können es durch statische oder dynamische Verschleierung schwieriger machen, aber das erhöht nur die Hürde ein wenig. Wenn Sie andererseits versuchen, sich gegen Angreifer ohne Zugang zu Ihrem Jar zu verteidigen, kann dieser Jar einen privaten Schlüssel enthalten, der zum Signieren der Rest-Service-Anfragen verwendet wird. – mkl

+3

Was ist das zugrunde liegende Problem, das Sie versuchen zu lösen? Wenn Sie Ihre Frage bearbeiten, um sie einzuschließen, können wir möglicherweise eine alternative Lösung vorschlagen. – merlin2011

+6

@ mkl ist richtig. Jeder Dienst, der öffentlich erreichbar ist und für den jemand einen Client erhalten kann, kann reverse-engineered sein, und mit dem Client in der Hand gibt es keine Möglichkeit, jemanden daran zu hindern, Ihren privaten Schlüssel oder einen anderen Geheimhaltungsmechanismus zu finden. Versuchen Sie sich im Allgemeinen nicht zu sehr darum zu kümmern, welche * Anwendung * Anfragen an Ihren Dienst sendet; Sorgen Sie sich, was * Benutzer * ihnen sendet. Wenn ich eingeloggt und authentifiziert bin, sollte es keinen Unterschied machen, ob ich Ihren benutzerdefinierten Client oder Telnet verwende. –

Antwort

6

Sie können nicht. Die Signierung dient zur Validierung der Ausführung, dh sie befindet sich auf der Serverseite. Sie möchten jedoch die Signatur auf der HTTP/Ruheanforderung auf der Clientseite überprüfen. Client-Seite hat keine solche Validierung.

Sie können der Antwort selbst etwas hinzufügen und sie auf der Clientseite validieren, aber wiederum verhindert nichts, dass ein anderer Server den gleichen Wert sendet, und gibt so vor, Ihr Server zu sein.

Sie können auch einige Verhaltensmerkmale zu Ihrem jar hinzufügen (wie Sitzungscookies), aber wiederum verhindert nichts, dass andere jars es emulieren.