====== 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 :
#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/"
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/"
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 : [[braveo:docinstall:cas|Central Authentification Service CAS]]
Retour au sommaire principal