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.confOn 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.LOCALIl est préférable de synchroniser les horloges entre les 2 systèmes
apt-get -y install ntpdate
ntpdate ldap.test-domain.localPassons 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.keytabLe 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.keytabOn 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.LOCALOn rajoute le module Kerberos à Apache
a2enmod mod_auth_kerb 
/etc/init.d/apache2 restartOn 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 restartA 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.