Software ausliefern - Aber Wie?

RelaX

Aktives Mitglied
Guten Tag,

nun ist es bald soweit und ich befinde mich in der Endphase meiner Entwicklung.

Es handelt sich hierbei erst mal um einen Chat der neben einer Webapplikation existieren soll. D.h. die Webapplikation ermöglicht das Registrieren und sonstige Funktionen.

Mit dem Chat kann man sich dann einloggen und diesen nach Vorgabe nutzen.

Ich stelle mir hierbei allerdings einige Fragen.

Momentan läuft die Verbindung mittels Socket an ein ChatServer. Durch den login wird beim Client also Benutzername und Passwort eingetragen und an den Server gesendet. Dieser antwortet dem Client mit weiteren Instruktionen. Wie realisiere ich, bezüglich der Sicherheit, den Login am besten. Wenn ich das Passwort des Benutzers einfach über Socket im Klartext übertrage kann ich die Verschlüsselung Serverseitig tätigen und das Passwort in der Datenbank auf Korrektheit prüfen.

Das Problem liegt denke ich auf der Hand: Es wird im Klartext übertragen.

Nächste Idee:
Ich benutze eine SSL verbindung. Allerdings erfordert das einen zusätzlichen keystore der im Quelltext definiert werden muss. D.h. beim recompilieren wird dieser ja dann bekannt.

Glaub die schlechteste Idee wäre:
Beim Client das Passwort verschlüsseln. Beim recompilieren wäre die Verschlüsselungsmethode offen.

Möglichkeit? : Da Objecte Übertragen werden mittels Objectstram, ist keine Verschlüsselung notwendig? Wohl kaum.


Ich wäre wirklich dankbar wenn mir jemand helfen könnte. Mir fehlt da der korrekte Ansatz.

Vielen Dank im Vorraus.
 

Zettelkasten

Aktives Mitglied
Wenn der Client das Passwort verschlüsselt, kommt es eigentlich aufs selbe hinaus wie als wenn er es nicht tut:
Code:
1.
Client: Der User schickt ein Passwort ab
Dazwischen: Das Passwort wird abgehört
Server: Das Passwort wird gehasht um es mit dem Hash in der Datenbank zu vergleichen. Der User wird eingelogged.

-> Der Typ dazwischen schickt das selbe Passwort ab
-> Server: Das Passwort wird gehasht um es mit dem Hash in der Datenbank zu vergleichen. Der User wird eingeloggt.

2.
Client: Der User schickt ein "gehashtes Passwort" ab
Dazwischen: Das "gehashte Passwort" wird abgehört
Server: Das "gehashte Passwort" wird gehasht um es mit dem Hash in der Datenbank zu vergleichen. Der User wird eingeloggt.

-> Der Typ dazwischen schickt das selbe "gehashte Passwort" ab
-> Server: Das "gehashte Passwort" wird gehasht um es mit dem Hash in der Datenbank zu vergleichen. Der User wird eingelogged.
(Quelle: Passwörter verschlüsselt übertragen - Seite 2 - php.de)

Client-Seite ist nie sicher, es kann höchstems einem Angreifer das Leben schwerer machen, aber sicher ist es nie.
Benutze SSL :)
 
Zuletzt bearbeitet:

RelaX

Aktives Mitglied
Vielen Dank für die Info.

Also einfach eine SSLSocketverbungung verwenden? Nur wie realisiere ich das mit dem Keystore?
 

turtle

Top Contributor
Um dieses Problem haben sich schon viele Leute Gedanken gemacht und sind zu verschiedenen Lösungen gekommen.

Neben der guten Möglichkeit SSL einzusetzen, gibt es noch andere.

Beispielsweise können sich Client und Server verständigen und sicherstellen, mit dem richtigen Gegenpart zu reden.

Dies nennt man Authentifizierung und bedeutet, das ein Client (oder Server) beweisen muss, derjenige zu sein, die er vorgibt, wirklich zu sein. Häufig wird dies dadurch gemacht,indem ein Client eine Information dem Server präsentiert, die nur DIESER Client haben kann. Häufig ist dies die Nennung eines Passwortes.

Damit dies nicht im Klartext übertragen werden muss, gibt der Server dem Client einen Key mit, mit dem Client sein Passwort verschlüsseln kann. Weiterhin werden oft noch die Pakete zwischen Client/Server durchnummeriert um zu verhindern, das ein einfaches Replay möglich ist. So weiß der Server, das die Antwort auf Authentifizierung mit der Nummer 19 kommen muss und nicht eine andere.

Insgesamt aber eine nicht ganz triviale Sache dies umzusetzen und es ist die Frage, ob im Chat derart hoch sensible Informationen ausgetauscht werden.
Wenn du aber mehr wissen möchtest, empfehle ich sich mal mit JAAS zu beschäftigen.
Weiterhin finde ich Apache Shiro ganz interesant, das dir helfen kann.
 
Zuletzt bearbeitet:

RelaX

Aktives Mitglied
Ich versuch nur gerade ein gutes SSL-tut zu finden. Das würde das ganze eigentlich klären.

Das Problem liegt zumindest noch nicht darin das im Chat vertrauenwürdige Sachen ausgetauscht werden. Es geht um den Login. Ein Login möchte ich wirklich nicht im Klartext realisieren.

Thanks für die Links.
 

RelaX

Aktives Mitglied
Vielen Dank für die Hilfe.

Also glaub jetzt hab ich das richtig verstanden..


Ich kann mittels SSL die Nachrichten vom Server verschlüsseln.
Dann --> Ich muss ein Privaten Schlüssel zum entschlüsseln erstellen und diesem dem Client geben.
Zusätzlich bekommt der Server einen Öffentlichen Schlüssel damit dieser die Nachrichten dann verschlüsseln kann.
Folge ---> Da nur der Client diesen Schlüssel kennt kann auch nur dieser die Nachricht entschlüsseln.


Jetzt aber die Frage. Wenn ich ein Zertifikat erstelle und bei der Auslieferung diesem jedem Client gebe, dann ist der ja nicht mehr privat sondern öffentlich.

Das heißt doch das ich die Schlüssel zur Laufzeit mit einem Random-pw erstellen muss und dem Server dann den öffentlichen Schlüssel schicken muss.

Dazu finde ich leider nichts.

Wenn du mir jetzt dabei noch helfen könntest wäre das natürlich spitze.

Mfg
 
Zuletzt bearbeitet:

turtle

Top Contributor
Deswegen gibt es ja auch ZWEI Schlüssel,einen privaten und einen öffentlichen...

Der private Schlüssel ist, wie der Name sagt, privat und geheim und wird nie, nie, nicht bekannt gemacht.
Der öffentliche Schlüssel ist,... nun öffentlich.

Dies geht so weit, das die Schlüssel auf Servern hinterlegt werden können, damit alle diesen lesen können.

In der Kryptographie heißen die beteiligten Personen häufig Alice und Bob.
Also nehmen wir an, Alice und Bob haben jeweils ein Schlüsselpaar erstellt.

Alice möchte eine geheime Botschaft an Bob schicken, die nur Bob lesen kann.

Dazu nimmt Alice den Text und verschlüsselt den Text mit dem öffentlichen Schlüssel von Bob. Diesen kann Alice von einem Server im Netz abfragen (oder hat ihn bekommen). Nun kann nur Bob mit seinem privaten Schlüssel die Nachricht entschlüsseln.

Das zweite Szenario ist, wenn Alice etwas an Bob senden möchte (verschlüsselt oder nicht) und quasi die Nachricht unterschreiben möchte,so das Bob sicher ist, das die Nachricht von Alice kam und nicht von jemandem der sich als Alice ausgibt.

Dazu schreibt Alice den Text und signiert diesen,indem aus Text ein Haswert berechnet wird und dieser mit dem privatem Schlüssel verschlüsselt wird, der Nachricht hinzugefügt wird. Bob bekommt die Nachricht und entschlüsselt die Signatur mit dem öffentlichen Schlüssel von Alice. Dann überprüft Bob, ob der Hashwert übereinstimmt mit dem berechneten Hashwert, den Bob auch errechnet hat. Stimmen beide überein, weiß Bob die Nachricht kam von Alice,sonst wurde sie verändert oder ist von einem Bösen.
 

RelaX

Aktives Mitglied
Ok ich glaub langsam weiß ich wie das funktionieren soll bzw. kann.

Glaub ich stehe da aufm Schlauch was das angeht.

Ich spiele mal folgendes durch.

Server ist ausgestattet mit folgendem.

ServerschlüsselPrivate(kennt NUR SERVER)
ServerschlüsselÖffentlich(Kann jeder haben bzw. erfragen)

Client meldet sich nun an Server.

Server sendet ServerschlüsselÖffentlich an Client, wenn Client diesen nicht schon hat.

Client verschlüsselt nun das Geheime mit dem ServerschlüsselÖffentlich und sendet dass dann an den Server.

Server bekommt die Nachricht und kann sie dann mit dem ServerschlüsselPrivate entschlüsseln.

Das hier ist wirklich einleuchtend und kein Problem.

Jetzt kommt aber folgendes, welches mir nicht so wirklich ersichtlich ist bei der ganzen Sache:

Ich biete nun den Client zum Download an, dann muss dieser ja schon über folgendes verfügen:

ClientSchlüsselPrivate(Kennt nur Client)
ClientschlüsselÖffentlich(Kann ja auch jeder haben)

Das muss ja irgendwo existieren bei der Auslieferung. Minimum im Quelltext.

Die Verbindung zum Server bekomme ich ja verschlüsselt hin aber umgekehrt?

Gut ich gebe dem Client einen Hashwert wie vorgeschlagen. Dennoch bringt mir das dann wenig wenn vertrauliche Daten drin stehen.

Weißte was ich meine? Stehe da vor einem Rätsel.
 
Zuletzt bearbeitet:

turtle

Top Contributor
In der Tat ist der Schlüsselaustausch das am meisten unterschätzte Problem in der Kryptographie.

Nehmen wir mal an, der Server möchte zu 1000 Clients eine Nachricht schicken, die nur diese lesen können. Zunächst benötigt der Server die öffentlichen Schlüssel der 1000 Clients und muss die Nachricht 1000 mal schicken, weil der Inhalt nicht genau gleich ist.

In deinem Fall ist das deshalb schwierig, weil nur der Client ein Schlüsselpaar erstellen kann.

Diesen öffentlichen Schlüssel müsste er dem Server mitteilen (vielleicht bei der Registrierung). Danach kennt der Server den (öffentlichen) Schlüssel des Client und kann verschlüsseln.

Das Erstellen eines Schlüsselpaares kann über ein Programm erfolgen
Pseudo-Code
Java:
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");  
keyPairGenerator.initialize(1024);  
KeyPair KPair = keyPairGenerator.generateKeyPair();
 

RelaX

Aktives Mitglied
Okey. Vielen Dank nochmal an dieser Stelle. Jetzt hab ich das ganze endlich raus. Ich gehe wie folgt vor.

Server:
Privater Schlüssel mittels Keystore
Offentlicher Schlüssel mittels Keystore

Client
Offentlicher Schlüssel des Servers

Somit kann jeder Client die Nachrichten verschlüsseln allerdings nicht wieder entschlüsseln. Was der Client schickt ist also absolut geheim.

Jetzt erfolgt die Anmeldung:
Client generiert mittels
Java:
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");  
keyPairGenerator.initialize(1024);  
KeyPair KPair = keyPairGenerator.generateKeyPair();
EasyCrypt ecPri = new EasyCrypt(rsaKeys.getPrivate(), "RSA");
EasyCrypt ecPub = new EasyCrypt(rsaKeys.getPublic(), "RSA");

Dieser wird zusammen mit den Logindaten dem Server mitgeteilt.

Wunderbar!!! Genau das hab ich gebraucht.

