2011-05-02 1 views
1

J'essaie d'accéder à un site en utilisant HTTP à partir d'une application Java. Comme l'application s'exécute dans un environnement de développement, le certificat correspondant n'est pas approuvé. Lorsque j'utilise le package javax.net.ssl, j'essaie de définir une implémentation TrustManager personnalisée qui permette tout et passe dans le second paramètre de la méthode init du SslContext, mais cela ne fonctionne pas.Problème lors de l'accès au site Web avec Java en utilisant HTTPS (certificat de confiance)

Est-ce que quelqu'un fait travailler quelque chose comme ça? Merci beaucoup pour votre aide! Thierry

+2

un exemple de code? – Manny

+0

Dit que vous utilisez -Djavax.net.debug = all (ou auth) pour voir ce qui se passait? Et comment avez-vous utilisé votre contexte nouvellement créé? Et - bien sûr - comme les certificats sont censés être publics, pourquoi ne pas faire confiance au certificat? –

+0

Merci beaucoup pour votre réponse! Lors de l'utilisation des conseils de débogage, je peux voir que: ENVOYER L'ALERTE TLSv1: fatal, description = certificate_unknow. En fait, je peux faire confiance au certificat parce que c'est un serveur de développement d'une société tierce. –

Répondre

0

Si vous faites confiance au certificat, vous devez l'ajouter au fichier de clés certifiées de votre serveur d'applications. la mise en œuvre d'un gestionnaire de confiance qui n'effectue pas de vérification de certificat est une faille de sécurité.

+0

Bonjour, Merci beaucoup pour votre aide. Oui je suis d'accord avec toi! C'est seulement pour un environnement de développement ... –

1

Il est assez facile à mettre en œuvre un TrustManager qui ne vérifie rien (fonctionne aussi bien côté client et serveur):

public class NoVerifyTM implements X509TrustManager 
{ 
    void checkClientTrusted(X509Certificate[] chain, String authType) { 
    /* Accept All */ 
    } 

    void checkServerTrusted(X509Certificate[] chain, String authType) { 
    /* Accept All */ 
    } 

    X509Certificate[] getAcceptedIssuers() { 
    return new X509Certificate[0] 
    } 
} 

Pour utiliser cette TrustManager:

SSLContext ctx = SSLContext.getDefault(); 
ctx.init(null, new TrustManager[] { new NoVerifyTM() }, null); 
SSLSocketFactory sf = ctx.getSocketFactory(); 

S'il vous plaît noter que (comme dit par @hanwg) un tel gestionnaire de confiance ne devrait être utilisé qu'à des fins de test/prototypage.

+0

Bonjour, Merci beaucoup pour votre réponse. Malheureusement, cela ne résout pas mon problème ... En fait, je pense qu'il y a quelque chose de plus à faire. Peut-être au niveau du gestionnaire de clés? –

+0

Pouvez-vous nous donner un extrait de code que vous avez écrit, ou l'exception que vous obtenez? Ce sera beaucoup plus facile d'aider :) – Jcs

Questions connexes