# Aktivierung via Internet



## Unregistriert (15. Okt 2009)

ich bin gerade dabei ein kleines Projekt zu realisieren und bräuchte dazu einige Denkanstöße wie
man das ganze am besten und sicherersten realisieren kann.

Die Idee, ich habe eine Java Applikation die sich bei der Installation per Key an einem WebServer anmeldet. Daraufhin überprüft der Webserver ob der Key legitim ist und sendet die passende Antwort via Internet an die Applikation zurück.

Wie könnte man diesen weg am besten, sichersten realisieren ?
Besten Dank für eure Hilfe
Gruß Marco


----------



## tuxedo (16. Okt 2009)

WEBSERVER oder Server im Web?

Bei ersterem ist es wohl nur ein Apache mit MySQL und PHP?!

Bei letzterem ein eigener Root-Server?

Wenn du nur Webserver meinst dann kannst du dir was mit PHP ausdenken oder wasmit SOAP basteln das du mit Java dann benutzen kannst.

- Alex


----------



## oversoul (17. Okt 2009)

Eine Möglichkeit währe zB, dass der Client erstmal den eigenen Key zum Server sendet und erstmal prüft ob dieser in Ordnung ist.
Dann muss der Server dem Client mitteilen, dass der Key ok war, dieses sollte jedoch nicht, dadurch passieren, in dem der Server zB. antwortet OK oder sonst was, weil das währe leicht fälschbar
Evtl währe ein ein passender generierter gegen Schlüssel gut, dieser darf naturlich nur auf den zum gesendeteten Key passen


----------



## Unregistriert (18. Okt 2009)

ja genau nach so einer lösung bin ich auf der Suche, kann man sowas nur mit einem Rootserver realisieren,
oder gibt  es noch andere möglichkeiten?

PHP wäre nicht schlecht, aber ich glaube das geht gar nicht / bzw. ist unsicher.

Gruss


----------



## oversoul (19. Okt 2009)

Ich denke mal schon, dass sowas in PHP möglich ist, man könnte mittels URLconnection auf die URL zugreifen (POST-Verfahren ???) und bekommt dann als antwort den aktivierungskey.

Da ich hab diese PHP-Geschichten selbst nicht kann, must du vll jemanden mit PHP kentnissen fragen


----------



## tuxedo (19. Okt 2009)

Also ob nun PHP oder ein Java-Servlet auf dem Server läuft ist wurscht. Ein http-Request ist ein http-Request.

Evtl kannst du den Request noch über HTTPS laufen lassen und das dafür benötigte Zertifikat noch in deinen Client reinwurschteln.

Aber sonst seh ich - abgesehen von der Möglichkeit für Cracks das Ding zu dekompilieren und den Mechanismus auszuhebeln - keine weiteren Schwierigkeiten.

- Alex


----------



## Unregistriert (20. Okt 2009)

Hi ja mit dem -dekompilieren ist so ne Sache für sich,
kann derjenige dann aber gerne -versuchen und 
das durch routinen verwurschtelte code geschnipsel durchsteigen 

Aber prinzipiell stimmt das Schon, aber ich schließe meine Haustür lieber
ab anstatt sie offen zu lassen... Alles eine Frage der eingesetzten kriminellen Energie.


----------



## newcron (20. Okt 2009)

Wenn du soetwas machst, bedenke, dass es in jedem Betriebssystem soetwas wie eine hosts-Datei gibt, in der der Benutzer manuell die IP-Addressen von bestimmten Domains festlegen kann. 

Wenn du das ganze wirklich sicher machen willst, würde ich dir zu nem Public/Private Key artigen Verfahren raten:
Der Server und jede Client-Installation haben einen public- und einen private-key. Zur Registrierung sendet deine Anwendung den Registrations-String sowie ein zufallsstring (einfach eine beliebige zufallsgenerierte Zeichenfolge) verschlüsselt mit dem Public-Key des Servers  an den Server. Der entschlüsselt ihn (mit seinem private-key) und überprüft, ob die Registrierung zulässig ist (also ob der Registrierungsstring OK ist, ob die Anwendung nicht bereits installiert wurde,...) und sendet "true" bzw. "false" plus den zufallsstring, den er bekommen hat zurück an den Client - verschlüsselt mit dessen public-key. 

Der Client entschlüsselt das nun und erfährt so zwei Dinge: 
- Ist die Registrierung erfolgreich gewesen? (true/false) 
- Ist der Server tatsächlich er selbst? (konnte der richtige zufalls-string zurückgesandt werden)

Die Überlegung, warum letzteres funktioniert ist folgende: Wenn nur der Server seinen Private Key kennt, kann nur er herausbekommen, welcher Zufallsstring an ihn gesandt wurde, und diesen korrekt zurücksenden. Einen Server zu "faken" funktioniert deshalb nicht - der bräuchte schon den Private-Key. Und um den zu bekommen bräuchte man Zugang zu dem tatsächlich echten Server.

Eine Alternative wäre, die Übertragung mittels HTTPS und gültigem Zertifikat zu machen. Auch so ließe sich die Integrität des Servers verifizieren... wäre vielleicht sogar die einfachere Lösung...  

Bedenke aber: Nur weil du eine sichere Verifizierung des Keys hast, hast du nichts gewonnen. Wenn du den zustand der Anwendung (Registered/Unregistered) in der Registry oder eine Text-Datei speicherst, dann kann Herr H. Acker deinen Check einfach umgehen, indem er die Registry/Textdatei editiert und schon glaubt deine Anwendung, sie wäre bereits registriert.


----------



## tuxedo (20. Okt 2009)

Naja, HTTPS würde ich auch einsetzen. Und die Registrierung/Verifizierung würde ich nicht dauerhaft gültig machen. KOmmt halt auf die Anwendung an. Wenn's eh eine Anwendung ist die eine Netzverbindung vorraussetzt, dann kann man den Key-Check auch bei jedem Programmstart laufen lassen. Bedenken sollte man allerdings die Serverlast wenn das Programm weite verbreitung findet ...

- Alex


----------

