Ubuntu Apache 2.4 enable Windows SSO

Pour un site, j’avais dû réaliser une authentification par LDAP, en utilisant PHP. Il s’avère que cette authentification robuste nécessite que l’utilisateur s’identifie trop fréquemment.

L’idée est de faire une authentification automatique grace à ses informations de session Windows, transmises directement au serveur Apache qui fera un contrôle avec le serveur LDAP.

Je pars du principe que vous avez déjà un site opérationnel (donc Apache et autre sont déjà installés et correctement configurés)

Il faut installer quelques paquets supplémentaires:

apt-get install -y libapache2-mod-auth-kerb krb5-user

Sur un serveur de domaine du domaine, il faut exécuter la commande

ktpass -princ HTTP/serveur-a-tester.mon-domaine.local@MON-DOMAINE.LOCAL -crypto DES-CBC-MD5 -ptype KRB5_NT_PRINCIPAL -mapuser Utilisateur -pass MotDePasse -out C:\temp\keytab.txt

« serveur-a-tester.mon-domaine.local » est le serveur Apache sur lequel fonctionne votre application

« MON-DOMAINE.LOCAL » (a adapter mais en gardant les majuscules) est le domaine actuel de l’ActiveDirectory

« Utilisateur » et « MotDePasse » sont les identifiant d’un utilisateur de l’AD pour se connecter au serveur Apache, il peut s’agir d’un utilisateur spécifie (Compte de services par exemple)

Le plus important est le fichier final « keytab.txt » : il faut le transférer sur le serveur dans /etc/mon-domaine.local.keytab par exemple

Changer les droits

chown root:www-data /etc/mon-domaine.local.keytab
chmod 640 /etc/mon-domaine.local.keytab

 

On modifie ensuite le fichier /etc/krb5.conf

[libdefaults]
	default_realm = MON-DOMAINE.LOCAL

# The following krb5.conf variables are only for MIT Kerberos.
	krb4_config = /etc/krb.conf
	krb4_realms = /etc/krb.realms
	kdc_timesync = 1
	ccache_type = 4
	forwardable = true
	proxiable = true

	v4_instance_resolve = false
	v4_name_convert = {
		host = {
			rcmd = host
			ftp = ftp
		}
		plain = {
			something = something-else
		}
	}
	fcc-mit-ticketflags = true

[realms]
	MON-DOMAINE.LOCAL = {
		kdc = ldap.mon-domaine.local
		admin_server = ldap.mon-domaine.local
		default_domain = mon-domaine.local
	}


[domain_realm]
	.mon-domaine.local = MON-DOMAINE.LOCAL
	mon-domaine.local = MON-DOMAINE.LOCAL

[login]
	krb4_convert = true
	krb4_get_tickets = false

On rajoute ce qu’il faut dans le fichier de configuration de notre vhost Apache, dans la directive « Directory »

    AuthName "Login & Mot de passe"
    KrbServiceName HTTP
    AuthType Kerberos
    Krb5Keytab /etc/mon-domaine.local.keytab
    KrbAuthRealms MON-DOMAINE.LOCAL
    KrbMethodNegotiate On
    KrbMethodK5Passwd On
    Require valid-user

On restart Apache et on teste

Par défaut Firefox et InternetExplorer ne sont pas prévu pour échanger ces infromations, une fenêtre de connexion apparaît donc. Il suffit de mettre votre login et votre mot de passe pour être identifié correctement.

Pour valider automatiquement le SSO, il faut aller dans about:config de Firefox et chercher les instances

network.negotiate-auth.delegation-uris
network.negotiate-auth.trusted-uris

Mettre « mon-domaine.local » dans les 2 champs et l’authentification sera envoyée automatiquement de Windows vers Apache