Sicherheit bei entferntem Methodenaufruf mittels RMI

Status
Nicht offen für weitere Antworten.

Recco

Mitglied
Hallo Forum!
Ich habe einen Server geschrieben, der als .jar mit "server" signiert wird:

Java:
public class ServerImpl extends UnicastRemoteObject implements Server{
	
    public ServerImpl() throws RemoteException
    {		
        System.getProperties().put("java.security.policy","java.policy");		
        System.setSecurityManager(new RMISecurityManager());		
        try {				
            LocateRegistry.createRegistry(8080);
            Naming.rebind("rmi://localhost:8080/Server", this);		    
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public String getText()
    {
        return "Ich bin vom Server!";
    }
}

Dazu auch das Interface, welche ich jetzt mal weg lasse.
Dann habe ich noch einen Client geschrieben, der den Server per RMI nutzt:

Java:
public class Client extends JFrame{

private Server obj = null;
	
    public Client()
    {		
        obj = (Server)Naming.lookup("rmi://192.168.62.21:8080/Server");
        System.out.println(obj.getText());
    }

    public static void main(String[] args)
    {		
        Client bla = new Client();
    }
}

Und zu guter Letzt noch die Policy für den Server:

Java:
keystore "file:/C:/Pfad/.keystore";

grant signedBy "server"
{
   // Allow the server to connect
   permission java.net.SocketPermission "*:1024-", "accept, connect, resolve";
};

Das ganze läuft soweit auch problemlos zwischen zwei verschiedenen Rechnern.
Nun ist es ja so, das jeder beliebige Client auf die Methode vom Server zugreifen kann.

Meine Frage: Ist es möglich die Methode so abzusichern, dass nur Clients, die von mir signiert sind, diese benutzen dürfen? Hab schon ein wenig im Internet gesucht aber nichts passendes dazu gefunden. Müsste ich dazu selber einen SecurityManager schreiben oder gibts es da schon etwas fertiges?

Über Eure Hilfe wäre ich sehr dankbar!

Gruß Recco
 
Zuletzt bearbeitet:

Recco

Mitglied
Hat wirklich keine eine Idee um das Problem zu lösen? Oder habe ich meine Frage evtl. unverständlich gestellt?

Wäre über Ideen wirklich sehr dankbar!

Gruß Recco
 

tfa

Top Contributor
Die Überprüfung, ob ein Client eine Service-Methode aufrufen darf, muss auf dem Server stattfinden. Die dazu notwendige Information über den Client, darf nicht im Client selbst fest verdrahtet sein, wie etwa eine Prüfsumme oder sowas. Normalerweise sollte sich der Client mit einem Passwort anmelden, das der Anwender eingibt. Alles andere lässt sich durch Dekompilation/Debugging des Clients knacken oder umgehen.
 

Recco

Mitglied
An eine Anmeldung mit Passwort hatte ich auch schon gedacht.

Ist es denn überhaupt nicht möglich zu überprüfen ob die Client Applikation von mir signiert wurde und, falls das der Fall ist, die entsprechenden Rechte bekommt?

Gruß Recco
 
S

SlaterB

Gast
Netzwerk-Pakete können immer kopiert werden,
der Server kann sich nicht mal sicher sein, dass auf der anderen Seite überhaupt ein Java-Programm sitzt
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben