IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Servlets/JSP Java Discussion :

Authentification Https reste en vie ?!


Sujet :

Servlets/JSP Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 13
    Par défaut Authentification Https reste en vie ?!
    Tout d'abord bonjour à la communauté,

    Voila mon problème est assez simple, je dévellope un website en JSP, sur ce site j'ai une page index qui gère l'authentification, dans cette page je demande une login et un password, que je soumet à un serveur https, si le login est le password match alors la connection sur mon site est validée, le cas échant elle est refusée.

    Mon problème est le suivant dés que je démarre mon serveur tomcat depuis eclipse tout marche bien, si j'entre un mauvais mot de passe je me fait rejeter par contre si je rentre le bon mot de passe je suis logger.

    Où est le problème ? En fait une foit qu'un utilisateur s'est logger correctement si j'ouvre une 2 ieme session quel que soit le login et le password la connection est accepté .....

    Je doit redémarrer mon serveur tomcat pour que tout les mots de passes incorrect soit refusées et le problème se reproduit aprés chaque login effectué correctement.

    Voici la fonction que j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    31
    32
    33
    34
    35
    public static boolean TestUserConnection(String urlToGet, String login,
    			String password) throws Exception {
    		TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
    			public java.security.cert.X509Certificate[] getAcceptedIssuers() {
    				return null;
    			}
     
    			public void checkClientTrusted(X509Certificate[] certs, String authType) {
    			}
     
    			public void checkServerTrusted(X509Certificate[] certs, String authType) {
    			}
    		} };
     
    		SSLContext sc = SSLContext.getInstance("SSL");
    		sc.init(null, trustAllCerts, new java.security.SecureRandom());
    		HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
    		System.setProperty("http.maxRedirects", "2");
    		System.setProperty("https.maxRedirects", "2");
    		System.setProperty("http.keepAlive ", "false");
    		System.setProperty("https.keepAlive ", "false");
     
    		Authenticator.setDefault(new MyAuthenticator(login,password));
    		try{
    			URL url = new URL(urlToGet);
    			BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
    			if ((in.readLine()) != null) {
    				return true;
    			}
    		}
    		catch (Exception e) {
    			return false;
    		}
    		return false;
    	}
    J'ai vraimment l'impression que une sorte de session ou de connection ne se ferme pas naturellement et du coup tant qu'elle est validé je ne prend même pas en compre les nouveaux logins et passwords fournies..... ce qui est assez génant

    Le but de ma fonction serait de demandé au serveur https si ce login et password sont correct et une fois la réponse obtenu ( un boolean ici) je voudrai fermer la connection de facon a pouvoir réessayer 2 sec aprés avec un autre login.

    Si quelqu'un pourrait m'expliquer ou me donné un début de piste ca m'aiderait bcp.

    Merci d'avance à ceux qui essayeront de m'eclairer

  2. #2
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut
    Bonjour,

    En lisant le code, je constate que des ressources sont ouvertes mais aucune d'elle n'est fermée.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 13
    Par défaut
    Au risque de paraît stupide je n'ai pas trouvé de fonction close ou destroy pour SSLContext sc, url.openStream() ou HttpsURLConnection.

    J'ai regardé les fonctions proposé mais auncune me semble pouvoir fermer la connection correctement je crois je vais regarder plus profondément les fonctions proposée mais je pensait avoir fait le tour.

    Merci c'est un peu le début de piste que j'attendait


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    31
    32
    33
    34
    35
    36
    37
    public static boolean TestUserConnection(String urlToGet, String login,
    			String password) throws Exception {
    		TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
    			public java.security.cert.X509Certificate[] getAcceptedIssuers() {
    				return null;
    			}
     
    			public void checkClientTrusted(X509Certificate[] certs, String authType) {
    			}
     
    			public void checkServerTrusted(X509Certificate[] certs, String authType) {
    			}
    		} };
    		System.setProperty("http.maxRedirects", "2");
    		System.setProperty("https.maxRedirects", "2");
    		System.setProperty("http.keepAlive ", "false");
    		System.setProperty("https.keepAlive ", "false");
    		SSLContext sc = SSLContext.getInstance("SSL");
    		sc.init(null, trustAllCerts, new java.security.SecureRandom());
    		URL wsURL = new URL(urlToGet);
    		HttpsURLConnection myConnect = (HttpsURLConnection)wsURL.openConnection();
    		myConnect.setDefaultSSLSocketFactory(sc.getSocketFactory());
    		Authenticator.setDefault(new MyAuthenticator(login,password));
    		try{
    			URL url = new URL(urlToGet);			
    			BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
    			if ((in.readLine()) != null) {
    			//	System.out.println(str);
    			}
    			myConnect.disconnect();
    			return true;
    		}
    		catch (Exception e) {
    			myConnect.disconnect();
    			return false;
    		}
    	}
    J'ai essayé ca , quand je le lance dans une classe java indépendante ca a l'air de bien marché, mais sur mon tomcat j'ai tjs la même erreur .... ca avance a petit pas.

    J'ai refait un test en appelant 4 fois de suite ma fonction j'ai bien la même erreur que sur tomcat, c'est donc bien lié au fait que j'appelle la fonction plusieure fois d'affiler, je n'arrive cependant pas a identifier quelle objet est mal fermé.

  4. #4
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut
    Où se trouve le close du url.openStream?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    public static boolean TestUserConnection(String urlToGet, String login,
    			String password) throws Exception {
                    boolean result = false;
    		TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
    			public java.security.cert.X509Certificate[] getAcceptedIssuers() {
    				return null;
    			}
     
    			public void checkClientTrusted(X509Certificate[] certs, String authType) {
    			}
     
    			public void checkServerTrusted(X509Certificate[] certs, String authType) {
    			}
    		} };
    		System.setProperty("http.maxRedirects", "2");
    		System.setProperty("https.maxRedirects", "2");
    		System.setProperty("http.keepAlive ", "false");
    		System.setProperty("https.keepAlive ", "false");
    		SSLContext sc = SSLContext.getInstance("SSL");
    		sc.init(null, trustAllCerts, new java.security.SecureRandom());
    		URL wsURL = new URL(urlToGet);
    		HttpsURLConnection myConnect = (HttpsURLConnection)wsURL.openConnection();
    		myConnect.setDefaultSSLSocketFactory(sc.getSocketFactory());
    		Authenticator.setDefault(new MyAuthenticator(login,password));
                    BufferedReader in = null;
    		try{
    			URL url = new URL(urlToGet);			
    			in = new BufferedReader(new InputStreamReader(url.openStream()));
    			if ((in.readLine()) != null) {
    			//	System.out.println(str);
    			}
     
    			result = true;
    		}
    		catch (Exception e) {
                            // Affiche la cause de l'exception
    		}
                    finally {
                       // Fermeture silencieuse
                       if (in != null) {
                         try {
                            in.close();
                         catch(IOException e) {
                         }
                         in = null;
                       }
                       myConnect.disconnect();
                    }
                    return result;
    	}

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 13
    Par défaut
    Ba c'est bien le problème je n'ai pas de fonction close ou disconnect pour url .... j'ai du me foirer quelque part

    J'ai essayer ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    try{
    			System.setProperty("http.maxRedirects", "2");
    			System.setProperty("https.maxRedirects", "2");
    			System.setProperty("http.keepAlive ", "false");
    			System.setProperty("https.keepAlive ", "false");
    			SSLContext sc = null;
    			sc = SSLContext.getInstance("SSL");
    			sc.init(null, trustAllCerts, new java.security.SecureRandom());
    			HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
    			Authenticator.setDefault(new MyAuthenticator(login,password));
    			URL url = new URL(urlToGet);
    			InputStream in2 = url.openStream();
    			BufferedReader in = new BufferedReader(new InputStreamReader(in2));
    			if ((in.readLine()) != null) {
    				in.close();
    				in2.close();
    				return true;
    			}
    			else
    			{
    			in.close();
    			in2.close();
    			return false;
    			}
    		}
    		catch (Exception e) {
    			return false;
    		}
    mais même erreur ....
    J'ai essayer également un finaly
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    	System.setProperty("http.maxRedirects", "2");
    		System.setProperty("https.maxRedirects", "2");
    		System.setProperty("http.keepAlive ", "false");
    		System.setProperty("https.keepAlive ", "false");
    		SSLContext sc = null;
    		sc = SSLContext.getInstance("SSL");
    		sc.init(null, trustAllCerts, new java.security.SecureRandom());
    		HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
    		Authenticator.setDefault(new MyAuthenticator(login,password));
    		URL url = new URL(urlToGet); 
    		InputStream in = null;
    		BufferedReader in2 = null;
    		try{
    			 in = url.openStream();
    			 in2 = new BufferedReader(new InputStreamReader(in));
    			if ((in2.readLine()) != null) {
    				in.close();
    				in2.close();
    				return true;
    			}
    			else
    			{
    			in.close();
    			in2.close();
    			return false;
    			}
    		}
    		catch (Exception e) {
    			System.out.println("gneu");
     
    			return false;
    		}
    		finally {
    			if(in!=null)
    			{
    			System.out.println("on ferme");
    			in.close();
    			}
    			if(in2!=null)
    			{
    			System.out.println("on ferme");
    			in2.close();
    			}
    idem .... En tous cas merci d'essayé de me dépanné !!

  6. #6
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut
    As-tu la possibilité de voir ce qui se passe côté du serveur d'authentification?

    Si c'est possible, il serait intéressant de voir si les requêtes arrivent avec la même identification de session (cookie).

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 13
    Par défaut
    Nan malheureusemnt je n'ai aucun accés à se serveur ....

Discussions similaires

  1. Authentification http, Webservice REST
    Par adelafnay dans le forum Services Web
    Réponses: 1
    Dernier message: 18/05/2011, 11h04
  2. [C# 2.0] Authentification HTTPS
    Par murlock dans le forum Windows Forms
    Réponses: 3
    Dernier message: 31/10/2007, 07h12
  3. Authentification HTTP sur 2 serveurs
    Par mecha dans le forum Apache
    Réponses: 5
    Dernier message: 23/06/2006, 17h21
  4. Réponses: 10
    Dernier message: 06/12/2005, 12h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo