Table des matières

Installation du serveur d'authentification centralisé CAS : Jasig

Introduction

Nous allons mettre en place un serveur d'authentification centralisée CAS. Le serveur le plus réputé est JASIG. JASIG étant relativement complexe à installer nous allons utiliser 2 outils CAS-Quickstart et CAS-toolbox qui vont grandement nous simplifier l'installation de JASIG et sa configuration.

Une fois le serveur installé nous montrerons comment configurer un vhost apache, qui sera utilisé pour l'accès au CAS.

Sommaire :

Installation du CAS

Installation du JDK JAVA

Le CAS étant programmé en JAVA nous aurons besoin du kit de développement JDK. Pour se faire :

apt-get install sun-java6-jdk

Commande qui permet de choisir entre JRE et JDK.

sudo update-alternatives --config java

Ne vous préoccupez pas de la variable d'environnement JAVA_HOME, elle sera définie dans la configuration du CAS de toute façon.

Installation de CAS-Quickstart

Commencez par télécharger l'archive tar.gz de la dernière version ici : https://sourcesup.cru.fr/frs/?group_id=401

Nous allons ensuite travailler dans /opt/ :

cd /opt/

Décompression de l'archive :

tar xvzf ~/cas-quickstart-3.4.7-1.tar.gz
cd cas-quickstart-3.4.7-1/

Avant d'aller plus loin nous allons régler quelques petits problème, il est possible (suivant la version de quick-cas) que les fichiers *.sh ne soient pas au format UNIX (\r\n au lieu de \n pour les fin de lignes). Pour régler simplement ce problème exécutez :

cat env.sh | tr -d '\015' > env
mv env env.sh

A répéter sur start.sh et stop.sh :

cat start.sh | tr -d '\015' > start
mv start start.sh
cat stop.sh | tr -d '\015' > stop
mv stop stop.sh

On configure les variables d'environnement de cas-quickstart-3.4.7-1/env.sh pour pouvoir lancer notre CAS :

#!/bin/sh
 
export LANG=fr_FR
 
export JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.24/
 
export CATALINA_HOME=/opt/cas-quickstart-3.4.7-1/apache-tomcat-6.0.32
export CATALINA_BASE=$CATALINA_HOME
export CATALINA_TMPDIR=$CATALINA_HOME/temp
Pour trouver le JAVA_HOME :
readlink -f /usr/bin/java | sed "s:bin/java::"

Vous pouvez aussi le configurer dans /etc/profile .

Pour s'assurer des droits :

chmod a+x *.sh
chmod a+x apache-tomcat-6.0.32/bin/*.sh

En lance le CAS :

./start.sh

Vous avez deviné pour l'arrêter utilisez simplement stop.sh.

On vérifie qu'il tourne bien en regardant les ports ouvert de la machine :

$ netstat -nlpt
Connexions Internet actives (seulement serveurs)
Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat        PID/Program name
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      867/portmap     
tcp        0      0 0.0.0.0:51797           0.0.0.0:*               LISTEN      879/rpc.statd   
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1464/sshd       
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1411/exim4      
tcp6       0      0 :::8080                 :::*                    LISTEN      15083/java      
tcp6       0      0 :::22                   :::*                    LISTEN      1464/sshd       
tcp6       0      0 ::1:25                  :::*                    LISTEN      1411/exim4      
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      15083/java      
tcp6       0      0 :::8009                 :::*                    LISTEN      15083/java  

Si les port 8005, 8009 (ajp pour apache) et 8080 sont ouverts, alors votre CAS tourne correctement. Allons voir ce que cela donne concrètement : http://IP_du_CAS:8080/ vous redirige normalement sur la page /login du CAS. Il existe un compte de test, identifiant : password et mot de passe password.

Un petit tout dans les logs pour voir se qu'il s'y passe :

$ tail apache-tomcat-6.0.32/logs/auth.log 
Sat Aug 20 22:40:45 CEST 2011 - AUTHENTICATION_SUCCESS for '[username: password]' from '192.168.10.99'

Pour se déconnecter : http://IP_du_CAS:8080/logout

Sécurisation du CAS

Nous n'avons tout simplement pas eu besoin de le faire, car nous utilisons ensuite un vhost qui lui est sécurisé.

CAS-toolbox

Avec CAS-toolbox, nous allons pouvoir configurer le CAS pour qu'il utilise notre LDAP et aussi personnaliser les page (template et CSS).

Installation de ANT

Ant est un outil de compilation. Pour l'installer :

sudo apt-get install ant

Installation de CAS-toolbox

Téléchargez la dernière version de cas-toolbox ici : https://sourcesup.cru.fr/frs/?group_id=401 Dans la foulé, téléchargez aussi cas-maven-repository (sur le même site).

Décompressez le dans /opt/ :

tar xvzf ~/cas-toolbox-3.4.7-1.tar.gz
cd cas-toolbox-3.4.7-1/

On crée ensuite un répertoire build pour y décompacter cas-maven-repository :

mkdir build
tar xvzf /opt/cas-maven-repository-3.4.7-1.tar.gz -C build/

Dans config.properties vérifiez/adaptez les variables suivantes (nous sommes dans une configuration de test) :

cas.authHandlers=fileHandler,simpleTestHandler

Dans build.properties, pensez à bien adapter le deploy.path au dossier de cas-quickstart :

#deploy dir
deploy.path=/opt/cas-quickstart-3.4.7-1/webapps/cas/
[...]
#Améliore la rapidité de la compilation
maven.offline=true
[...]
simpleTestHandler.name=cas-server-support-generic
simpleTestHandler.conf=simpletest-auth.xml
Dans la version il manque la variable package.version, ce qui génère une erreur pendant la compilation je l'ai donc simplement ajoutée dans build.properties :
package.version=3.4.7

Allez on compile et on déploie (dans le dossier de cas-toolbox) :

$ ant init
[...]
BUILD SUCCESSFUL
$ ant deploy
BUILD SUCCESSFUL

Voilà c'est bon, on va maintenant configurer le LDAP puis personnaliser les pages.

Configuration du LDAP

Rien de plus simple c'est configuré en 2 lignes, dans config.properties de cas-toolbox :

# Ldap properties
ldap.host.1=ldap://ldap.mdl29:389
ldap.basedn=uid=%u,ou=Users,dc=mdl29,dc=net
[...]
cas.authHandlers=ldapHandler

Un petit ant init et ant deploy, puis relance de cas-quickstart ./stop.sh && start.sh.

Thème et template

Nous allons jouer sur les variables theme et views de config.properties (cas-toolbox).

Création d'une "vue"

Les fichiers personnalisés seront dans custom (de cas-toolbox). On crée d'abord les dossiers avec les bonnes arborescences pour accueillir notre view :

mkdir -p custom/webpages/WEB-INF/view/jsp/
mkdir -p custom/webpages/WEB-INF/classes

Puis on part de la vue par défaut présente dans cas-quickstart qu'on va copier coller (mdl29 est le nom de la vue) :

cp ../cas-quickstart*/webapps/cas/WEB-INF/view/jsp/default custom/webpages/WEB-INF/view/jsp/mdl29

Enfin il faut créer un fichier custom/webpages/WEB-INF/classes/mdl29_views.properties (adapter au nom de votre vue). Ce fichier n'est autre qu'une adaptation de /cas-quickstart*/webapps/cas/WEB-INF/classes/default_views.properties.

Ensuite vous changez le(s) chemin(s), par exemple dans notre fichier :

### Login view (/login)
casLoginView.(class)=org.springframework.web.servlet.view.JstlView
casLoginView.url=/WEB-INF/view/jsp/mdl29/ui/casLoginView.jsp

### Login confirmation view (logged in, warn=true)
casLoginConfirmView.(class)=org.springframework.web.servlet.view.JstlView
casLoginConfirmView.url=/WEB-INF/view/jsp/mdl29/ui/casConfirmView.jsp

### Logged-in view (logged in, no service provided)
casLoginGenericSuccessView.(class)=org.springframework.web.servlet.view.JstlView
casLoginGenericSuccessView.url=/WEB-INF/view/jsp/mdl29/ui/casGenericSuccess.jsp

