2012-04-01 8 views
3

Ich habe ein 'natives' Programm (in Java), das mit einer Google Chrome/Chromium-Erweiterung kommunizieren möchte. Die Kommunikation enthält vertrauliche Informationen und sollte für niemanden zugänglich sein, außer für den Benutzer, der sie ausführt (und natürlich für die Wurzel).Benutzer-private Verbindung zwischen meiner Google Chrome-Erweiterung und meinem nativen Programm unter Linux

Welche Technologie soll ich für diesen Kommunikationskanal wählen? Gibt es überhaupt eine Lösung?

EDIT: Natürlich habe ich eine TCP/IP-Port auf dem lokalen Host öffnen konnte, aber wäre es nicht von anderen Benutzern zugänglich sein, ein Konto auf dem gleichen Host zu haben? Gibt es eine Technik, um diese Nebenwirkung zu vermeiden?

Können wir auf Unix-Domain-Sockets von Google Chrome-Erweiterungen zugreifen?

+0

Hinweis für P2P-Enthusiasten: Ich brauche diesen Kommunikationskanal zwischen einem Browser und dem lokalen Knoten meiner P2P-Anwendung. Sie sollten beide auf demselben Host laufen. – Vincent

Antwort

0

Die Lösung, die ich wählte, ist mit einem Server-Socket auf der Loopback-Schnittstelle (/ 127.0.0.1) mit einem gemeinsamen geheimen Schlüssel als ein API-Schlüssel.

Der Grund ist, dass ich nicht, dass in meinem Fall jede App ahnte, die eine Verbindung zu meinem Knoten authentifizierte .. sein mußten, weil jede App auf eine andere Weise behandelt wird, mit unterschiedlichen Zugriffsberechtigungen.

0

Sie könnten dies auf der höheren Ebene mit einer gesicherten SSL-Kommunikation mit Zertifikaten usw. lösen ... Wenn jemand das Zertifikat nicht hat, dann wird die Verbindung abgebrochen. Außerdem würden Sie von der Verschlüsselung profitieren.

+0

Wenn ich eher die Verschlüsselung als die Isolation wähle, müsste ich die verbindliche Chrome-Erweiterung authentifizieren, und ich möchte lieber nicht für die Kommunikation zwischen Programmen, die von demselben Benutzerkonto ausgeführt werden, authentifizieren. Der Grund liegt darin, den Installations-/Einrichtungsprozess für den Benutzer zu vereinfachen. – Vincent

+0

Wie erreichen Sie das Sicherheitsniveau, das Sie mit 'Isolation' suchen? Um eine Isolierung zu erreichen, müssen Sie die Kontrolle übernehmen, und ein durchschnittlicher Unix-Benutzer erreicht niemals die Unix-Kontrolle bei der Verbindung, um Ihre Anforderungen zu erfüllen. Und es gibt keine Garantie, dass dies auch wasserdicht wäre. P2P löst Ihr Problem nicht, es sei denn, Sie verwenden auch gesicherte Kommunikation darüber. Aber dann, warum P2P an erster Stelle verwenden ... – JVerstry

+0

Ich denke über Unix Domain Sockets .. d. H. Dateisystem-basierte Sockets. Mit Isolation meine ich über die Zugriffsrechte innerhalb eines Unix-basierten Hosts. Ich verwende bereits eine Verschlüsselung zwischen Knoten meines f2f-Netzwerks. – Vincent

1

Angenommen, Sie sind bereits vertraut mit TCP, wenn Sie localhost/127.0.0.1 für die Kommunikation verwenden, wäre es nicht sichtbar/verfügbar für andere Maschinen.

+0

True, aber das Problem besteht darin, dass Benutzer von anderen Konten auf demselben Host weiterhin eine Verbindung herstellen können. Ich könnte das für meinen Prototyp verwenden, aber das ist keine endgültige Lösung. – Vincent

+1

Auf Unix-Plattformen könnten Sie wahrscheinlich Unix-Domain-Sockets verwenden, mit denen Sie herausfinden können, wer eine Verbindung herstellt, aber ob dies von Java unterstützt wird oder nicht, weiß ich nicht. Sie könnten natürlich Ihre eigene Authentifizierung zusätzlich zu jedem Protokoll erstellen, aber das ist möglicherweise zu viel für das, was Sie versuchen zu tun. –

+0

@MariusKjeldahl außerdem können die anderen Benutzer das Programm nicht ausführen, während Sie es ausführen. –