Zimbra 8.6 Multiserveurs #7 – Installation de CAS – Babash
par francois · Publié 31 mai 2016 · Mis à jour 23 novembre 2017
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 :
- 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.
- 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.
- 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 !
- 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
Importer les librairies Java CAS
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
Pensez à remplacer les valeurs cas.url.com:port et zimbra.url.com:port.
CasSingleSignOutFilter org.jasig.cas.client.session.SingleSignOutFilter CasSingleSignOutFilter /* org.jasig.cas.client.session.SingleSignOutHttpSessionListener CasAuthenticationFilter org.jasig.cas.client.authentication.AuthenticationFilter casServerLoginUrl https://cas.url.com:port/cas/login serverName https://zimbra.url.com:port CasAuthenticationFilter /public/preauth.jsp CasValidationFilter org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter casServerUrlPrefix https://cas.url.com:port/cas serverName https://zimbra.url.com:port redirectAfterValidation true CasValidationFilter /* CasHttpServletRequestWrapperFilter org.jasig.cas.client.util.HttpServletRequestWrapperFilter CasHttpServletRequestWrapperFilter /public/*
CasSingleSignOutFilter org.jasig.cas.client.session.SingleSignOutFilter CasSingleSignOutFilter /* org.jasig.cas.client.session.SingleSignOutHttpSessionListener CasAuthenticationFilter org.jasig.cas.client.authentication.AuthenticationFilter casServerLoginUrl https://cas.url.com:port/cas/login serverName https://zimbra.url.com:port CasAuthenticationFilter /public/preauth.jsp CasValidationFilter org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter casServerUrlPrefix https://cas.url.com:port/cas serverName https://zimbra.url.com:port redirectAfterValidation true CasValidationFilter /* CasHttpServletRequestWrapperFilter org.jasig.cas.client.util.HttpServletRequestWrapperFilter CasHttpServletRequestWrapperFilter /public/* |
Création de la clé PreAuth
Lancer la commande suivante sous l’utilisateur zimbra :
zmprov gdpak yourdomain.com
zmprov gdpak yourdomain.com |
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 :
chown zimbra:zimbra /opt/zimbra/jetty/webapps/zimbra/public/preauth.jsp
chown zimbra:zimbra /opt/zimbra/jetty/webapps/zimbra/public/preauth.jsp |
Changement des pages de login et logout
Sous l’utilisateur zimbra :
zmprov md yourdomain.com zimbraWebClientLoginURL https://zimbra.url.com:port/public/preauth.jsp zmprov md yourdomain.com zimbraWebClientLogoutURL https://cas.url.com:port/cas/logout
zmprov md yourdomain.com zimbraWebClientLoginURL https://zimbra.url.com:port/public/preauth.jsp zmprov md yourdomain.com zimbraWebClientLogoutURL https://cas.url.com:port/cas/logout |
Redémarrage de Zimbra
Sous l’utilisateur zimbra :
Étiquettes : 8.6architectureCAScollaborationhttpsJasigmultiserveurnginxphpCASpreauthpreauth.jsppreauth.phpproxySSOterenaubuntuvirtualhostzimbrazimbraPublicServiceHostnamezimbraPublicServicePortzimbraPublicServiceProtocol