2011-02-09 6 views
2

je me connecte à un service Web avec ce client qui fonctionnent bien:Appel WS avec SSL en Java

WSCSI WSCS = new WSCSI("http://localhost:8080/ServiceV2/services/WSCSISoap?wsdl","WSCSI","WSCSISoap"); 
IScoring instance = new ScoringCFA(WSCS); 

assertEquals(true, instance.statusService()); 

je dois utiliser SSL, donc je change l'URL pour: https://localhost:8181/ServiceV2/services/WSCSISoap?wsdl

Et ajouter ceci dans les options VM:

-Djavax.net.ssl.trustStore="C:\cacerts.jks" 

('Keytool -list -keystore « C: \ cacerts.jks', quand je lance cette commande je vois que le certificat que j'ai besoin est là)

Quand je lance le client obtenir cette erreur:

java.security.cert.CertificateException: No name matching localhost found.) 

Répondre

2

C'est probablement parce que le certificat que vous utilisez est émis par rapport à un nom d'hôte spécifique (www.myhost.com). Essayez la solution dans ce article. Mais attention, l'exemple de code est uniquement destiné au test localhost, supprimez-le dès que vous passez aux tests d'intégration/d'assemblage sur un serveur approprié.

+0

Merci beaucoup! Maintenant, quand je dois déployer le projet en production, Je voudrais que le CERT ait le nom du domaine que j'essaie de connecter? (C'est un problème de cert en dehors du code ...?) Et Si je déploie le client avec ce "FIX", le problème est peut-être que je me connecte à un hôte inconnu? – JMira

+0

JMira - ce 'correctif' n'est pas un correctif, mais un 'hack' uniquement destiné au test localhost, vous devriez supprimer ce code avant de passer en production. Oui, le risque est que vous appeliez un hôte incorrectement identifié (bien que le 'hack' ne fonctionne qu'avec 'localhost' comme nom d'hôte). En production, l'URL que vous essayez d'invoquer doit correspondre au nom d'hôte avec lequel le serveur s'identifie, alors oui, le nom du certificat doit correspondre au domaine auquel vous vous connectez. J'espère que cela apporte plus de clarté. –