Zimbra 8.6 Multiserveurs #7 – Installation de CAS

Configuration de SSO-CAS sur Zimbra pour votre webmail.

Plusieurs configurations sont possibles, je vais donc détailler dans cet article les différentes possibilités :

  • La plus simple : 1 virtualhost – 1 serveur CAS – 1 domaine Zimbra :
    • Typiquement : webmail.mon-univ.fr interroge votre CAS et vous redirige vers votre domaine unique « @mon-univ.fr ».
  • Un peu plus complexe : plusieurs virtualhosts – 1 serveur CAS – plusieurs domaines Zimbra. Typiquement :
    • webmail.mon-univ.fr interroge votre CAS et vous redirige vers votre domaine « @mon-univ.fr » ( pour le personnel ),
    • webmail-etu.mon-univ.fr interroge votre CAS et vous redirige vers votre domaine « @etu.mon-univ.fr » ( pour les étudiants).
  • Complexe : 1 virtualhost – 1 serveur CAS – plusieurs domaines Zimbra. Typiquement :
    • webmail.mon-univ.fr interroge votre CAS, vous récupérez l’attribut « mail du LDAP et vous redirige vers votre domaine d’appartenance : « @mon-univ.fr » ( pour le personnel ) ou « @etu.mon-univ.fr » ( pour les étudiants).

 

Précisions à prendre en compte avant de vous lancer  :

  • Lisez l’article en entier avant, cela permettra de savoir quelle technique vous allez utiliser
  • Sachez que la méthode que j’appelle ici « complexe » peut être aussi utilisée à la place des autres. C’est un peu la « méthode universelle ». Je m’explique :
  1. Contrairement aux autres méthodes : pas de XML à modifier dans Zimbra, de jar à rajouter etc… De ce fait, vous serez très certainement moins embêté lors de mise à jour mineure et majeure de zimbra. Vous ne faites que de la modification de configuration Zimbra via l’interface web.
  2. Pour les gens qui ne maitrisent pas le JAVA comme moi, écrire du PHP est plus simple. Même si le système de preauth Zimbra évolue.
  3. Mon script PHP permet, via le switch case, de gérer plusieurs domaines depuis le même virtualhost. De ce fait, par la suite, si vous devez ajouter des domaines, c’est plus simple !
  4. De plus, vous utilisez un NGINX intégré à l’OS et non le NGINX Zimbra. Il ne subira pas les mises à jour de Zimbra et comme c’est du NGINX, vous pourrez gérér plusieurs virtualhosts à moindre frais. Encore une simplicité pour un évolution non anticipée !

 

Ce tutoriel se base sur l’article suivant : https://wiki.jasig.org/pages/viewpage.action?pageId=28213257

Scénario : « 1 virtualhost – 1 serveur CAS – 1 domaine Zimbra »

Importer les librairies Java CAS

  1. Télécharger la dernière version sur : http://www.ja-sig.org/downloads/cas-clients/. Actuellement, le fichier http://developer.jasig.org/cas-clients/cas-client-3.3.3-release.zip
  2. Copier les fichiers suivants dans /opt/zimbra/jetty/common/lib
    1. cas-client-core-3.3.3.jar
    2. slf4j-api-1.7.1.jar
    3. slf4j-nop-1.7.1.jar ( disponible ici : http://central.maven.org/maven2/org/slf4j/slf4j-api/1.7.1/slf4j-api-1.7.1.jar )

 

Modification du fichier XML

Dans le fichier /opt/zimbra/jetty/etc/zimbra.web.xml.in, nous allons ajouter les lignes ci-dessous avant la première section <servlet>

Pensez à remplacer les valeurs cas.url.com:port et zimbra.url.com:port.

Création de la clé PreAuth

Lancer la commande suivante sous l’utilisateur zimbra :

Cela va générer une clé de ce type : « 359d722926fc3daebd0fee5d8b9dad9bbe1646e68041afa8ab662c6a9152e6b9 ».

Création du fichier preauth.jsp

Enregistrer le fichier preauth.jsp dans /opt/zimbra/jetty/webapps/zimbra/public/preauth.jsp de votre/vos store(s).

  • Remplacer la valeur de DOMAIN_KEY avec la clé générée précédemment,
  • Remplacer yourdomain.com par le domaine créé sous Zimbra que vous souhaitez CASifier.

 

Sous l’utilisateur root :

 

Changement des pages de login et logout

Sous l’utilisateur zimbra :

 

Redémarrage de Zimbra

Sous l’utilisateur zimbra :

francois

Passionné par les nouvelles technologies depuis ma jeunesse, je continue aujourd'hui par mon métier cette passion. Toujours curieux, je tiens ce blog comme mémo de mes découvertes et profite de cet espace pour vous les faire partager.

Vous aimerez aussi...

4 réponses

  1. Emili dit :

    Bon jour,

    merci pour ces instructions si détaillés, mais pour le troisième cas je pense qu’il  y a une solution plus simple. In n’y a pas besoin d’utiliser un serveur avec PHP , parce qu’on peu obtenir de domaine dans le « preauth.jsp » en modifiant le code de cette façon:

    On doit creer une nouvelle fonction « setDomainKey » qui vous retourne le preauth clé du domain passé. Ça fonctionne pour moi.

     

     

     

    • Emili dit :

      Il y a aussi besoin de modifier la fonction « generateRedirect » por le passer la preauth clé…

      public static String generateRedirect(HttpServletRequest request, String name)

  2. francois dit :

    Super merci pour cette info !

    N’étant pas doué en dév, je n’ai jamais réussi à le faire en java !

    Donc je rejoins l’idée d’éviter d’installer un serveur PHP pour cela et ce, pour plusieurs raisons :

    • cela complexifie la configuration,
    • cela reste compatible avec les mises à jour de zimbra, mais attention tout de même,
    • cela nécessite des adaptations sur le NGINX/apache pour pouvoir envoyer des pièces jointes, des logs en plus, des sources d’erreur/lenteur etc…
    • et surtout cela rajoute un service qui peut être vulnérable et donc votre service attaqué.

    Si le code ci dessus est correct, je vous conseille de l’utiliser.

     

    Merci encore pour le code.

    • Emili dit :

      Merci a vous pour l’article, qui m’a aidé a comprendre l’integration avec CAS. Mais ja suis aussi pour éviter d’installer un proxy.

      Je vous ajoute le preauth.jsp complete. On doit modifier les « case » dans la fonction « setDomainKey » pour chaque domaine et preauth clé:

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *