====== 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