[Xfire]Client avec connection SSL (not-yet-commons-ssl)
Bonjour bonsoir,
Je développe actuellement un prototype de client/serveur en Java/Php avec une connection SSL.
Donc mon serveur est en PHP en utilisant NuSoap, ca ca marche bien et le client est en java et utilise Xfire, ca ca marche moins bien.
En fait je suis mauvais langue, ca marche tres bien sans SSL. J'ai un client dynamique (pas les classes generer a partir du WSDL) et en connection http il n'y a pas de probleme. Mais avec mon certificat signé par moi meme, et donc pas validé directement par Java ca pose probleme.
J'en reviens donc au SSL : sur la doc de Xfire il y a un exemple de code : http://xfire.codehaus.org/HTTP+Transport qui utilise la librairie Not-yet-commons-ssl pour valider le certificat. Et donc, autant l'exemple de la librairie ( http://juliusdavies.ca/commons-ssl/T...mple.java.html ) fonctionne nickel autant la version proposé par Xfire ne marche pas et pourtant c quasi similaire.
Dans l'exemple de Juliusdavies il precise que le certificat n'est validé que pour un HttpClient et non pour tout Java, son exemple montre qu'en utilisant URL avec du https ca ne marche pas.
Or dans mon appli avec Xfire je ne vois pas comment faire la connection sans utilisé URL. Vous pouvez voir l'exemple de code de client dynamic ici : http://xfire.codehaus.org/Dynamic+Client
Donc pour finir si vous connaissez comment accepter un certificat (que l'on connait) en Java, avec not-yet-commons-ssl ou sans, je suis preneur. Ou alors si vous savez comment avec Xfire creer un client qui utilise HttpClient je prend aussi
Merci beaucoup d'avance.
Je met les exemples de code pour vous eviter de devoir allez vous balader sur les sites eventuelements.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| exemple de connection SSL avec xfire en utilisant not-yet-commons-ssl :
// Technique similar to http://juliusdavies.ca/commons-ssl/TrustExample.java.html
HttpSecureProtocol protocolSocketFactory = new HttpSecureProtocol();
// "/thecertificate.cer" can be PEM or DER (raw ASN.1). Can even be several PEM certificates in one file.
TrustMaterial trustMaterial = new TrustMaterial(getClass().getResource("/thecertificate.cer"));
// We can use setTrustMaterial() instead of addTrustMaterial() if we want to remove
// HttpSecureProtocol's default trust of TrustMaterial.CACERTS.
protocolSocketFactory.addTrustMaterial(trustMaterial);
// Maybe we want to turn off CN validation (not recommended!):
protocolSocketFactory.setCheckHostname(false);
Protocol protocol = new Protocol("https", (ProtocolSocketFactory) protocolSocketFactory, 8443);
Protocol.registerProtocol("https", protocol); |
Code:
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
| exemple seulement avec not-yet-commons-ssl :
HttpSecureProtocol f = new HttpSecureProtocol();
84
85 // might as well trust the usual suspects:
86 f.addTrustMaterial(TrustMaterial.CACERTS);
87
88 // here's where we start trusting usertrust.com's CA:
89 f.addTrustMaterial(new TrustMaterial( pemCert ));
90
91 Protocol trustHttps = new Protocol("https", f, 443);
92 Protocol.registerProtocol("https", trustHttps);
93
94 HttpClient client = new HttpClient();
95 GetMethod httpget = new GetMethod("https://www.usertrust.com/");
96 client.executeMethod(httpget);
97 String s = httpget.getStatusLine().toString();
98 System.out.println( "HTTPClient: " + s );
99
100 // Notice that Java still can't access it. Only HTTPClient knows
101 // to trust the cert!
102 URL u = new URL( "https://www.usertrust.com/" );
103 try
104 {
105 // This will throw an SSLHandshakeException
106 u.openStream();
107 }
108 catch ( SSLHandshakeException she )
109 {
110 System.out.println( "Java: " + she );
111 } |
Code:
1 2 3 4
| exemple de client dynamic :
Client client = new Client(new URL("http://www.webservicex.net/CurrencyConvertor.asmx?WSDL"));
Object[] results = client.invoke("ConversionRate", new Object[] {"BRL", "UGX"}); |