Java RMI SSL

marcelh

Active Member
Hallo,

ich habe schon in der JUG folgenden Thread verfasst aber wie ich die Sache einschätze meldet sich da keiner drauf. Vielleicht sieht ja einer von euch meinen Fehler.

Vielen Dank
Marcel


Hallo werte Gruppenmitglieder.

Ich hoffe ihr könnt mir bei meinem Problem helfen, ich mache gerade meine ersten Schritte in Sachen SSL+RMI.

Basierend auf den JSSE Beispiel von sun:
http://java.sun.com/j2se/1.4.2/docs/guide/security/jsse/samples/index.html

Der Server startet korrekt und sobald ich mich mit dem Client darauf anmelde meldet er einen Fehler beim Handshake, also beim Schlüsselaustausch:

HelloClient exception: error during JRMP connection establishment; nested exception is:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Da ich den Keystore aus dem Sun-Beispiel verwende und dieser vom Server auch geprüft wird gehe ich davon aus das kein Fehler im Store besteht. Ich bin mir nicht im Klaren darüber ob ich dem Client auch einen Store zuweisen muss da dieser seinen public-schlüssel ja zum server "schicken" muss. In der Sun-Anleitung/Quelltext wird aber an keiner Stelle ein Store erzeugt oder der Client zertifiziert. Vielleicht fällt euch ja etwas ein?


HelloClient.java

public class HelloClient {

public static void main(String args[]) {
try {
// "obj" is the identifier that we'll use to refer
// to the remote object that implements the "Hello"
// interface
Hello obj = null;
obj = (Hello)Naming.lookup("//localhost:2026/HelloServer");
String message = "blank";
message = obj.sayHello();
System.out.println(message+"\n");
} catch (Exception e) {
System.out.println("HelloClient exception: " + e.getMessage());
e.printStackTrace();
}
}
}




HelloImpl.java


public class HelloImpl extends UnicastRemoteObject implements Hello {

public HelloImpl() throws RemoteException {
// super();
super(0,new RMISSLClientSocketFactory(),
new RMISSLServerSocketFactory() );
}

public String sayHello() {
return "Hello World!";
}

public static void main(String args[]) {

//Create and install a security manager
if (System.getSecurityManager() == null) {
System.setSecurityManager(new RMISecurityManager());
}

try {
// HelloImpl obj = new HelloImpl();
// Bind this object instance to the name "HelloServer"
// int server_port = 2026;
// String server_host = "localhost";
//LocateRegistry.createRegistry(server_port);
// Naming.rebind("//" + server_host + ":" + server_port + "/HelloServer", obj);
//System.out.println("HelloServer bound in registry");

//****************************************

Thread mainThread = new Thread() {
int server_port = 2026;
String server_host = "localhost";
public void run() {
try {
HelloImpl obj = new HelloImpl();
// Bind this object instance to the name "HelloServer"
int server_port = 2026;
//String server_host = "localhost";
Registry registry = LocateRegistry.createRegistry(server_port);

//Registry registry = LocateRegistry.createRegistry();
System.out.println("Local Registry OK");
registry.bind("HelloServer", obj);

//Naming.rebind("//" + server_host + ":" + server_port + "/HelloServer", obj);
System.out.println("HelloServer bound in registry");

}
catch (Exception e) {
System.out.println("ObjectServer.main: " + e.getMessage());
e.printStackTrace();
}
}
};
mainThread.start();

} catch (Exception e) {
System.out.println("HelloImpl err: " + e.getMessage());
e.printStackTrace();
}
}
}
 
Zurück
Oben