Java Applet Security

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
TRex
Moderator
Beiträge: 8339
Registriert: 23.11.2006 12:23:54
Wohnort: KA

Java Applet Security

Beitrag von TRex » 09.06.2008 19:17:43

Hi,

ich hab ein Problem mit einem Java-Applet, das sich mit RMI mit einem Server verbinden soll.
Serverseitig ist alles OK, da eine gewöhnliche Java-Anwendung zeitgleich keine Verbindungsprobleme hat. Securitymanager wird nicht verwendet (halt der Standardsecuritymanager).

:google: is ne doofe Schlampe und hilft mir überhaupt nicht... :cry:

Ich weiß nicht genau, wie ich dem Applet den Zugriff erlauben soll, eigentlich kanns ja nur auf Clientseite liegen.

Weiß jemand Rat? Die genaue Fehlermeldung bei der entsprechenden Stelle (wo auf den Serverstub zugegriffen wird):

Code: Alles auswählen

java.security.AccessControlException: access denied (java.net.SocketPermission 141.19.145.35:58802 connect,resolve)
	at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
	at java.security.AccessController.checkPermission(AccessController.java:546)
	at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
	at java.lang.SecurityManager.checkConnect(SecurityManager.java:1034)
	at java.net.Socket.connect(Socket.java:512)
	at java.net.Socket.connect(Socket.java:468)
	at java.net.Socket.<init>(Socket.java:365)
	at java.net.Socket.<init>(Socket.java:179)
	at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)
	at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128)
	at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:595)
	at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:198)
	at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184)
	at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:110)
	at server.Server_Stub.putTipp(Unknown Source)
	at client.Client.putTipp(Client.java:41)
	at gui.ScheinApplet.actionPerformed(ScheinApplet.java:162)
	at java.awt.Button.processActionEvent(Button.java:392)
	at java.awt.Button.processEvent(Button.java:360)
	at java.awt.Component.dispatchEventImpl(Component.java:4410)
	at java.awt.Component.dispatchEvent(Component.java:4240)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

Benutzeravatar
SubOptimal
Beiträge: 1709
Registriert: 10.01.2005 23:25:46
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: bei Frankfurt

Re: Java Applet Security

Beitrag von SubOptimal » 10.06.2008 00:43:48

Hi,

ich vermute mal, dass das Applet nicht von dem Server geladen wird auf den es dann per RMI zugreifen soll. In dem Fall musst Du dem Applet erlauben eine Socketverbindung zum Server aufzubauen.

Abhängig davon ob diese Berechtigung global für alle oder nur für einen speziellen User ist, musst Du die benötigte Berechtigung (entsprechend Deiner Anforderungen angepasst) in /etc/java-*-sun/policy/java.policy oder in ~/.java.policy eintragen.

Code: Alles auswählen

# Beispiel
grant codeBase "http://applet_server:1111/-]" {
  permission java.net.SocketPermission "141.19.145.35:58802-", "connect, resolve";
};
Entweder von Hand oder mittels policytool eintragen.

Weitere Infos zum den Sicherheitseinstellungen findest Du unter [1] und/oder [2]. Speziell die Platzhalter (Minuszeichen und Stern) solltest Du prüfen, damit Du nicht versehentlich mehr erlaubst als Du eigentlich wolltest.

SubOptimal

[1] http://java.sun.com/j2se/1.5.0/docs/gui ... Files.html
[2] http://java.sun.com/javase/6/docs/techn ... Guide.html

Benutzeravatar
TRex
Moderator
Beiträge: 8339
Registriert: 23.11.2006 12:23:54
Wohnort: KA

Re: Java Applet Security

Beitrag von TRex » 10.06.2008 01:59:59

OK, geht :)

Musste das Applet signieren, damit kam ich weiter.

Allerdings hab ich noch ne Portfrage. Und zwar läuft das Teil jetzt im LAN, aber nicht im Internet über NAT. Hab jetzt schon viel gelesen darüber, aber das entscheidende etwas scheint noch zu fehlen. Den Hostname hab ich auf die externe IP gesetzt, das Applet hat zum Verbinden nun die externe IP und nach nem kurzen Versuch bindet der Server wieder auf localhost (wie im Netz gefunden). Funktionieren tuts trotzdem nicht, auch vom selben Rechner aus (weil ja über extern zugegriffen wird).
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

Benutzeravatar
SubOptimal
Beiträge: 1709
Registriert: 10.01.2005 23:25:46
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: bei Frankfurt

Re: Java Applet Security

Beitrag von SubOptimal » 12.06.2008 22:07:20

Hi,
TRex2003 hat geschrieben:Allerdings hab ich noch ne Portfrage. Und zwar läuft das Teil jetzt im LAN, aber nicht im Internet über NAT. ... Funktionieren tuts trotzdem nicht, auch vom selben Rechner aus (weil ja über extern zugegriffen wird).
Könntest Du etwas genauer beschreiben was Du gemacht hast und was funktioniert und was nicht. Irgendwie werd ich aus Deiner letzten Nachricht nicht so ganz schlau.

SubOptimal

Benutzeravatar
TRex
Moderator
Beiträge: 8339
Registriert: 23.11.2006 12:23:54
Wohnort: KA

Re: Java Applet Security

Beitrag von TRex » 12.06.2008 22:18:17

Ist nicht soooo wichtig, wär nur gut fürs allgemeine Verständnis. Und zwar funktioniert RMI bei uns nicht über NAT (also über Router), auch wenn verdammt viele Ports großzügig freigegeben wurden (Kollege hat 20000-60000 freigegeben; weil netstat dazwischen einige Serverprozesse angezeigt hat, die zu RMI gehören). Wahrscheinlich (nur ne Vermutung) funktioniert das mit broadcasts..

Was mich interessiert, ist, wie man RMI über Internet & Router (NAT) zum Laufen bekommt.
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

Antworten