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

JSF Java Discussion :

sécurisation avec Jaas.


Sujet :

JSF Java

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Par défaut sécurisation avec Jaas.
    Bonjour à tous. Tout d'abord, n'hésitez pas à me corriger si je ne suis pas au bon endroit...
    Je rencontre des difficultés pour sécuriser l'accès à une application web JEE, déployée sur un serveur wildfly 10. On me demande d'utiliser les mécanismes Jaas avec un annuaire openLdap. Tout fonctionne parfaitement si les mots de passe du ldap son au format SSHA, je me connecte sans problèmes. En revanche lorsque les mots de passe des membres du ldap sont encryptés au format SHA-512 ( sécurité que l'on m'a conseillée, j'ignore si c'est une bonne idée ...) je ne peux plus me connecter à l'appli.
    Extrait de mon standalone.xml :
    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
     
    <security-domain name="myRealm" cache-type="default">
                        <authentication>
                            <login-module code="org.jboss.security.auth.spi.LdapLoginModule" flag="required">
                                <module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
                                <module-option name="java.naming.provider.url" value="ldap://xxx:389/"/>
                                <module-option name="java.naming.security.authentication" value="simple"/>
                                <module-option name="principalDNPrefix" value="uid="/>
                                <module-option name="principalDNSuffix" value=",ou=xxx,ou=xxx,dc=xxx,dc=xxx"/>
                                <module-option name="rolesCtxDN" value="ou=xxx,ou=xxx,dc=xxx,dc=xxx"/>
                                <module-option name="uidAttributeID" value="member"/>
                                <module-option name="matchOnUserDN" value="true"/>
                                <module-option name="roleAttributeID" value="cn"/>
                                <module-option name="roleAttributeIsDN" value="false"/>
    			</login-module>
                        </authentication>
                    </security-domain>
    Mon fichier jboss-web.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE xml>
    <jboss-web>
    	<security-domain>myRealm</security-domain>
    </jboss-web>
    Et enfin un extrait de mon formulaire de connexion (utilisation également de Primefaces):

    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
     
    <p:panelGrid styleClass="panelGridCenter sansgrille">
        		 		<p:row>
        	 				<p:column rowspan="2">
        	 					<h:graphicImage library ="default"  name="/images/divers/logo.png" styleClass="image"/>
        	 				</p:column>
        	    			<p:column>
            					<p:outputLabel for="j_username" value="Login : " style="background:none"/>
            				</p:column>
            				<p:column>
            					<p:inputText id="j_username"  required="true" requiredMessage="Le login est obligatoire..." />
            				</p:column>
            			</p:row>
      					<p:row>
      						<p:column>
            					<p:outputLabel for="j_password" value="Mot de passe : " style="background:none"/>
            				</p:column>
            				<p:column>
            					<p:password id="j_password" required="true"  feedback="false" requiredMessage="Le mot de passe est obligatoire..." />
            				</p:column>
        				</p:row>
        				<p:row >
      						<p:column colspan="3">
            					<p:commandButton value="Connexion" type="submit" ajax="false"/>
        					</p:column>
        				</p:row>
        			</p:panelGrid>
    Je suis novice donc merci de votre indulgence et de vos conseils...

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    ce module se content de faire un bind sur le DN de l'utilisateur, en utilisant son mot de passe. Donc le serveur LDAP est le seul qui checke le mot de passe. Tu es sure que le serveur fonctionne correctement? Tu arrive à t'y connecter avec ton user / pass? Est-ce que le module te crache des erreurs dans les logs?

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Par défaut
    Bonjour tchize_. Très flatté qu'une "pointure" du forum comme toi se penche sur mon problème.
    Je pense que le serveur fonctionne bien, puisque je m'y connecte sans souci et l'authentification de mon appli ainsi que les rôles définis (utilisateur ou admin) fonctionnent très bien, mais uniquement quand les mots de passe de mes utilisateurs dans le ldap sont "hachés" au format SSHA. quand je les modifie pour les enregistrer en SHA-512, je ne peux plus me connecter, l'authentification échoue. ( je manage le ldap avec Apache Directory Studio, car pas très à l'aise avec les fichiers ldif et les commandes).
    Tout ce que j'ai trouvé dans les logs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    (...)
    2017-01-10 15:57:58,026 DEBUG [org.jboss.security] (default task-13) PBOX00281: Password hashing activated, algorithm: SHA-512, encoding: hex, charset: UTF-8, callback: null, storeCallBack: null
    2017-01-10 15:57:58,100 DEBUG [org.jboss.security] (default task-13) PBOX00283: Bad password for username test
    2017-01-10 15:57:58,111 DEBUG [org.jboss.security] (default task-13) PBOX00206: Login failure: javax.security.auth.login.FailedLoginException: PBOX00070: Password invalid/Password required
    (...)

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Tu as fais quoi pour configurer ton serveur LDAP en SHA-512? Avec un compte hashé en SHA-512, tu arrive à t'y connecter? Il n'y a que wildfly qui échoue? Tu es sur que ton serveur LDAP est configuré correctement à la base?

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Par défaut
    Alors... contrairement à ce que je pensais je crois effectivement que mon ldap n est pas bien configuré. Après vérification je ne me connecte pas au ldap. Apparemment il lui manquerait un module pour activer le sha-512. Malheureusement je n ai pas trouvé de piste claire pour faire ça. J ai donc opté pour une autre solution : je stocke en texte brut les mots de passe dans le ldap mais je les crypte en sha-512 depuis mon appli java. Le but étant à l origine de permettre à mes utilisateurs de modifier le mot de passe qui leur est attribué au départ sans que l administrateur du ldap puisse y accéder ensuite . Et évidemment d assurer un minimum de sécurité. Je suis certainement à côté de la plaque mais j ai lu qu'il était recommandé de laisser le stockage en clair des mots de passe dans le ldap.
    Bref, je suis un peu dans le brouillard. ..
    Qu en penses tu ?

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    non on ne stocke pas de mots de passe en clair. Mais le LDAP doit normalement se charger de l'encryption, ce n'est pas le problème du module jaas, qui lui transfère le user/pass reçu vers le LDAP et lui demande "c'est bon ça?"

  7. #7
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Par défaut
    Bonjour Tchize_ .Merci pour les éclaircissements. Alors pour essayer "d'activer" le sha 512 au niveau du serveur ldap, j'ai utilisé ce fichier ldif : (pas de moi, mais trouvé ici : https://kopfkrebs.de/2011/06/openlda...rt-hashes.html)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    dn: cn=config
    changetype: modify
    add: olcPasswordCryptSaltFormat
    olcPasswordCryptSaltFormat: $6$%.16s
    -
    add: olcPasswordHash
    olcPasswordHash: {CRYPT}
    Malheureusement, rien de mieux... quand je teste le mot de passe ( toujours crée et testé depuis Apache Directory Studio) il est bon, mais impossible de se connecté au ldap avec l'utilisateur.
    Quand je liste mes utilisateurs avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     ldapsearch -x -D "cn=admin,dc=xxx,dc=yyy" -W -b "dc=xxx,dc=yyy"
    Ils sont bien présents avec leur mot de passe apparemment cryptés, du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    # toto, aaa, xxx.yyy
    dn: uid=toto,ou=aaa,dc=xxx,dc=yyy
    cn: Toto Lapin
    sn: Toto
    mail: toto@email.com
    objectClass: inetOrgPerson
    uid: toto
    userPassword:: e3NoYTUxMn03aWF3M1VyMzUwbXFHbzdqd1FycGtqOWhpWUIzTGtjL2lCbWwxSlF
     PRGJKNndZWDRvT0hWK0UrSXZJaC8xbnNVTnpMREJNeGZxYTJPYjFmMUFDaW8vdz09
    Je sèche complètement, il y a sûrement un truc que je n'ai pas compris ....

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    tu peux donner la config jaas qui correspond à cet output ? Parce que je vois deux ou dans ta config tout en haut, mais un seul dans ton output de search, donc ton suffix est probablement pas correct.

Discussions similaires

  1. [Sécurité] Comment Sécuriser mon appli avec JAAS
    Par leonce dans le forum Java EE
    Réponses: 3
    Dernier message: 02/12/2011, 22h43
  2. Sécuriser un web service avec JAAS ou Spring-Security
    Par Le Marlou dans le forum Services Web
    Réponses: 1
    Dernier message: 26/07/2011, 18h37
  3. Sécuriser avec mot de passe
    Par jabrane198 dans le forum Tcl/Tk
    Réponses: 3
    Dernier message: 16/09/2007, 10h41
  4. Authentification avec JAAS et Page de login en page d'acceuil
    Par Slash696 dans le forum Wildfly/JBoss
    Réponses: 3
    Dernier message: 02/03/2007, 16h13
  5. la sécurisation avec SSL !!
    Par jeha dans le forum Apache
    Réponses: 2
    Dernier message: 10/07/2006, 05h05

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