May be I didn't produced my testkeys correctly ? :
keytool -genkey -keystore testkeys

Thanks again for your help !

Eric

you probably did, but i think you must add your client certificate the server truststore, but i might have misunderstood this page : http://java.sun.com/j2ee/1.4/docs/tutorial/doc/Security6.html (the part about "Creating a Client Certificate for Mutual Authentication" might be of interest to you.
I have build a client that connect "securely" to a secure server using inspiration from code from this url : http://pascal.mvc.mcc.ac.uk:9080/convert/documentation/tutorial
(in the Code appendix)

here is the code, modified somehow to get it to connect in a way that the client or the server would not throw an exception

public static void main(String args[]) {
        //String login = "pascal"; //from the original code
        //String password = "mimas";
        //String handle = "http://pascal.mvc.mcc.ac.uk:8080/ogsa/services/ogsadai/GridDataServiceFactoryNationalStatsLA";
        SecureXmlRpcClient xmlrpc ;
        try {
            // Install the all-trusting trust manager
            SSLContext sc = SSLContext.getInstance("SSL");
            System.out.println(TrustManagerFactory.getDefaultAlgorithm());
            TrustManagerFactory t = TrustManagerFactory.getInstance("SunX509");
            char[]password ="trustword".toCharArray();
            KeyStore k=KeyStore.getInstance("JKS");
            k.load(new FileInputStream("truststore"),password);
            t.init(k);
           
            sc.init(null, t.getTrustManagers(), new java.security.SecureRandom());
           
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
            javax.net.ssl.HostnameVerifier hv=new javax.net.ssl.HostnameVerifier() {
                 public boolean verify(String hostname, SSLSession session) {
                     System.out.println("hostname: "+hostname +" vs "+session.getPeerHost());
                     /* this part is commented out because it doesn't do anything [useful / that would work] anyway
                     try{Certificate[] c1 = session.getPeerCertificates();
                         for (int i = 0; i<c1.length;i++ ){System.out.println("public key : "+c1[i].getPublicKey());}}
                     catch(Exception e){e.printStackTrace();}*/
                     System.out.println("WARNING: Hostname is accepted by default(and not even matched for.)");
                     return true;}
            };
            javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(hv);
            System.out.println("creating URL");
            URL url = new URL("https://127.0.0.1:5555");
            System.out.println("trying to connect to the server securely");
            xmlrpc = new SecureXmlRpcClient(url);
            System.out.println("connected");
} catch (Exception e) {
            System.out.println(e);
            e.printStackTrace();
            xmlrpc=null;
        }
        try{
//do something to fill the v2 vector
//....
//
Integer result = (Integer) xmlrpc.execute("addition",v2);
                System.out.println("Java client : " + result);
}
catch (Exception e)
e.printStackTrace();}
}

////////////////////////////////////
If there is some error in the code, all comments are welcome.
The part about the hostname verifier is highly dubious anyway, so if you have a better idea, I'm open minded.

On a similar topic, I think writing a tutorial on how to get the f@!:/| Secure xml rpc client and server to work would be a very good idea.

Nicolas.