Installation d'un SSO basé sur le CAS de Jasig

Monday, June 6, 2011

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..fr/

Références

Geekapacheauthentificationcascentosjasigredhatssotomcatwebsso
Le contenu de ce site est sous licence Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)

Gamb

DIY

SSH : Le couteau suisse sécurisé

Installation mod_auth_cas sous RedHat/centOS