Tuto : Mise en place de l’authentification Kerberos SSO sur Apache + configuration SSO GLPI

L’Authentification forte de type SSO ‘Single Sign-On’ d’une application Web hébergée en réseau local sur un serveur Linux avec Apache via un Kerberos sous Windows 2008 Server.

On peut résumer le fonctionnement de la manière suivante : un utilisateur ouvre une session sur le domaine et navigue vers une page http protégée du réseau Intranet. Habituellement, on affiche une boite invitant l’utilisateur à saisir son nom d’utilisateur et mot de passe alors qu’il est déjà connu de l’AD, vu qu’il a saisi les mêmes informations pour se connecter à son compte Windows. Le but du Single Sign-On est d’authentifier l’utilisateur sans qu’il soit obligé de ressaisir plusieurs fois les mêmes informations.

Kerberos fonctionne avec un système de jetons, qu’on appellera des ‘tickets’. L’authentification se passe en plusieurs étapes :

sso_apache_-_diagram

  1. le poste client demande un ticket au serveur Kerberos
  2. le KDC retourne un ticket, vu que le client est déjà identifié sur le réseau
  3. le poste client formule la requête au serveur Web en incluant le ticket

Plusieurs avantages de cette méthode :

  • L’utilisateur s’identifie une seule fois et peut ensuite accéder de façon transparente aux différents services
  • Le nom d’utilisateur et son mot de passe ne sont jamais transmis sur le réseau

2. Prerequis d’installation

  • Contrôleur de Domaine DC.domain.lo, Service DNS actif et correctement configuré pour identifier l’ensemble du domaine DOMAIN.LO
  • Serveur Linux Apache2 Ubuntu Server 14.04(webserver.idea.lo)
  • Poste Client enregistré sur le Domaine (notebooksomain.lo)

Attention dans l’ensemble de ce tuto la casse est extrêmement importante ainsi veiller a la respecter scrupuleusement domain.lo n’est pas DOMAIN.LO

Attention aussi à la configuration de l’heure sur vos différentes machines Kerberos est extrêmement sensible a la synchronisation du temps quand il attribue les tickets.

3. Installation

3.1 Linux Server Installation

Pour faciliter l’installation je vais utiliser un outil permettant de joindre très facilement une machine linux à un Domaine Active directory,PowerBroker Identity Services, Open Edition.

#cd /usr/src
#sudo wget http://download.beyondtrust.com/PBISO/8.3/pbis-open-8.3.0.3287.linux.x86_64.deb.sh
#sudo ./pbis-open-8.3.0.3287.linux.x86_64.deb.sh
Would you like to install package for legacy links? (i.e.  /opt/likewise/bin/lw-find-user-by-name -> /opt/pbis/bin/find-user-by-name) (yes/no)
Would you like to install now? (yes/no)

 

Attention, le script est au format bash et permet d’installer un deb on ne peu pas installer le .deb par dpkg c’est normal. Veillez aussi a bien répondre yes au deux questions durant l’installation.

Une fois installer une simple commande avec l’admin du domaine vous permettra de rejoindre le domaine

#sudo domainjoin-cli join DOMAIN.LO Administrateur
 
Joining to AD Domain:   DOMAIN.LO
With Computer DNS Name: webserver.domain.lo
groupadmin@DOMAIN.LO's password:
...
Your system has been configured to authenticate to Active Directory for the first time.  It is recommended that you restart your system to ensure that all applications recognize the new settings.
SUCCESS

Une fois ces commandes faite vous pouvez vérifier l’authentification Kerberos depuis votre serveur Linux

#sudo apt-get install krb5-user
#kinit username
Password for username@DOMAIN.LO:
#klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: username@DOMAIN.LO

Valid starting       Expires              Service principal
21/08/2015 14:07:55  22/08/2015 00:07:55  krbtgt/DOMAIN.LO@DOMAIN.LO
        renew until 22/08/2015 14:07:53

Une fois votre ticket valider vous pouvez aussi vérifier dans l’AD que votre Serveur est bien lié dans la partie Computer:

2015-08-21_14_10_50-pbis_link_apache2_sso_ad

3.2 Windows Server Installation

Nous allons maintenant créer un mappage entre le service que nous allons créer et le serveur KDC(Domain Controller), ce lien se trouve dans un fichier crypter par votre contrôleur de domaine et permettra a votre apache de vérifier les tickets Kerberos que nous lui présenterons, il est nommé fichier Keytab.

Le fichier keytab contient le principal pour le service approprié, appelé clé de service. Une clé de service est utilisée par un service pour s’authentifier auprès du KDC et est uniquement connue de Kerberos et du service lui-même

Un fichier keytab ne peut être mapper qu’a un utilisateur et non à un Hôte AD, nous allons donc créer un utilisateur portant le même nom que notre hôte webserver et lui administrer un mot de passe (passw0rd dans l’exemple,attention ne pas tenir compte du screenshot ci-dessous que j’ai fait pendant mon installation perso le nom du user doit être le même que votre webserver):

Puis créer le keytab depuis un prompt cmd:

ktpass -princ HTTP/webserver.domain.lo@DOMAIN.LO -mapuser webserver@domain.lo -crypto RC4-HMAC-NT -ptype KRB5_NT_PRINCIPAL -pass passw0rd -out C:tempwebserver.keytab

