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

Sécurité Java Discussion :

[LDAP]Encryptage mot de passe


Sujet :

Sécurité Java

  1. #1
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 157
    Points : 43
    Points
    43
    Par défaut [LDAP]Encryptage mot de passe
    Bonjour,

    J'ai écrit une méthode permettant d'encrypter mon mot de passe (MD5) :

    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
     
    public String MD5Password (String credentials) throws NoSuchAlgorithmException  {
        /*
        * Encode la chaîne passée en paramètre avec l'algorithme MD5
        *
        * @param credentials : chaîne à encoder
        * @return la valeur (string) hexadécimale sur 32 bits
        */
     
        byte[] uniqueKey = credentials.getBytes();
        byte[] hash = null;
        try {
          hash = MessageDigest.getInstance("MD5").digest(uniqueKey);
        }
        catch ( NoSuchAlgorithmException e ) {
          throw new Error ("Error : Encryptage du mot de passe! (MD5Password)", e );
        }
        StringBuffer hashString = new StringBuffer();
        for (int i=0; i<hash.length; i++) {
          String hex = Integer.toHexString(hash[i]);
          if (hex.length() == 1) {
            hashString.append('0');
            hashString.append(hex.charAt(hex.length()-1));
          }
          else {
            hashString.append(hex.substring(hex.length()-2));
          }
        }
        return hashString.toString();
      }
    Le but est de modifier mon mot de passe dans LDAP.

    J'ai écrit une méthode permettant de modifier un attribut tel que le mail. Est-ce que je peux aussi l'utiliser pour modifier mon mot de passe ou y'a-t'il une astuce ?

    Voilà ma méthode pour la modification de l'attribut :
    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
     
    public void modAttr (String dn, String attribut, String valeur) throws ch.esnig.ldap.ClientLDAPException {
        if (! getAttr (attribut, dn)) {
          System.out.println ("Cet attribut ne contient pas de valeurs!");
        }
        else {
          try {
            // Sauvegarde les attributs d'origine
            Attributes originaux = ctx.getAttributes (dn, new String[] {attribut});
     
            // Spécifie le changement à effectuer
            // Crée un tableau de modifications à effectuer
            ModificationItem[] mods = new ModificationItem[1];
     
            // Remplace l'attribut "mail" avec une nouvelle valeur
            mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute (attribut, valeur));
     
            // Validation de la modification
            ctx.modifyAttributes (dn, mods);
     
            // Affichage du nouvel attribut
            System.out.println ("**** Nouvel attribut ****");
            printAttributes (dn);
          }
          catch ( javax.naming.NamingException e ) {
            throw new ch.esnig.ldap.ClientLDAPException("Error : Modification d'un attribut! (modAttr)", e );
          }
        }
      }
    Ce serait sympa si quelqu'un pouvait m'aider.

    Merci d'avance !

  2. #2
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 157
    Points : 43
    Points
    43
    Par défaut
    En fait, dans mon main, j'appelle mes méthodes comme suit :

    J'appelle la méthode MD5Password (credentials) qui m'encrypte mon mot de passe sans problème.
    Mais après, pour modifier le mot de passe, je ne sais pas comment faire pour qu'il prenne en compte mon mot de passe encrypté.

    Mais je pense que le code de ma méthode modAttr n'est pas trop correct.

    Je ne connais pas en fait la procédure exacte pour modifier un mot de passe.

    Est-ce que quelqu'un a déjà du faire ce genre de chose (LDAP/JNDI) ?

    Merci d'avance.

    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
     
    try {
            res = client.MD5Password(credentials);
            System.out.println ("Password MD5 : " + res);
          }
            catch (NoSuchAlgorithmException e) {
              e.printStackTrace();
          }
     
          try {
            client.modAttr (principal, attribut, valeur);
          }
          catch ( ClientLDAPException e ){
            e.printStackTrace();
          }

  3. #3
    Membre habitué Avatar de Oui-Oui MB
    Homme Profil pro
    Architecte technique
    Inscrit en
    Avril 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Avril 2005
    Messages : 111
    Points : 127
    Points
    127
    Par défaut
    Attention que tu ne crypte pas ton mot de passe avec MD5. Tu fais juste un digest du mot de passe (en gros une empreinte qui, avec le mot de passe, certifie l'intégrité de celui-ci donc qu'il n'a pas changé)...

    Et je ne pense pas qu'on puisse modifier son mot de passe dans le LDAP via Java directement. Sauf si il y a un autre attribut mot de passe définit par l'admin...

  4. #4
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 157
    Points : 43
    Points
    43
    Par défaut
    Est-ce que tu connais une méthode alors qui pourrait crypter mon mot de passe en MD5 ?

  5. #5
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 157
    Points : 43
    Points
    43
    Par défaut
    J'aimerais aussi préciser que je me connecte avec mon propre uid et que j'ai modifié les droits dans le fichier slapd.conf de manière à ce que je puisse modifier mon propre mot de passe.

    Mais je ne sais pas comment procéder pour y arriver...

    Merci d'avance...

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 81
    Points : 84
    Points
    84
    Par défaut
    Avec quel annuaire LDAP travailles tu ?

    Sais tu quel est l'attribut correspondant à ton mot de passe : password, unicodepwd ... ?

  7. #7
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 157
    Points : 43
    Points
    43
    Par défaut
    Je travaille avec l'annuaire JXplorer (JNDI) et l'attribut correspondant au mot de passe est userPassword.

  8. #8
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 157
    Points : 43
    Points
    43
    Par défaut
    Lorsque je compile mon code, je rencontre l'erreur suivante :
    • ch.ldap.ClientLDAPException: Exception rencontree : Error : Modification d
      'un attribut! (modAttr): [LDAP: error code 50 - Insufficient Access Rights]
      at ch.ldap.ClientLDAP.modAttr(ClientLDAP.java:103)
      at ch.ldap.ClientLDAPUI.main(ClientLDAPUI.java:60)
      Caused by: javax.naming.NoPermissionException: [LDAP: error code 50 - Insufficie
      nt Access Rights]; remaining name 'uid=geiers, ou=personne, dc=ecole, dc=ch'


    Pourtant, j'ai modifié les droits dans mon fichier slapd.conf :
    • access to dn.base= by * read
      access to * by * read

      access to attr=userPassword
      by self write
      by anonymous auth


    Ce serait sympa si quelqu'un pouvait m'aider...

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 81
    Points : 84
    Points
    84
    Par défaut
    Ton erreur se produit elle seulement sur la modification du mot de passe ou sur la modification de n'importe quelle attribut ?

    Arnaud

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 81
    Points : 84
    Points
    84
    Par défaut
    Je ne connais pas JXplorer.

    Mais est ce vraiment un serveur LDAP ?

    J'ai l'impression que ce n'est qu'un client qui permet d'accéder à des annuaires LDAP.

    Si JXplorer n'est pas un serveur LDAP, quel est le ton serveur LDAP ?

    Arnaud

  11. #11
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 157
    Points : 43
    Points
    43
    Par défaut
    Cette erreur se produit aussi si j'essaye de modifier un autre attribut tel que le mail.

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 81
    Points : 84
    Points
    84
    Par défaut
    Es tu authentifié sur ton annuaire ou est ce une connection en anonyme ?

    Arnaud

  13. #13
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 157
    Points : 43
    Points
    43
    Par défaut
    Je me suis authentifiée avec mon uid sur l'annuaire.

    Sandra

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 81
    Points : 84
    Points
    84
    Par défaut
    peux t'on voir un peu plus de ton code ?

    Phase d'authentification suivi de la mise à jour de l'attribut.

  15. #15
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 157
    Points : 43
    Points
    43
    Par défaut
    Voici ma connection :
    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
     
    public void connection (String url, String authentication, String principal, String credentials) throws ch.esnig.ldap.ClientLDAPException {
        Hashtable<String,String> env;
        env = new Hashtable<String,String>();
        env.put (Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
        env.put (Context.PROVIDER_URL, url);
        env.put (Context.SECURITY_AUTHENTICATION, authentication);
        env.put (Context.SECURITY_PRINCIPAL, principal);
        env.put (Context.SECURITY_CREDENTIALS, credentials);
     
        try {
          ctx = new InitialDirContext(env);
        } catch ( javax.naming.NamingException e ) {
    	throw new ch.esnig.ldap.ClientLDAPException("Error : Initialisation du context LDAP! (connection)", e );
        }
      }
    les attributs sont affectés au travers de la ligne de commande (run.bat) :
    • java -classpath ./classes ch.esnig.ldap.ClientLDAPUI -url="ldap://localhost:389" -authentication="simple" -principal="uid=geiersberger, ou=personne, dc=esnig, dc=ch" -credentials="esnig05"


    Et voici mon code pour modifier un attribut :
    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
     
    public boolean getAttr (String attribut, String dn) throws ch.esnig.ldap.ClientLDAPException {
        try {
          Attributes attrs = ctx.getAttributes(dn);
          attrs.get(attribut);
     
          if (attrs != null) {
            return (true);
          }
          else {
            return (false);
          }
        }
        catch ( javax.naming.NamingException e ) {
          throw new ch.esnig.ldap.ClientLDAPException("Error : Retour d'un attribut! (getAttr)", e );
        }
      }
     
      public void modAttr (String principal, String attribut, String valeur) throws ch.esnig.ldap.ClientLDAPException {
        if (! getAttr (attribut, principal)) {
          System.out.println ("Cet attribut ne contient pas de valeurs!");
        }
        else {
          try {
            // Sauvegarde les attributs d'origine
            Attributes originaux = ctx.getAttributes (principal, new String[] {attribut});
     
            // Spécifie le changement à effectuer
            // Crée un tableau de modifications à effectuer
            ModificationItem[] mods = new ModificationItem[1];
     
            // Remplace l'attribut "mail" avec une nouvelle valeur
            mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute (attribut, valeur));
     
            // Validation de la modification
            ctx.modifyAttributes (principal, mods);
     
            // Affichage du nouvel attribut
            System.out.println ("**** Nouvel attribut ****");
            printAttributes (principal);
          }
          catch ( javax.naming.NamingException e ) {
            throw new ch.esnig.ldap.ClientLDAPException("Error : Modification d'un attribut! (modAttr)", e );
          }
        }
      }
    Merci d'avance,
    Sandra
    [/list]

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 81
    Points : 84
    Points
    84
    Par défaut
    Il y a quelque chose que je ne comprends pas.

    Pour t'authentifier tu utilises le uid : uid=geiersberger, ou=personne, dc=esnig, dc=ch

    Or l'erreur remontée sur le changement d'attribut indique que tu travaillais sur l'uid : 'uid=geiers, ou=personne, dc=ecole, dc=ch

    Est ce juste une erreur de retranscription dans le forum ?

    Arnaud

  17. #17
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 157
    Points : 43
    Points
    43
    Par défaut
    oui c'est juste une erreur de retranscription.

    Les valeurs exactes sont :
    uid=geiersberger, ou=personne, dc=esnig, dc=ch

    Désolée

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 81
    Points : 84
    Points
    84
    Par défaut
    Je ne suis pas sur mais je pense que ton pb ne provient pas de ton code mais seulement de te droits sur l'annuaire.

    Je ne maîtrise pas le fichier slapd.conf mais pour tes tests sur le mail, je n'ai pas l'impression que quiconque ait des droits de modification sur le mail.
    En dehors du password, le reste est en lecture.

    De plus, je pense que l'ordre à de l'importance et je me demande si tes premières règles n'annule pas tes règles sur le password.

    Tu peux essayer en remplacant tes règles par :

    # ACL1
    access to attr=userpassword
    by self write
    by anonymous auth
    by * none
    # ACL2
    access to *
    by self write
    by users read
    by * none


    Cf. : http://www.zytrax.com/books/ldap/ch6/

    Arnaud

  19. #19
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 157
    Points : 43
    Points
    43
    Par défaut
    Oui c'est bien ça. J'avais oublié que l'ordre avait de l'importance...

    En fait, j'avais inversé ACL1 avec ACL2 et comme tu l'as bien pensé, ça m'annulait les droits que j'avais décrits pour modifier mon mot de passe.

    En tout cas, un grand merci Arnaud.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. LDAPS et mot de passe
    Par Spoonnny dans le forum Accès aux données
    Réponses: 4
    Dernier message: 04/10/2013, 17h35
  2. [LDAP] vérification mot de passe
    Par djibril dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 31/08/2010, 01h03
  3. Encryptage mot de passe d'une source de données
    Par jejedi95 dans le forum Wildfly/JBoss
    Réponses: 0
    Dernier message: 03/10/2008, 16h08
  4. [LDAP] Chiffrement mot de passe LDAP pour interface en PHP
    Par sedannais dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 10/08/2007, 16h17
  5. Cacher encryptage mot de passe MD5
    Par cirdec dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 21/02/2006, 20h10

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