cancel
Showing results for 
Search instead for 
Did you mean: 

SSO avec Kerberos : Client sent an NTLMSSP security blob

mlagneaux
Champ on-the-rise
Champ on-the-rise
Bonjour,

J'essaye de configurer Alfresco de manière à faire fonctionner le SSO en utilisant Kerberos.


Voici l'environnement sur lequel je travaille :
- Mon poste personnel qui se trouve dans le domaine domaine.fr sert de poste client dans le cadre de mon test. Il tourne sous Windows 7 Pro et les tests sont réalisés sous IE8.
- Le serveur Alfresco se trouve sur une VM sous CentOS 5. Il s'agit d'Alfresco 3.3g qui tourne sous Tomcat 6.
- Enfin, j'ai créé un Active Directory sous une VM Windows Server 2008 R2. Cette VM est le contrôleur du domaine domaine.local (nom de domaine netbios = DOMAINE0) que j'ai créé spécialement pour l'occasion.

Je n'ai pas de DNS, donc je travaille avec les IP de mes serveurs :
- Poste client : xx.xx.xx.35
- Serveur Alf : xx.xx.xx.60
- Serveur AD : xx.xx.xx.28


Dans un premier temps, j'ai testé mon environnement en configurant le passthru pour faire du SSO => Aucun problème particulier.
Lorsque j'accède à l'appli, j'ai une fenêtre de connexion Windows qui s'affiche. Je saisis le login/mot de passe d'un compte de mon AD en indiquant le domaine DOMAINE0 et je me connecte automatiquement à Alfresco (sans passer par la page de login).

Après ce premier test de contrôle, j'ai suivi les consignes sur la page du wiki relative à Kerberos. Dans mon cas, CIFS ne sera pas activé, je ne me suis donc intéressé qu'à la partie HTTP.
- Création du compte alfrescohttp dans l'AD (activation des options "Le mot de passe n'expire jamais", "Utilisation des types de chiffrement DES via Kerberos" et "La pré-authentification Kerberos n'est pas nécessaire").
- Génération de la keytab sur le serveur AD avec les paramètres suivants :
   => HTTP/xx.xx.xx.60@DOMAINE.LOCAL
   => DOMAINE0\alfrescohttp
  Cela m'a créé un SPN :
   setspn -l alfrescohttp
   Noms ServicePrincipalName inscrits pour CN=Alfresco HTTP,OU=users,OU=ged,OU=esi,
   DC=domaine,DC=local:
        HTTP/xx.xx.xx.60
- Sur mon serveur Alfresco, j'ai ajouté un répertoire kerberos dans le répertoire de Tomcat dans lequel j'ai placé les fichiers suivants :
   => le fichier keytab généré précédemment ;
   => krb5.conf

[libdefaults]
default_realm = DOMAINE.LOCAL
default_tkt_enctypes = rc4-hmac
default_tgs_enctypes = rc4-hmac

[realms]
EUROGICIEL.LOCAL = {
  kdc = xx.xx.xx.28
  admin_server=xx.xx.xx.28
}

[domain_realm]
.domaine.local = DOMAINE.LOCAL
   => java.login.config

Alfresco {
   com.sun.security.auth.module.Krb5LoginModule sufficient;
};

AlfrescoHTTP {
   com.sun.security.auth.module.Krb5LoginModule required
   debug=true
   storeKey=true
   useKeyTab=true
   keyTab="/usr/share/tomcat6/kerberos/alfrescohttp.keytab"
   principal="HTTP/xx.xx.xx.60";
};

com.sun.net.ssl.client {
   com.sun.security.auth.module.Krb5LoginModule sufficient;
};

other {
   com.sun.security.auth.module.Krb5LoginModule sufficient;
};


- Toujours sur le serveur Alfresco, j'ai modifié le paramètre JAVA_OPTS de manière à obtenir :

JAVA_OPTS="-Xmx2048m -XX:MaxPermSize=256m -Djava.security.auth.login.config=/usr/share/tomcat6/kerberos/java.login.config -Djava.security.krb5.conf=/usr/share/tomcat6/kerberos/krb5.conf"

- J'ai modifié le fichier alfresco-global.properties pour obtenir :


authentication.chain=kerberos1:kerberos
kerberos.authentication.realm=DOMAINE.LOCAL
kerberos.authentication.sso.enabled=true
kerberos.authentication.authenticateCIFS=false
kerberos.authentication.user.configEntryName=Alfresco
kerberos.authentication.http.configEntryName=AlfrescoHTTP
kerberos.authentication.http.password=secret
kerberos.authentication.defaultAdministratorUserNames=mlagneaux
kerberos.authentication.http.kerberosDebug=true

- J'ai également activé les logs relatives à kerberos dans log4j.properties.


Au démarrage de Tomcat, j'obtiens les traces suivantes qui indiquent que tout se passe bien :

17:15:12,932 User:System DEBUG [webdav.auth.KerberosAuthenticationFilter] HTTP Kerberos login successful
17:15:12,933 User:System DEBUG [webdav.auth.KerberosAuthenticationFilter] Logged on using principal HTTP/xx.xx.xx.60@DOMAINE.LOCAL

Par contre, lorsque j'essaye de me connecter avec un utilisateur de mon AD : j'obtiens la fenêtre de connexion Windows où je saisis le login et mot de passe en précisant le domaine DOMAINE0 mais la connexion ne se fait pas. Au bout de quelques essais, j'arrive sur une page blanche.
Au niveau du fichier de log, j'obtiens les messages suivants :

17:24:02,121  DEBUG [app.servlet.KerberosAuthenticationFilter] New Kerberos auth request from xx.xx.xx.35 (xx.xx.xx.35:62790)
17:24:02,130  DEBUG [app.servlet.KerberosAuthenticationFilter] Client sent an NTLMSSP security blob


Y a-t-il une conf particulière à faire au niveau du poste client ? (Dans IE, ce site est bien dans la zone Intranet et l'authentification automatique est activée pour les sites de l'intranet).
Le fait d'utiliser l'IP des machines peut-il poser problème ?

Y a-t-il d'autres logs à activer qui pourraient m'aider à voir d'où vient le problème ?
Y a-t-il d'autres infos (notamment au niveau du serveur AD) qui pourraient être utiles ?

Merci d'avance pour votre aide.
5 REPLIES 5

rguinot
Confirmed Champ
Confirmed Champ

mlagneaux
Champ on-the-rise
Champ on-the-rise
Effectivement, j'avais vu ce post dans le forum EN.
J'ai installé le JCE sur mon serveur mais j'ai toujours le même problème : cela n'a rien changé.

Je poursuis mes recherches.

mlagneaux
Champ on-the-rise
Champ on-the-rise
J'ai pu supprimer le message "Client sent an NTLMSSP security blob".
Dans secpol.msc, j'ai passé le paramètre "Sécurité réseau : Restreindre NTLM : Trafic NTLM sortant vers des serveurs distants" de Autoriser tout à Refuser tout.

Ca ne fonctionne malheureusement pas mieux pour autant. Je n'ai plus que le message "New Kerberos auth request from …" dans la log mais je n'ai pas d'infos supplémentaires non plus.

Y a-t-il d'autres logs que l'on peut activer ?

mlagneaux
Champ on-the-rise
Champ on-the-rise
En fait, la connexion via Kerberos sans activer le SSO fonctionne bien.
C'est quand j'active le SSO que cela ne fonctionne pas.

aleph_nevel
Champ in-the-making
Champ in-the-making
Bonjour,

J'ai comme toi rencontré des problèmes similaires.

Il faudrait activer les traces concernant kerberos.

Tu mets dans ton fichier de propriétés globales:
log4j.logger.org.alfresco.web.app.servlet.KerberosAuthenticationFilter=debug
log4j.logger.org.alfresco.repo.webdav.auth.KerberosAuthenticationFilter=debug

Tu ajoutes ensuite dans les options du démarrage du serveur applicatifs (JAVA_OPTS):
-Dsun.security.krb5.debug=true
-Dsun.security.jgss.debug=true

Ca devrait augmenter le niveau de trace notamment lors des échanges de tickets du protocole kerberos avec ton controleur de domaine windows.

A++