Salut à tous,
Je suis en train de développer un petit client/serveur en RMI, qui communiquent entre eux sur une couche SSL. Je travaille en java 1.4.2.

Mon serveur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package rmissl;
 
import javax.rmi.ssl.SslRMIClientSocketFactory;
import javax.rmi.ssl.SslRMIServerSocketFactory;
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.*;
import javax.net.ssl.*;
import java.security.*;
import java.io.*;
 
public class HelloServer extends UnicastRemoteObject implements HelloInterface
{
    //------------------
    // Donnees
    //------------------
    public static final long serialVersionUID = 000;
    public static RMIClientSocketFactory csf = null;
    public static RMIServerSocketFactory ssf = null;
    //------------------
    // Methodes de Hello
    //------------------
    public HelloServer() throws RemoteException
    {
        super(0, csf, ssf);
    }
 
    public void message() throws RemoteException
    {
        System.out.println("Chboum");
    }
 
    //------------------
    // Methode main()
    //------------------
    public static void main(String[] args)
    {
        System.setSecurityManager(new RMISecurityManager());
        System.out.println("Hello world !");
 
        try
        {
           HelloInterface obj = new HelloServer();
           csf = new SslRMIClientSocketFactory();
           ssf = new SslRMIServerSocketFactory();
           Registry reg = LocateRegistry.createRegistry(2004, csf, ssf);
 
           reg.rebind("msg", obj);
           System.out.println("Server complete.");
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
 
    }
}
Et mon client :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package rmissl;
 
 
import java.rmi.*;
import java.rmi.registry.*;
import java.rmi.server.*;
import javax.rmi.ssl.SslRMIClientSocketFactory;
import javax.rmi.ssl.SslRMIServerSocketFactory;
public class Client
{
    public static void main(String[] args)
    {
        try
        {
            System.out.println("Preparation client...");
            System.setSecurityManager(new RMISecurityManager());
            Registry reg = LocateRegistry.getRegistry("lat203", 2004, new SslRMIClientSocketFactory());
            System.out.println("Get registry ok.");
            Object obj = reg.lookup("msg"); // <- ICI L'EXCEPTION
            System.out.println("Execution de la routine message.");
            ((HelloInterface)obj).message();
            System.out.println("Execution client ok.");
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}
Là, mon serveur se lance sans problème. À l'exécution du client, voici l'exception que je récupère :

Preparation client...
Get registry ok.
java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is:
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:273)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:171)
at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:306)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at rmissl.Client.main(Client.java:19)
Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:150)
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:117)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1584)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:866)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1030)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:622)
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:198)
... 4 more
Quelqu'un aurait une idée de ce qui se trame là-dessous ?

Merci d'avance.