RMI + SSL need help
Hi,
i want create a simple RMI program with SSL sockets but when i run the client i've this type of error:
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184)
at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:322)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at it.enginSoft.rmitextclient.Client.main(Client.java:65)
Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:136)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1586)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:865)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1029)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:621)
at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
at java.io.DataOutputStream.flush(DataOutputStream.java:106)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:211)
... 4 more
Here is my Client Code:
publicstaticvoid main(String[] args){
String ip =null;
String port =null;
try{
ip = args[0];
port = args[1];
}catch(Exception e){
System.err.println("USAGE: Client server_address port");
e.printStackTrace();
System.exit(1);
}
//Create and install a security manager
if (System.getSecurityManager() ==null){
System.setSecurityManager(new SecurityManager());
}
System.setProperty("javax.net.ssl.truststore","C:\\Projects\\RMITextServer\\RMITextServer\\src\\server.keystore");
System.setProperty("javax.net.ssl.keyStorePassword","passwd");
try
{
RMIClientSocketFactory csf =new SslRMIClientSocketFactory();
Registry registry = LocateRegistry.getRegistry(ip,Integer.parseInt(port),csf);
IText remoteObject = (IText)registry.lookup ("RMIText");
String result = remoteObject.text("Hello World!!");
System.out.println(result);
}
catch(Exception e){
System.err.println("Client exception: " + e.getMessage() +" see below for details");
e.printStackTrace( );
}
}
And my server code is this:
publicstaticvoid main(String[] args){
// TODO code application logic here
//creo il security manager
if (System.getSecurityManager() ==null){
System.setSecurityManager(new SecurityManager());
}
System.setProperty("javax.net.ssl.keystore","C:\\Projects\\RMITextClient\\RMITextClient\\src\\client.keystore");
System.setProperty("javax.net.ssl.keyStorePassword","passwd");
try
{
RMIClientSocketFactory csf =new SslRMIClientSocketFactory();
RMIServerSocketFactory ssf =new SslRMIServerSocketFactory();
Registry registry = LocateRegistry.createRegistry(4444,csf,ssf);
IText text =new Server();
registry.bind("RMIText",text);
System.out.println("RMIText bound in registry");
}
catch (Exception e){
System.err.println("Server exception: " + e.getMessage() +" see below for details");
e.printStackTrace( );
System.exit(1);
}
}
Can anyone help me? I've read your post about RMI with SSL but without success..
Thanks
Luka

