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 :
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.
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
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
Nous n'avons tout simplement pas eu besoin de le faire, car nous utilisons ensuite un vhost qui lui est sécurisé.
Avec CAS-toolbox, nous allons pouvoir configurer le CAS pour qu'il utilise notre LDAP et aussi personnaliser les page (template et CSS).
Ant est un outil de compilation. Pour l'installer :
sudo apt-get install ant
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
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.
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.
Nous allons jouer sur les variables theme et views de config.properties (cas-toolbox).
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 :)
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.
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>
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