### Logout view	(/logout)
casLogoutView.(class)=org.springframework.web.servlet.view.JstlView
casLogoutView.url=/WEB-INF/view/jsp/mdl29/ui/casLogoutView.jsp

### CAS error view
viewServiceErrorView.(class)=org.springframework.web.servlet.view.JstlView
viewServiceErrorView.url=/WEB-INF/view/jsp/mdl29/ui/serviceErrorView.jsp

viewServiceSsoErrorView.(class)=org.springframework.web.servlet.view.JstlView
viewServiceSsoErrorView.url=/WEB-INF/view/jsp/mdl29/ui/serviceErrorSsoView.jsp

Je vous laisse bidouiller les scripts pour vous amuser avec :)

Création d'un thème

On crée l'arborescence :

mkdir -p custom/webpages/themes/mdl29

Puis on copie le thème par défaut :

cp /opt/cas-quickstart-*/webapps/cas/themes/default/* custom/webpages/themes/mdl29/

Ensuite vous adaptez les CSS, il ne faut pas non plus oublier un autre fichier .properties.

Vous aurez besoin d'un fichier custom/webpages/WEB-INF/classes/mdl29.properties (adapter au nom de votre thème), voici le notre (nous avons 2 CSS dont un pour mobile) :

mobile.custom.css.file=themes/mdl29/default-mobile-custom.css
standard.custom.css.file=themes/mdl29/cas.css



Enfin dans la configuration config.properties :

# graphic theme
theme=mdl29
views=mdl29


On compile et on relance le CAS.

vhost apache

Vous devez activer le module prox_ajp :

a2enmod proxy_ajp

Ensuite voici le vhost /etc/apache2/sites-available/castest.mdl29 :

<VirtualHost *:80> #Utilié pour les transactions internes avec le cas, sinon redirection, car pam_cas ne prend pas en compte le certif
   ServerName castest.mdl29
   DocumentRoot /var/www/cas

   ProxyPass      / ajp://cas2.mdl29:8009/ retry=0
   ProxyPassReverse  / ajp://cas2.mdl29:8009/ retry=0
   RequestHeader set "x-webobjects-server-name" "cas2.mdl29"
   RequestHeader set "x-webobjects-server-url" "https://cas2.mdl29/CAS/"
</VirtualHost>


<VirtualHost *:443>
	ServerName castest.mdl29
	DocumentRoot /var/www/cas
	  # SSL
          SSLEngine on
          SSLCertificateFile     /etc/apache2/sites-available/ssl/auto_mdl29/mdl29.crt
          SSLCertificateKeyFile /etc/apache2/sites-available/ssl/auto_mdl29/mdl29.key
          SSLCACertificateFile /chemin/du/pem
          SSLVerifyClient None

	CustomLog	/var/log/apache2/cas.mdl29.net.log combined

	ProxyPass      / ajp://cas2.mdl29:8009/ retry=0
	ProxyPassReverse  / ajp://cas2.mdl29:8009/ retry=0
	RequestHeader set "x-webobjects-server-name" "cas2.mdl29"
	RequestHeader set "x-webobjects-server-url" "https://cas2.mdl29/CAS/"
</VirtualHost>
Nous avons ajouté un accès sur port 80, que nous utilisons uniquement en local car pam_cas n'acceptait pas notre certificat

CAS Proxy et certificats

Le CAS aura besoin de communiquer avec les différents services, toujours de manière sécurisée, il doit donc accepter les certificats de ses services.

Pour des besoins de développement vous serez peut-être amené à utiliser des certificats auto signés il est donc nécessaire de connaitre la démarche d'ajout des certificats.

Les certificats sont stockés dans le keystore de JAVA, pour lister les certificats déjà présents (sur la machine du CAS) :

keytool -v -list -keystore $JAVA_HOME/jre/lib/security/cacerts

Le mot de passe par défaut est changeit

Pour ajouter un certificat :

keytool -import -trustcacerts -alias _mdl29_net -file mdl29.net.crt  -keystore $JAVA_HOME/jre/lib/security/cacerts

Pour plus de commandes : http://www.sslshopper.com/article-most-common-java-keytool-keystore-commands.html




Rédigé par Benjamin Bernard
Retour au sommaire principal : Central Authentification Service CAS Retour au sommaire principal