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
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();
}
}
}