Vielen Dank.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Java mit Software ausliefern, Securitybedenken? Allgemeine Java-Themen 4
Zrebna Zuverlässiges Automatisiertes Testen im eigenem Software-Unternehmen aufsetzen - How to? Allgemeine Java-Themen 12
I In Java geschriebene Software nach Mac OS portieren Allgemeine Java-Themen 7
OnDemand Software Zertifizierung Allgemeine Java-Themen 4
Zrebna Wieviele Testfälle muss man hier schreiben? (Software Engineering) Allgemeine Java-Themen 13
Kirby.exe Software Entwicklung Allgemeine Java-Themen 9
Kirby.exe Software für Graphische Visualisierung Allgemeine Java-Themen 20
B Multiuser Software Allgemeine Java-Themen 3
L Nach dem Login // Java Desktop Software Allgemeine Java-Themen 7
W Software-Lizenzen Allgemeine Java-Themen 13
temi Fragen zur Software-Architektur Allgemeine Java-Themen 123
david19 Software AE über Domain laufen lassen Allgemeine Java-Themen 0
M JVM: Client Software Logging und Profiling aktivieren Allgemeine Java-Themen 1
G Job als Programmierer (Software oder Spiele Entwickler) Allgemeine Java-Themen 2
O Architektur für Software Allgemeine Java-Themen 14
wolfgang63 Code snipped Software Allgemeine Java-Themen 1
J Java Software Compare Files und Neue File erstellen Allgemeine Java-Themen 0
A Update Software programmieren Allgemeine Java-Themen 1
O Java Hardware Software Zeit Allgemeine Java-Themen 7
D Software entwicklen und verkaufen Allgemeine Java-Themen 1
OnDemand Software-Tracking Allgemeine Java-Themen 14
OnDemand Java Software verkauf untersagt Allgemeine Java-Themen 4
N Neue Software in Java 7 oder 8? Allgemeine Java-Themen 3
A Sinnvolles Software Design bei Eigenschaftsänderungen von Objekten Allgemeine Java-Themen 7
R Installierte Software auslesen mit Java Allgemeine Java-Themen 3
L Software-Design: Kommunikation mit SerialPort (RXTX) Allgemeine Java-Themen 2
G Best Practices Software-Engineering‏ Allgemeine Java-Themen 3
G RXTX in proprietärer Software nutzen?! Allgemeine Java-Themen 10
A Sicherheit von Software Allgemeine Java-Themen 2
B Software Metriken für Java Allgemeine Java-Themen 36
F LGPL in kommerzieller Software Allgemeine Java-Themen 7
R Konzept eines Software-Rollout/Synchronisation via WebService Allgemeine Java-Themen 5
P Software schützen Allgemeine Java-Themen 8
R software implementierung Allgemeine Java-Themen 3
G Software fuer Auktionshaus Filmundo.de aber wie? Allgemeine Java-Themen 2
X Software soll einen Text vorlesen! Allgemeine Java-Themen 5
X Software schützen! DEMOVersion Allgemeine Java-Themen 12
D JDK fürGPL-Software? Allgemeine Java-Themen 6
S software zum zuschneiden von Bildern Allgemeine Java-Themen 2
C Software für Windows PC mit integierter Db oder Textdatei? Allgemeine Java-Themen 19
J Java Software schreiben? Allgemeine Java-Themen 4
P Bekannte Software in Java? Allgemeine Java-Themen 27
F Paket und Software Design Fragen. Allgemeine Java-Themen 5
M Chat-Software gesucht Allgemeine Java-Themen 3
T GPL Code inkommerzieller Software nutzen? Allgemeine Java-Themen 26
G Software für Java programmierung Allgemeine Java-Themen 5
Z Beipiel zu gut dokumentierten Software Allgemeine Java-Themen 3
B chat-software Allgemeine Java-Themen 5
T Soll ich meine Software als freeware zum download geben? Allgemeine Java-Themen 15
H Andere Software fernsteuern Allgemeine Java-Themen 7
H Software wartet? Allgemeine Java-Themen 11
I JRE mit Application ausliefern Allgemeine Java-Themen 12
N jre ausliefern per wizard anstoßen Allgemeine Java-Themen 10
K Jar mit eigener JRE ausliefern Allgemeine Java-Themen 13
T Native Library ausliefern Allgemeine Java-Themen 12
bernd Programm ausliefern Allgemeine Java-Themen 24
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
8u3631984 Strukturiertes Logging : Jedes Feld in eine seperate Zeile - aber wie ? Allgemeine Java-Themen 2
berserkerdq2 Wenn ich bei Intelij javafx mit maven importieren will, muss ich das in die pom.xml reintun, aber warum noch in module-info.java? Allgemeine Java-Themen 3
N JAVA-Code mit Grafikfenster zeichnet in Windows, aber nicht Mac. Allgemeine Java-Themen 4
M Klasse durch Klassen Aufteilung verbessern, aber wo? Allgemeine Java-Themen 1
Thallius Zeitzone zu einem LocalDate hinzufügen aber ohne es zu ändern... Allgemeine Java-Themen 2
L Kursverlauf vorhersagen mit Deeplearning4j, aber komischer Knick am Anfang der Vorhersage Allgemeine Java-Themen 3
M Test geht auf Travis und mit Github Action schief aber nicht lokal Allgemeine Java-Themen 3
Zrebna FileUtils.cleanDirectory() - aber einen sub-Ordner "verschonen" Allgemeine Java-Themen 1
S Java.exe exestiert, aber irgendwie auch nicht Allgemeine Java-Themen 11
X Collections Gibt es eine Klasse welche die Vorteile von List und HashMap vereint, aber konstante Laufzeit (O(1)) hat in Java? Allgemeine Java-Themen 4
L Korrektur nach der Berechnung vornehmen, aber wie? Allgemeine Java-Themen 11
S Validation Null aber nicht Blank und muss Email sein Allgemeine Java-Themen 22
P Am Application Server - Selbe files aber trotzdem CNF Allgemeine Java-Themen 2
P Element einer Liste wurde hinzugefügt, aber es gibt keinen Zugriff Allgemeine Java-Themen 2
F Input/Output NullPointerException, aber wieso? [Apache POI] Allgemeine Java-Themen 11
T PDF-Generierung (itext) - läuft unter Eclipse, bei har aber leere Seite Allgemeine Java-Themen 39
K Erste Schritte Start einer JAR Datei 2 Wege aber einmal nicht die volle Funktionlität Allgemeine Java-Themen 20
E Exceptions abfangen und dann Programm stoppen - aber wie? Allgemeine Java-Themen 2
T Google OAuth 2.0 aber wie Allgemeine Java-Themen 16
B Web-Anwendung funktioniert mit Java 1.8, aber nicht mit Java 1.7 (auf Client) Allgemeine Java-Themen 5
K Programmfehler aber warum? Allgemeine Java-Themen 5
V Semikolonfehler,aber nicht lösbar.. Allgemeine Java-Themen 6
M String shuffeln, Anfang und Ende aber bleiben gleich Allgemeine Java-Themen 15
S Command funktioniert in Kommandzeile aber nicht mit ProcessBuilder bzw. Runtime.exec auf MAC Allgemeine Java-Themen 3
B NullPointerException - Aber kein Fehler im Code Allgemeine Java-Themen 4
T .dll in java benutzen aber wie? Allgemeine Java-Themen 4
B Input/Output version.cfg konnte nicht im Klassenpfad gefunden werden, ist aber dort. Allgemeine Java-Themen 0
L Prog läuft in der IDE, hängt sich aber am Mac auf Allgemeine Java-Themen 0
E Sms empfangen aber wie? Allgemeine Java-Themen 6
D Input/Output Datei wird lokal aber nicht vom Webserver ausgelesen... Allgemeine Java-Themen 2
J Compiler-Fehler Compiliert unter Eclipse aber nicht mit javac Allgemeine Java-Themen 0
M Code läuft unter windows aber nicht unter Linux Allgemeine Java-Themen 6
B Threads Barrier mit wait()/notify() aber nicht alle Prozesse terminieren Allgemeine Java-Themen 2
S XML lesen, verarbeiten, speichern klappt in Eclipse, aber nicht in der JAR Allgemeine Java-Themen 4
R xx.xx.xx <-nur /w & /. aber !2x '.' hintereinander Allgemeine Java-Themen 6
P wieso kann ich auf bluej exportieren aber auf eclipse nicht? Allgemeine Java-Themen 2
H Scanner soll einen Inputredirect einlesen, liest aber nicht jedes Wort ein. Allgemeine Java-Themen 3
A NoSuchMethod aber Methode ist da! Allgemeine Java-Themen 4
F Objekt einer Datei verschieben, aber Verzeichnispfad fehlt Allgemeine Java-Themen 6
T Jar File läuft unter Windows aber nicht unter linux Allgemeine Java-Themen 10
S java.util.ConcurrentModificationException - aber nur ein Thread Allgemeine Java-Themen 3
nrg Auszulagernder Part, der aber variable Methode/Klasse aufruft Allgemeine Java-Themen 7
F Verschlüsseln, aber welcher Algo Allgemeine Java-Themen 29

Ähnliche Java Themen

Neue Themen


Oben