zeiss-digital-innovation / SynchronizeFX

JavaFX data-binding between JVMs over the network
GNU Lesser General Public License v3.0
54 stars 10 forks source link

Verschlüsselung #30

Closed Tobisaninfo closed 9 years ago

Tobisaninfo commented 9 years ago

Gibt es eine Möglichkeit die Verbindung zu verschlüsseln?

rbi commented 9 years ago

Das geht Momentan nur mit dem tomcat-transmitter. Hier gibt es eine Anleitung wie man den benutzen kann. Eventuell ist die aber nicht mehr ganz up-to-date. Da der tomcat-transmitter ein normales Serlvet ist, kann Verschlüsslung und Authorisierung mit den normalen Tomcat-Mitteln (z.B. web.xml) sichergestellt werden.

Auf Clientseite kann muss man dann den NettyWebsocketClient verwenden. Dabei kann man dann auch nicht den SynchronizeFxBuilder verwenden aber man kann sich dort im Sourcecode ansehen, wie man die einzelnen SynchronizeFX Klassen manuell zusammenstecken muss. Dem NettyWebsocketClientkann man HTTP-Header übergeben mit denen man z.B. Basic-Auth realisieren kann. Anhand des Protokolls ("ws://..." oder "wss://") kann man festlegen ob man eine verschlüsselte oder unverschlüsselte Verbindung haben möchte.

Der NettyWebsocketClient kann momentan nur verschlüsseln. Das Serverzertifikat wird nicht validiert womit aktive Angriffe wie Man-in-the-Middle möglich sind. Passives mithören wird aber verhindert.

Für die Verschlüßlung bei der normalen TCP-Verbindung gibt es Bug #6. Der Hauptaufwand dort ist zu klären wie man ohne jegliche Konfiguration eine verschlüsselte, aber nicht validierte Verbindung aufbauen kann. Der SSL/TLS Stack von Java scheint für den Server unbedingt ein Zertifikat zu benötigen, bietet aber keine Möglichkeiten ein temporäres zur Laufzeit zu erzeugen. Anscheinend muss man eines mit externen Mitteln wie keytool erzeugen, was aber für den Benutzer relativ aufwendig ist.

rbi commented 9 years ago

Further discussion on how to implement encryption in the netty-transmitter can be done in #6.