====== Authentification Web Kerberos ====== :!: disclaimer : cette page n'est pas de moi mais de Quentin Delance, mais comme lele pourra m'etre fort utile dans 2-3 jours ... :!: ===== Description ===== Cette page décrit la mise en place d'une authentification web Apache qui s'appuie sur un annuaire Active Directory pour l'authentification. Le principal intérêt de cette solution est d'avoir une basée centralisée de comptes et de pouvoir réutiliser la session Windows. Bien configurés, les navigateurs web peuvent passer la session Windows sans popup, ce qui permet une authentification unique sans installation de serveur SSO dédié type CAS. ===== Installation ===== ==== Prérequis ==== Un AD qui marche, idéalement un DNS associé. Le domaine AD est désigné plus bas par **TESTDOMAIN.LOCAL** Le site web protégé par Kerberos sera **lenny.testdomain.local** L'utilisateur dédié créé dans l'AD est **authkrb/authkrb** ==== Préparation Active Directory ==== Créer un compte utilisateur spécifique dans l'AD. Installation les "Microsoft Support Tools" pour avoir les outils en ligne de commande nécessaires. Créer un keytab qui sera utilisé par les librairies Kerberos Linux avec la commande suivante : C:\Program Files\Support Tools>ktpass -princ HTTP/lenny.testdomain.local@TESTDOMAIN.LOCAL -mapuser authkrb -pass authkrb -out c:\tmp\krb5.keytab Successfully mapped HTTP/lenny.testdomain.local to authkrb. Key created. Output keytab to c:\tmp\krb5.keytab: Keytab version: 0x502 keysize 71 HTTP/lenny.testdomain.local@TESTDOMAIN.LOCAL ptype 1 (KRB5_NT_PRINCIPAL) vno 1 etype 0x1 (DES-CBC-CRC) keylength 8 (0x859285d66431e502) Account has been set for DES-only encryption. C:\Program Files\Support Tools> ==== Librairies Kerberos Linux ==== Installer les librairies Kerberos sous Linux, en particulier krb5-user (pour les commandes comme kinit). Editer /etc/krb5.conf et y ajouter le realm Kerberos associé au domaine AD : [libdefaults] default_realm = TESTDOMAIN.LOCAL [...] [realms] [...] TESTDOMAIN.LOCAL = { kdc = pdc.testdomain.local:88 admin_server = pdc.testdomain.local:749 default_domain = testdomain.local } [...] [domain_realm] [...] .testdomain.local = TESTDOMAIN.LOCAL testdomain.local = TESTDOMAIN.LOCAL Valider cette configuration avec : # kinit authkrb Password for authkrb@TESTDOMAIN.LOCAL: # klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: authkrb@TESTDOMAIN.LOCAL Valid starting Expires Service principal 12/03/09 23:31:17 12/04/09 09:31:51 krbtgt/TESTDOMAIN.LOCAL@TESTDOMAIN.LOCAL renew until 12/04/09 23:31:17 Kerberos 4 ticket cache: /tmp/tkt0 klist: You have no tickets cached # ==== Configuration Apache ==== Créer éventuellement un vhost dédié. Dans tous les cas, il faut accéder au site par le nom indiqué dans le keytab. Installer le module Kerberos pour Apache (disponible [[http://modauthkerb.sourceforge.net/|ici]] ou disponible sous forme de paquet Debian). Protéger le site avec des sections comme : Options FollowSymLinks AllowOverride None AuthType Kerberos AuthName "Kerberos Login" KrbMethodNegotiate On KrbMethodK5Passwd On KrbVerifyKDC Off KrbAuthRealms TESTDOMAIN.LOCAL Krb5KeyTab /etc/krb5.keytab Require valid-user **Attention : ** KrbMethodK5Passwd permet d'avoir une popup de saisie des mots de passe (utile sous Linux...) alors que KrbMethodNegotiate permet lorsque les navigateurs le supportent de passer directement la session Windows. Copier le fichier /etc/krb5.keytab produit sur l'AD plus haut. ==== Paramétrage des navigateurs web ==== Sous Firefox, aller dans about:config et chercher "negotiate-auth" Sous IE, une case à cocher dans l'onglet advanced, et le site à ajouter dans les sites locaux. ===== Erreurs fréquentes ===== Problèmes d'horloge : avec Kerberos, les horloges du serveurs et des clients qui manipulent les tickets doivent synchronisées, idéalement serveur de temps Problème de nom de machines : le plus simple est d'utiliser le DNS de l'AD, s'assurer que le nom utilisé pour le site web est bien le même que dans le keytab ===== Liens ===== Plusieurs sites semblent utiliser 2 comptes dans l'AD (HOST/...@TESTDOMAIN.LOCAL et HTTP/...@TESTDOMAIN.LOCAL), pas compris pourquoi. D'autres bataillent avec des commandes comme setspn, ktutil ou kvno... [[http://sl.mvps.org/docs/LinuxApacheKerberosAD.htm]] [[http://blog.scottlowe.org/2006/08/08/linux-active-directory-and-windows-server-2003-r2-revisited/]] [[http://www.gavinadams.org/blog/2009/03/25/centos-52-apache-kerberos-active-directory-authentication]] [[http://forum.joomla.org/viewtopic.php?f=41&t=376429]] [[http://www.slashorg.net/read-110-Authentification-Single-Sign-On-d-une-application-Web-avec-Kerberos.html]] Mes miens : [[http://koo.fi/tech/2008/06/18/apache-http-authentication-to-active-directory-with-kerberos/]]