shibboleth et zimbra

contexte protocolaire

Dans le version 7.x de zimbra , l'implémentation SAML n'étant pas mature, il convient d'utiliser un mécanisme de contournement pour bénéficier d'une authentification fédérée vers le service zimbra. On peux esperer que les choses s'ameliorent nettement avec la v8 sur le support natif SAML/shibboleth de zimbra au regard de :

zimbra peauth

reference: http://wiki.zimbra.com/wiki/Preauth

Il s'agit d'un mécanisme permettant à une application tierce de valider l'indetité d'un utilisateur. Dans notre cas l'application tierce sera ici un fournisseur d'identité de la fédération .

Une fois l'utilisateur identitifié via le mecanisme usuel d'un fournisseur de service shibboleth (protection via la module shibboleth d'apache de la page hébergeant le script de preauth), le script de preauth, qui dispose d'une clée predéfinie pour le domaine de mail zimbra visé, calcul un SHA1-HMAC (keyed-hash message authentication code ⇒ code d'authentification d'une empreinte cryptographique de message avec clé) composé du username (fournis par l'authentification shibboleth), d'un timestamp (validant que la requête est récente) l'ensemble est signé avec la clé de preauth du domaine.

Sur reception de ce SHA1-HMAC correspondant à une session d'un utilisateur, le serveur zimbra le valide grâce à la clée de prauth partagée et génère alors un token applicatif zimbra associé qu'il encapsule dans un cookie de session en retour vers le navigateur client redirigeant ce dernier vers la boite mail de l'utilisateur.

mise en ouvre preauth

génération de la clée preauth

zimbra@zmail1:~$ zmprov gd mail-domain.fr | grep -i zimbraPreAuthKey
zimbra@zmail1:~$ zmprov gdpak mail-domain.fr
preAuthKey: a2054aXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXd78abae0c4
zimbra@zmail1:~$ zmprov gd mail-domain.fr | grep -i zimbraPreAuthKey
zimbraPreAuthKey: a2054aXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXd78abae0c4
  1. on verifie que la clée de preauth n'existe pas deja,
  2. on la crée pour le domain visé,
  3. on verifie sa prise en compte

script preauth

reprise d'un script de preauth dans le langage souhaité , exemple ici http://wiki.zimbra.com/wiki/Preauth#PHP_Code_For_Redirecting_to_Zimbra_Preauth

on va séparer la partie script php visible par le serveur web , des parametres sensibles (clé ! domain a moindre mesure …) qui doivent rester hors du “documentRoot” apache , d'où l'usage d'un fichier d'inclusion des parametres dans le script php :

super@spzimbra1:/var/www/preauthshib$ sudo vim  ../../preauth-params/private/params-shib.php
super@spzimbra1:/var/www/preauthshib$ sudo vim preauthshib.php

URL de connexion

Il ne reste plus qu'a faire pointer l'acces utilisateurs à zimbra vers ce script, dans notre exemple ci-dessus: preauthshib.php. Le script etant lui meme sous controle d'authentification mod_shib , cf protection d'acces shibboleth a une page/directory

L'URL d'acces fédéré a zimbra sera au final du type: https://zimbra.mail-domain.fr/preauthshib/preauthshib.php