Installer une authentification SSO Windows LDAP sur Apache 2.4 / Ubuntu 18

Pour un besoin en entreprise, et pour me simplifier la vie, j’ai configuré un SSO (Single Sign-On) sur une infrastructure Apache 2.4 sur un Ubuntu 18.

Attention, l’identification SSO ne peut fonctionner que sur un site type http://server.domain.local Il n’est pas possible de réaliser un SSO sur une adresse IP !

La première partie va consister à installer et configurer Kerberos, le module d’identification utilisé dans Windows

apt-get -y install krb5-user libapache2-mod-auth-kerb
nano /etc/krb5.conf

On va considérer que vous êtes dans le domaine TEST-DOMAIN.LOCAL.

Attention aux majuscules et aux minuscules dans ce fichier !

[libdefaults]
default_realm = TEST-DOMAIN.LOCAL
# ... J'ai laissé les paramètres pour le MIT Kerberos
		 
[realms]
TEST-DOMAIN.LOCAL = {
	kdc = ldap.test-domain.local
	admin_server = ldap.test-domain.local
	default_domain = test-domain.local
}
[domain_realm]
# Il faut obligatoirement les 2 lignes :
.test-domain.local = TEST-DOMAIN.LOCAL
test-domain.local = TEST-DOMAIN.LOCAL

Il est préférable de synchroniser les horloges entre les 2 systèmes

apt-get -y install ntpdate
ntpdate ldap.test-domain.local

Passons maintenant à la partie Windows. Il faut se connecter en tant qu’administrateur sur l’ActiveDirectory.

On créé un utilisateur spécifique au projet puis on exécute cette commande dans une console en étant administrateur.

Remplacez __USER__ et __PASSWORD__ avec les informations de l’utilisateur que vous venez de créer.

Remplacez server.test-domain.local avec l’url exacte et complète de votre service.

Remplacez HTTP/ par HTTPS/ si vous souhaitez faire un accès en HTTPS sur votre service.

ktpass -princ HTTP/server.test-domain.local@TEST-DOMAIN.LOCAL -mapuser __USER__@TEST-DOMAIN.LOCAL -pass __PASSWORD__ -crypto RC4-HMAC-NT -ptype KRB5_NT_PRINCIPAL -out C:\Temp\kerberos.keytab

Le résultat de cette commande va créer un fichier d’authentification au gestionnaire de l’AD. Il faut déplacer ce fichier du serveur Windows vers Ubuntu à l’emplacement /etc/kerberos.keytab

Une fois le fichier sur Ubuntu, ne donnez les droits sur le fichiers que pour root et l’utilisateur Apache 

chown www-data:root /etc/kerberos.keytab
chmod 640 /etc/kerberos.keytab

On peut tester une identification sur le domaine. Attenton, l’identification ne renverra rien si tout est conforme, par contre, si le user ou le mot de passe ne sont pas conforme, vous aurez un message. Remplacez lambda par l’utilisateur que vous souhaitez tester

kinit -p lambda@TEST-DOMAIN.LOCAL

On rajoute le module Kerberos à Apache

a2enmod mod_auth_kerb 
/etc/init.d/apache2 restart

On rajoute l’authentification à Apache, directement dans la configuration du vhost :

 <VirtualHost *:80>
 
	ServerName server.test-domain.local      
	<Location /var/www/>
		AuthType Kerberos
		AuthName "Demande d'identification SSO"
		KrbAuthRealms TEST-DOMAIN.LOCAL
		KrbServiceName HTTP/server.test-domain.local
		Krb5Keytab /etc/kerberos.keytab
		KrbMethodNegotiate On
		KrbMethodK5Passwd On
		require valid-user
	</Location>
</VirtualHost>

On redémarre Apache pour prendre en compte la modification

/etc/init.d/apache2 restart

A partir de ce moment, si vous vous connectez à http://server.test-domain.local, vous devriez avoir une fenêtre qui vous demande vos identifiants. Entrez vos identifiants Windows (les mêmes que pour ouvrir votre session, le domaine n’est pas obligatoire), validez et vous devrez être correctement identifié.

On va aller plus loin et faire en sorte que l’authentification Windows soit publiée sur les sites internes au domaine, ce qui vous permettra de ne pas avoir à saisir vos identifiants.

Firefox

Il faut aller dans about:config, puis modifiez la variable network.negotiate-auth.trusted-uris avec test-domain.local

Internet Explorer

Il faut aller dans le panneau Options Internet, onglet Sécurité. Allez dans Sites de confiance, puis cliquez sur le bouton Sites. Décochez exiger https puis entrez *.test-domain.local

Vous pouvez aussi tout pousser depuis les GPO, ça aide 🙂

Google Chrome

L’avantage de Chrome est qu’il reprend automatiquement la configuration faite sur Internet Explorer. Vous n’avez donc rien de plus à faire.