Petite documentation d’installation du fameux WebSSO utilisé par une majorité des universités. Je suis parti avec la version repackagée par Julien M (Université Nancy2) appelée CAS Toolbox.
C’est quoi un WebSSO ? L’idée est de déléguer la phase d’authentification à une application tierce. Cela apporte deux avantages. Pour l’utilisateur, il s’authentifie une seule fois et est ré-authentifier automatiquement sur les autres applications de l’établissement. Pour l’établissement, les applications web n’ont plus le mot de passe de l’utilisateur car il n’y a plus qu’une seule application (le WebSSO) qui attaque les annuaires, sécurité accrue !
Pré-requis
Apache
Ouvrir le fichier /etc/httpd/conf/httpd.conf, vérifier que le module proxy_ajp est chargé :
# Support PROXY AJP
Include conf.d/proxy_ajp.conf
De même pour la conf du mod_ssl :
# Support SSL
Include conf.d/ssl.conf
Vérifier aussi que le serveur supporte les virtualhosts nommés sur 80 et 443 :
NameVirtualHost *:80
NameVirtualHost *:443
Virer dans httpd.conf la directive Listen 443 si celle ci est présente car elle est déjà dans ssl.conf.
NTP
Installer le paquet ntp :
yum install ntp
On édite la crontab de root :
crontab -u root -e
Ajouter la ligne suivante :
0 0 * * * ntpdate ntp.<domaine>.fr > /dev/null
JAVA
Il est nécessaire d’installer l’outil de construction Java appelé ANT et le support de xml. Pour l’installer :
yum install ant
yum install xml-commons-apis
Configuration coté serveur Apache
Création du fichier de configuration :
vim /etc/httpd/vh/cas.<domaine>.fr.conf
Configuration du VHost :
# Virtual host pour le service CAS
<VirtualHost *:80>
# Hostname
ServerName cas.<domaine>.fr
ServerAlias cas
ServerAdmin admin@cas.<domaine>.fr
# Redirect vers le https
RewriteEngine On
RewriteRule (.*) https://%{HTTP_HOST}$1 [R,L]
</VirtualHost>
<VirtualHost *:443>
# Hostname
ServerName cas.<domaine>.fr
ServerAlias cas
ServerAdmin admin@cas.<domaine>.fr
# SSL
SSLEngine on
SSLCertificateFile /etc/httpd/ssl.crt/localhost.crt
SSLCertificateKeyFile /etc/httpd/ssl.key/localhost.key
# Logs
ErrorLog /var/log/httpd/cas.<domaine>.fr.error.log
TransferLog /var/log/httpd/cas.<domaine>.fr.access.log
# Mod AJP
ProxyRequests Off
<Location />
ProxyPass ajp://localhost:9009/
ProxyPassReverse http://cas.<domaine>.fr/
</Location>
</VirtualHost>
Modifier le fichier httpd.conf, y ajouter à la fin :
Include vh/cas.<domaine>.fr.conf
On génère un certificat autosigné (le vrai certificat est utilisé par les LBs en frontal) :
openssl req -x509 -nodes -days 365 -newkey rsa:1024 -out /etc/httpd/ssl.crt/localhost.crt -keyout /etc/httpd/ssl.key/localhost.key
On modifie les permissions :
chmod 400 /etc/httpd/ssl.key/localhost.key
chmod 444 /etc/httpd/ssl.crt/localhost.crt
On relance le service httpd :
/sbin/service httpd configtest
/sbin/service httpd restart
Installation de l’application
Récupérer la dernière version sur le site du CRU :
cd /root/
wget https://sourcesup.cru.fr/frs/download.php/3303/cas-toolbox-3.4.2-1.tar.gz
tar zxvf cas-toolbox-3.4.2-1.tar.gz
rm cas-toolbox-3.4.2-1.tar.gz
On récupère aussi les dépendances nécessaire :
wget https://sourcesup.cru.fr/frs/download.php/3304/cas-maven-repository-3.4.2-1.tar.gz
tar zxvf cas-maven-repository-3.4.2-1.tar.gz
rm cas-maven-repository-3.4.2-1.tar.gz
On déplace les sources vers le home de cas :
mv /root/cas-toolbox-3.4.2-1 /opt/cas/
mkdir /opt/cas/cas-toolbox-3.4.2-1/build
mv /root/maven-repository /opt/cas/cas-toolbox-3.4.2-1/build/
Configuration de l’application
Fichier build.properties
On crée un webapps dédié à CAS afin de ne pas embarquer les servlets par défaut de Tomcat :
mkdir /opt/cas/webapps.cas
chown cas:cas /opt/cas/webapps.cas
Modifier le deploy.path dans ce fichier :
deploy.path=/opt/cas/webapps.cas/cas
Et ajouter à la fin du fichier :
cas.package.version=3.4.2
Fichier config.properties
On créé un dossier dédié pour les logs de l’application CAS :
mkdir /opt/cas/logs.cas
chown cas:cas /opt/cas/logs.cas
Modifier les lignes suivantes :
# Ldap properties
ldap.host.1=ldap://ldap1.exemple.fr:389
ldap.host.2=ldap://ldap2.exemple.fr:389
ldap.filter=uid=%u
ldap.searchBase=DC=exemple,DC=fr
ldap.userName=
ldap.password=
log.dir=/opt/cas/logs.cas
# cas port empty (if standard)
cas.port=:9009
# auth layer to use
# see build.properties to view all
cas.authHandlers=ldapHandler
Dossier custom/
De part la structure de notre annuaire LDAP, il va être nécessaire de modifier deux fichiers de configuration de l’authentification ldap.
Premièrement, on va copier le fichier d’origine vers le répertoire cutom/ :
mkdir -p custom/webpages/WEB-INF/auth-configuration/
cp -p update/webpages/WEB-INF/auth-configuration/ldap-auth.xml custom/webpages/WEB-INF/auth-configuration/
cp -p update/webpages/WEB-INF/cas.properties custom/webpages/WEB-INF/
Fichier ldap-auth.xml
Ouvrir le fichier ldap-auth.xml et faire cette série de modifications :
- Modifier le nom de la classe “org.jasig.cas.adaptors.ldap.FastBindLdapAuthenticationHandler” par “org.jasig.cas.adaptors.ldap.BindLdapAuthenticationHandler”.
- Modifier la valeur de la propriété “filter” de “${ldap.basedn}” à “${ldap.filter}”.
- Ajouter en dessous la ligne “
”. - Ajouter la ligne “
” et la ligne “ ” sous “ ”. - Modifier la valeur de la propriété “pooled” de “true” à “false”.
Exemple de fichier ldap-auth.xml modifié :
<bean id="ldapHandler" class="org.jasig.cas.adaptors.ldap.BindLdapAuthenticationHandler" lazy-init="true">
<property name="filter" value="${ldap.filter}" />
<property name="searchBase" value="${ldap.searchBase}" />
<property name="contextSource">
<bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource">
<property name="userDn" value="${ldap.userName}" />
<property name="password" value="${ldap.password}" />
<property name="pooled" value="false" />
<property name="urls">
<list>
<value>${ldap.host.1}</value>
<value>${ldap.host.2}</value>
</list>
</property>
<property name="baseEnvironmentProperties">
<map>
<!--
<entry>
<key><value>java.naming.security.protocol</value></key>
<value>ssl</value>
</entry>
-->
<entry>
<key><value>java.naming.security.authentication</value></key>
<value>simple</value>
</entry>
</map>
</property>
</bean>
</property>
</bean>
Fichier cas.properties
Ouvrir le fichier cas.properties et modifier la partie concernant ldap :
#LDAP auth configuration
ldap.host.1=@ldap.host.1@
ldap.host.2=@ldap.host.2@
ldap.filter=@ldap.filter@
ldap.searchBase=@ldap.searchBase@
ldap.userName=
ldap.password=
Compilation de l’application
Placer vous dans le dossier des sources :
cd /opt/cas/cas-toolbox-3.4.2-1
On va utiliser ant pour faciliter le déploiement de l’application. On va compiler l’application (init) puis copier les fichiers nécessaires dans le webapps de tomcat (deploy) :
ant init
ant deploy
Pour info, pour nettoyer les fichiers avant de refaire une nouvelle installation, il est conseillé d’utiliser :
ant clean undeploy
Configuration Tomcat
Editer le fichier /opt/cas/tomcat.cas/conf/server.xml et modifier la directive Host afin de changer le chemin du webapps :
<Host name="localhost" appBase="/opt/cas/webapps.cas">
<Context path="/" docBase="cas"/>
</Host>
N’oublier pas de démarrer tomcat :
/etc/init.d/tomcat.cas start
Et voici le moment de cliquer http://cas.
Références
- Projet CAS Toolbox : https://sourcesup.cru.fr/projects/cas-toolbox/
- Doc de configuration build.properties et config.properties : https://sites.google.com/a/bousquie.fr/jerome/Home/cas---central-authentication-service-et-active-directory
- Doc de configuration du handler ldap : https://wiki.jasig.org/display/CASUM/LDAP