Table des matières
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 ici ou disponible sous forme de paquet Debian).
Protéger le site avec des sections comme :
<Directory /var/www/protected>
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
</Directory>
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
Mes miens : http://koo.fi/tech/2008/06/18/apache-http-authentication-to-active-directory-with-kerberos/