Java: Comment afficher une boîte de dialogue permettant à l'utilisateur d'accepter les certificats SSL

StackOverflow https://stackoverflow.com/questions/1644059

Question

Je dispose actuellement d'un certificat auto-signé pour mon serveur Web HTTPS.

Dans mon programme java, il existe un SSLSocketFactory qui créera un socket sur le serveur Web. L'implémentation par défaut de sun bloque le certificat auto-signé. Avec une implémentation propre d’un X509TrustManager, je ne peux que vérifier si la date du certificat est valide.

Existe-t-il une possibilité de laisser l'implémentation par défaut vérifier la validité (date et nom d'hôte, ...), et si aucune boîte de dialogue ne s'affiche pour permettre à l'utilisateur d'accepter ce certificat?

Chaque code que j'ai trouvé jusqu'à présent ne désactivait que la vérification SSL et acceptait tous les certificats non valides.

Était-ce utile?

La solution

Je n'ai pas réellement essayé cela, mais pourquoi ne pouvez-vous pas implémenter votre propre gestionnaire de confiance, qui délègue d'abord le gestionnaire de confiance par défaut pour vérifier si le certificat est valide et si non, demande à l'utilisateur s'il veut toujours le faire accepter le certificat?

Vous pouvez initialiser la plupart des classes de sécurité avec des arguments nuls pour utiliser les valeurs par défaut. Pour obtenir le gestionnaire de confiance par défaut, vous devez obtenir les gestionnaires de confiance disponibles et choisir le premier des tableaux de gestionnaires pour implémenter l'interface X509TrustManager . En règle générale, le tableau ne contient de toute façon qu'un élément.

TrustManagerFactory trustmanagerfactory = 
     TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustmanagerfactory.init((KeyStore)null);
TrustManager[] mgrs = trustmanagerfactory.getTrustManagers();

Après avoir enveloppé le gestionnaire de confiance par défaut avec votre propre extension, vous devez initialiser un contexte SSL et en extraire une fabrique de sockets:

SSLContext sslContext=SSLContext.getInstance("SSL","SunJSSE");
sslContext.init(null, new TrustManager[] {myTm}, null);
SSLSocketFactory sf = sslContext.getSocketFactory();

Utilisez ensuite cette fabrique de sockets pour créer de nouveaux sockets client ou transmettez-les à HttpsURLConnection.setDefaultSSLSocketFactory pour utiliser le protocole https dans les URL avec votre propre gestionnaire de confiance.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top