2010-04-20 27 views
2

Je sais qu'il y avait beaucoup de questions/réponses sur la façon d'ignorer l'erreur SSL dans le code.JVM pour ignorer la non-concordance de nom de certificat

Sur notre région de développement dev.domain.tld, nous avons configuré un serveur d'application sur SSL.

Le certificat affiché est somedev.domain.tld.

Il n'y a aucun moyen de modifier le certificat, ce sera toujours une incompatibilité de domaine.

Alors, quand je déploie un webservice à https://dev.domain.tld et essayer de se connecter/appeler mon webservice je reçois une exception:

Causée par: java.security.cert.CertificateException: Aucun nom correspondant dev .domaine.tld trouvé

Et j'ai le somedev.domain.tld CERT dans mon magasin de confiance.

Maintenant, j'ai vu beaucoup d'exemples comment changer cela dans le code (en utilisant un Trust Manager qui accepte tous les domaines), mais comment spécifier à la JVM pour ignorer la discordance de domaine lors de la connexion au serveur? Y at-il un argument -Djavax.net.ssl ou quelque chose?

Merci!

MISE À JOUR:

Ou, depuis que je suis avec Spring-WS, est-il un moyen de définir une propriété au printemps pour cela? (WebServiceTemplate)

MISE À JOUR

Je suppose que je vais devoir faire utiliser quelque chose de Spring Security: http://static.springsource.org/spring-ws/sites/1.5/reference/html/security.html

Répondre

2

Cela fonctionne pour moi dans une application cliente de moi, peut-être cela aussi travailler pour vous si vous êtes (ou Spring est en interne) en utilisant HttpsURLConnection n'importe où.

HostnameVerifier hv = new HostnameVerifier() { 
    public boolean verify(String urlHostName, SSLSession session) { 
    log.warning(String.format("Warning: URL Host: '%s' does not equal '%s'", urlHostName, session.getPeerHost())); 
    return true; 
    } 
}; 

HttpsURLConnection.setDefaultHostnameVerifier(hv); 

C'est à peine la meilleure pratique de SSL cependant. La meilleure solution serait d'utiliser un certificat qui correspond au nom d'hôte.