Morgen,
ich habe ein kleinen Server/Client mithilfe ein paar Tutorials geschrieben. Diese beiden Programme funktionieren auch, sofern ich sie nur über die Konsole starte.
Nun wollte ich den Client als Applet umschreiben, also als eine Art Server Status Tool. Dazu verwende ich Socket, was aber zu einigen Problemen geführt hat.
Als ich mich dann erkundigt hatte was denn das Problem war, habe ich nach Signieranleitungen gesucht und bin auf http://www.java-forum.org/applets/16717-applets-webstart-anwendungen-signieren.html gestoßen.
Da ich unter Linux bin, kann ich die bat-Datei nicht einfach ausführen. Ich habe aber einfach alle Befehle per Hand ausgeführt.
Zu aller erst einmal den Quellcode des Applets:
Das Jar-Archive ist aber signiert:
Und der appletviewer gibt mir diese Ausgabe:
Ich habe im Quelltext die echte IP-Adresse gegen localhost ausgetauscht und in der appletviewer Ausgabe gegen ***IP-Adresse*** ersetzt. Es handelt sich dabei aber um eine statische IP-Adresse, die ich aus Sicherheitsgründen nicht unbedingt öffentlich machen will.
Ich hatte dann nach "java.security.AccessControlException: access denied (java.net.SocketPermission" gesucht, aber leider nur Anleitungen für ein policy-File gefunden. Ich finde aber, dass die Lösung nicht sehr schön ist, wenn ich dem Benutzer, der eigentlich gar keine Ahnung von so etwas hat, erklären muss, wie er ein policy-File erstellt.
Außerdem dachte ich, dass ich es umgehen kann, da in L-ectron-Xs Anleitung steht:
Irgendwelche Ideen? Ich kann mir eigentlich nicht vorstellen, dass ich der erste bin dem so etwas passiert, aber ich konnte bisher noch nichts finden, was dem entspricht. Also entschuldigt bitte, wenn ich hier einen Thread geöffnet habe, der wohlmöglich schon in ähnlicherweise existiert.
Danke
ich habe ein kleinen Server/Client mithilfe ein paar Tutorials geschrieben. Diese beiden Programme funktionieren auch, sofern ich sie nur über die Konsole starte.
Nun wollte ich den Client als Applet umschreiben, also als eine Art Server Status Tool. Dazu verwende ich Socket, was aber zu einigen Problemen geführt hat.
Als ich mich dann erkundigt hatte was denn das Problem war, habe ich nach Signieranleitungen gesucht und bin auf http://www.java-forum.org/applets/16717-applets-webstart-anwendungen-signieren.html gestoßen.
Da ich unter Linux bin, kann ich die bat-Datei nicht einfach ausführen. Ich habe aber einfach alle Befehle per Hand ausgeführt.
Zu aller erst einmal den Quellcode des Applets:
Java:
import java.awt.Graphics;
import java.applet.Applet;
import java.io.*;
import java.net.*;
public class OnlineStatusApplet extends Applet
{
private String statusText;
private boolean serverStatus;
public void init()
{
Socket socket = null;
BufferedReader in = null;
PrintWriter out = null;
serverStatus = false;
try {
// Ich habe die echte IP gegen "localhost" ersetzt!
socket = new Socket("localhost", 4442);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream());
} catch(UnknownHostException e) {
System.err.println("Don't know about host");
//System.exit(1);
} catch(IOException e) {
System.err.println("Couldn't connect");
//System.exit(1);
}
out.println("Hello, are you there?");
try {
while(in.readLine() != null) {
System.out.println("Server's online!");
serverStatus = true;
}
in.close();
socket.close();
} catch(IOException e) {
System.err.println(e.toString());
serverStatus = false;
//System.exit(1);
}
}
public void paint(Graphics gc)
{
if(serverStatus == true) {
statusText = new String("Der Server ist online!");
} else {
statusText = new String("Der Server ist offline!");
}
gc.drawString(statusText, 5, 15);
}
}
Das Jar-Archive ist aber signiert:
Code:
$ jarsigner -verify -verbose -certs osa.jar
148 Sun May 29 23:15:58 CEST 2011 META-INF/MANIFEST.MF
269 Sun May 29 23:15:58 CEST 2011 META-INF/SIGNER.SF
843 Sun May 29 23:15:58 CEST 2011 META-INF/SIGNER.DSA
0 Sun May 29 23:15:26 CEST 2011 META-INF/
smk 1785 Sun May 29 23:15:12 CEST 2011 OnlineStatusApplet.class
X.509, CN=Christian Wansart, C=de (signer)
[certificate is valid from 29.05.11 22:43 to 26.05.21 22:43]
s = signature was verified
m = entry is listed in manifest
k = at least one certificate was found in keystore
i = at least one certificate was found in identity scope
jar verified.
Und der appletviewer gibt mir diese Ausgabe:
Code:
java.security.AccessControlException: access denied (java.net.SocketPermission ***IP-Adresse***:4442 connect,resolve)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:374)
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:524)
at java.net.Socket.connect(Socket.java:478)
at java.net.Socket.<init>(Socket.java:375)
at java.net.Socket.<init>(Socket.java:189)
at OnlineStatusApplet.init(OnlineStatusApplet.java:19)
at sun.applet.AppletPanel.run(AppletPanel.java:424)
at java.lang.Thread.run(Thread.java:662)
Ich habe im Quelltext die echte IP-Adresse gegen localhost ausgetauscht und in der appletviewer Ausgabe gegen ***IP-Adresse*** ersetzt. Es handelt sich dabei aber um eine statische IP-Adresse, die ich aus Sicherheitsgründen nicht unbedingt öffentlich machen will.
Ich hatte dann nach "java.security.AccessControlException: access denied (java.net.SocketPermission" gesucht, aber leider nur Anleitungen für ein policy-File gefunden. Ich finde aber, dass die Lösung nicht sehr schön ist, wenn ich dem Benutzer, der eigentlich gar keine Ahnung von so etwas hat, erklären muss, wie er ein policy-File erstellt.
Außerdem dachte ich, dass ich es umgehen kann, da in L-ectron-Xs Anleitung steht:
Ein nicht signiertes Applet wird daher bei einem unerlaubten Zugriff immer eine java.security.AccessControlException werfen.
Irgendwelche Ideen? Ich kann mir eigentlich nicht vorstellen, dass ich der erste bin dem so etwas passiert, aber ich konnte bisher noch nichts finden, was dem entspricht. Also entschuldigt bitte, wenn ich hier einen Thread geöffnet habe, der wohlmöglich schon in ähnlicherweise existiert.
Danke