Une fois le fichier créer nous le transférons sur le serveur linux via scp (winscp)

3.3 Apache 2 installation

Nous allons maintenant configurer le site apache2 pour qu’il utilise l’authentification Kerberos, pour webserver j’ai choisi de sécurisé tout le répertoire web. Il est aussi possible de ne sécurisé que le répertoire glpi en modifiant la directory. Dans un premier temps nous allons mettre en place le Keytab

#sudo mkdir /etc/apache2/keytab
#sudo mv /home/groupadmin/webserver.keytab /etc/apache2/keytab
#sudo chown www-data:www-data /etc/apache2/keytab/webserver.keytab
#sudo chmod 640 /etc/apache2/keytab/webserver.keytab

Et procéder à quelques étapes afin de vérifier que le keytab est configuré correctement:

#sudo kinit -k -t /etc/apache2/keytab/webserver.keytab HTTP/webserver.domain.lo
#klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: Administrateur@DOMAIN.LO

Valid starting       Expires              Service principal
21/08/2015 10:45:32  21/08/2015 20:45:32  krbtgt/DOMAIN.LO@DOMAIN.LO
        renew until 22/08/2015 10:45:29
21/08/2015 14:52:26  21/08/2015 20:45:32  HTTP/webserver.domain.lo@DOMAIN.LO
        renew until 22/08/2015 10:45:29

 

#kvno HTTP/webserver.domain.lo@DOMAIN.LO
HTTP/webserver.domain.lo@DOMAIN.LO: kvno = 3

Ces deux commandes doivent se terminer sans erreurs si tel est le cas il y’a une erreur dans la création du fichier keytab, lors de l’installation sur webserver j’ai rencontré une erreur car j’avais déjà créé le keytab avec un autre nom d’utilisateur (Administrateur).

En cas d’erreur vérifier sur DC que le SPN n’est pas en double avec la commande setspn -X

2015-08-21_14_10_50-pbis_link_apache2_sso_ad_error_spn

Si tel est le cas vous pouvez supprimer la liaison en question avec la commande setspn -D

2015-08-21_14_10_50-pbis_link_apache2_sso_ad_error_spn_2

Enfin pour valider votre mise en place du SSO Kerberos il va falloir modifier votre configuration Apache au niveau des site-available. Pour mettre en place le site http://webserver.domain.lo j’ai créé un nouveau fichier de configuration comme suit :

#cd /etc/apache2/sites-available/
#sudo cp 000-default glpi.conf

Editer le fichier glpi.conf
Puis mettre en place le site avec la commande

#sudo a2ensite glpi.conf
#sudo service apache2 reload

Pour la mise en place du site https://webserver.domain.lo j’ai dû créer une demande de certificat à soumettre l’autorité domain.lo (DC)

#sudo cd /etc/ssl
#sudo openssl req -nodes -newkey rsa:2048 -sha256 -keyout webserver.key -out webserver.csr
Generating a 2048 bit RSA private key
...................+++
..........................................................................................+++
writing new private key to 'webserver.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

J’en retire deux fichiers un .csr que nous allons utiliser pour faire la demande, et un .key qui sera utiliser dans la configuration d’apache.
Une fois le contenu du fichier CSR récupéré, connexion à https://dc.domain.lo/certsrv/

2015-08-24_10_54_30-microsoft_active_directory_certificate_services_1

2015-08-24_10_54_30-microsoft_active_directory_certificate_services_2

2015-08-24_10_54_30-microsoft_active_directory_certificate_services_3

2015-08-24_10_54_30-microsoft_active_directory_certificate_services_4

2015-08-24_10_54_30-microsoft_active_directory_certificate_services_5

Une fois le certificat obtenu au format .crt (le renommer lors de la sauvegarde par défaut .cer) transférer le sur webserver dans repertoire /etc/ssl Puis modification du fichier default.ssl dispo dans /etc/apache2/site-available/ pour prendre en compte le nouveau certificat et le SSO. Enfin on reload apache2 pour la prise en compte.

#sudo service apache2 reload

 

3.4 Configuration de GLPI pour prendre en charge la requête SSO

Dans Configuration > Authentification > Autre Méthode D’authentification

2015-08-21_14_10_50-pbis_link_apache2_sso_ad_glpi

Attention à la configuration de votre navigateur Internet Explorer l’option Activer l’authentification Windows Intégré dois être active dans vos options Avancée Internet Explorer

2015-08-21_14_10_50-pbis_link_apache2_sso_ad_internet_explorer

4. Sources

http://www.cymea.net/sso-apache2-active-direcotry-powerbroker-identity-services/

http://www.cymea.net/tag/glpi-0-84-5-active-directory/

http://wiki.deimos.fr/Authentification_SSO_depuis_Apache_sur_backend_AD_via_Kerberos

https://huyphongnguyen.wordpress.com/2013/07/31/apache-authentification-sso-avec-active-directory/

http://oithelp.nd.edu/web/controlling-access/

http://www.microhowto.info/howto/configure_apache_to_use_kerberos_authentication.html#idp60848

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.

Concevoir un site comme celui-ci avec WordPress.com
Commencer