Pages enfant
  • Installation et configuration du serveur CAS (archive)

Vous regardez une version antérieure (v. /wiki/pages/viewpage.action?pageId=83329169) de cette page.

afficher les différences afficher l'historique de la page

« Afficher la version précédente Vous regardez la version actuelle de cette page. (v. 57) afficher la version suivante »

Debuggage

Apache

Modifier la directive LogLevel du fichier /etc/httpd/conf/httpd.conf :

LogLevel debug

Les logs sont dans le répertoire /var/log/httpd.

CAS

Ajouter dans le fichier src/main/webapp/WEB-INF/classes/log4j.properties la ligne suivante :

log4j.logger.org.jasig.cas=DEBUG

Les logs se trouvent dans le répertoire /var/log/tomcat5.

Installation Java/Maven/Tomcat

Télécharger le dernier JDK depuis http://java.sun.com/javase/downloads/index.jsp , puis exécuter :

[root@cas Download]# chmod +x jdk-6u18-linux-i586-rpm.bin
[root@cas Download]# chmod +x jdk-6u18-linux-i586-rpm.bin
[...]
Done.
[root@cas Download]# 

Ajouter le fichier /etc/profile.d/java.sh contenant les lignes suivantes :

export JAVA_HOME=/usr/java/default
export PATH=$JAVA_HOME/bin:$PATH

Vérifier l'installation :

[root@cas ~]# java -version
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing)
[root@cas ~]#

Installer Maven et Tomcat :

[root@cas ~]# yum install maven2 tomcat5

Version de Maven

Si jamais la version de Maven est avant 2.0.9, faire une installation manuelle depuis http://maven.apache.org/download.html :

[root@cas ~]# mvn --version
/usr/java/default
Maven version: 2.0.8
Java version: 1.6.0_18
OS name: "linux" version: "2.6.31.9-174.fc12.i686" arch: "i386" Family: "unix"
[root@cas ~]# yum remove maven2
[...]
Complete!
[root@cas ~]# cd /usr/local
[root@cas local]# wget [ftp://ftp.inria.fr/pub/Apache/maven/binaries/apache-maven-2.2.1-bin.tar.gz]
--2010-01-18 11:14:08-- [ftp://ftp.inria.fr/pub/Apache/maven/binaries/apache-maven-2.2.1-bin.tar.gz]
=> "apache-maven-2.2.1-bin.tar.gz"
Resolving ftp.inria.fr... 192.93.2.32
Connecting to ftp.inria.fr\|192.93.2.32\|:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD (1) /pub/Apache/maven/binaries ... done.
==> SIZE apache-maven-2.2.1-bin.tar.gz ... 2840961
==> PASV ... done.    ==> RETR apache-maven-2.2.1-bin.tar.gz ... done.
Length: 2840961 (2.7M) (unauthoritative)
100%[==========================================================================================================================>] 2,840,961    987K/s   in 2.8s
2010-01-18 11:14:12 (987 KB/s) - "apache-maven-2.2.1-bin.tar.gz" saved [2840961]
[root@cas local]# tar xf apache-maven-2.2.1-bin.tar.gz
[root@cas local]# ln -s apache-maven-2.2.1 maven2
[root@cas local]#

Ajouter Maven au PATH dans /etc/profile.d/java.sh :

export JAVA_HOME=/usr/java/default
export MVN_HOME=/usr/local/maven2
export PATH=$JAVA_HOME/bin:$PATH:$MVN_HOME/bin

Puis vérifier que Maven 2.2 est bien installé :

[root@cas local]# mvn -version
Apache Maven 2.2.1 (r801777; 2009-08-06 21:16:01+0200)
Java version: 1.6.0_18
Java home: /usr/java/jdk1.6.0_18/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux" version: "2.6.31.9-174.fc12.i686" arch: "i386" Family: "unix"
[root@cas local]#

Installation d'un serveur CAS basique

Installation

Télécharger la dernière version de CAS depuis http://www.jasig.org/cas/download  et décompresser :

[root@cas ~]# cd /usr/local
[root@cas local]# wget http://www.ja-sig.org/downloads/cas/cas-server-3.3.5-release.tar.gz
--2010-01-18 10:47:55--  http://www.ja-sig.org/downloads/cas/cas-server-3.3.5-release.tar.gz
Resolving www.ja-sig.org... 128.112.131.108
Connecting to www.ja-sig.org|128.112.131.108|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 14467126 (14M) [application/x-gzip]
Saving to: "cas-server-3.3.5-release.tar.gz"
100%[======================================================================>] 14,467,126   271K/s   in 84s
2010-01-18 10:49:19 (168 KB/s) - "cas-server-3.3.5-release.tar.gz" saved [14467126/14467126]
[root@cas local]# tar xf cas-server-3.3.5-release.tar.gz
[root@cas local]# cd cas-server-3.3.5
[root@cas cas-server-3.3.5]# cd cas-server-webapp
[root@cas cas-server-webapp]#  

Modifier le fichier src/main/webapp/WEB-INF/classes/log4j.properties en indiquant le chemin des logs :

log4j.appender.logfile.File=/var/log/tomcat5/cas.log

Générer le WAR, le copier dans Tomcat et redémarrer :

[root@cas cas-server-webapp]#  mvn package install
[root@cas cas-server-webapp]#  cp target/cas.war /var/lib/tomcat5/webapps/ROOT.war
[root@cas cas-server-webapp]#  /etc/init.d/tomcat5 restart

Test

Désactiver si nécessaire le firewall pour le port 8080 (system-config-firewall) et tester http://cas.ifsic.univ-rennes1.fr:8080 (user = test, password = test).

Passage en HTTPS

Génération du keystore

Rapatrier Jetty (par exemple dans /usr/local) depuis http://static.roopindersingh.com/jetty-6.1.7.jar .

Copier les clés publique (cas.ifsic.univ-rennes1.fr.pem) et privée (cas.ifsic.univ-rennes1.fr.key) dans /etc/pki/tls/private pour générer le keystore dans /etc/tomcat5 (en donnant comme mot de passe changeit) :

[root@cas private]# openssl pkcs12 -export \
>     -out cas.ifsic.univ-rennes1.fr.pkcs12 \
>     -in cas.ifsic.univ-rennes1.fr.pem \
>     -inkey cas.ifsic.univ-rennes1.fr.key
Enter Export Password:
Verifying - Enter Export Password:
[root@cas private]# java -cp /usr/local/jetty-6.1.7.jar org.mortbay.jetty.security.PKCS12Import \
>     cas.ifsic.univ-rennes1.fr.pkcs12 /etc/tomcat5/cas.ifsic.univ-rennes1.fr.keystore
Enter input keystore passphrase: changeit
Enter output keystore passphrase: changeit
Alias 0: 1
Adding key for alias 1
[root@cas private]# 

Régler les permissions du keystore :

[root@cas private]# cd /etc/tomcat5/
[root@cas tomcat5]# chgrp tomcat cas.ifsic.univ-rennes1.fr.keystore
[root@cas tomcat5]# chmod 640 cas.ifsic.univ-rennes1.fr.keystore
[root@cas tomcat5]# 

Configuration de Tomcat

Dans /etc/tomcat5/server.xml, commenter le connecteur HTTP sur le port 8080 et décommenter le connecteur HTTPS sur le port 8443 en ajoutant l'attribut :

keystoreFile="/etc/tomcat5/cas.ifsic.univ-rennes1.fr.keystore"

Test

Redémarrer Tomcat, désactiver si nécessaire le firewall pour le port 8443 et tester https://cas.ifsic.univ-rennes1.fr:8443  (user = test, password = test).

Ajout de l'authentification LDAP

Script de déploiement de CAS

Pour faciliter le déploiement du serveur CAS, on pourra ajouter le script /usr/local/cas-server-3.3.5/deploy.sh suivant :

#!/bin/bash
/etc/init.d/tomcat5 stop
pushd /usr/local/cas-server-3.3.5/cas-server-webapp
mvn package install && rm -f /var/lib/tomcat5/webapps/ROOT.war && cp target/cas.war /var/lib/tomcat5/webapps/ROOT.war
popd
/etc/init.d/tomcat5 start

Configuration de CAS pour LDAP

Dans le fichier src/main/webapp/WEB-INF/deployerConfigContext.xml, ajouter le bean suivant pour déclarer le contexte LDAP :

<bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource">
  <property name="pooled" value="true"/>
  <property name="urls">
    <list>
      <value>ldap://ldapglobal.univ-rennes1.fr/</value>
    </list>
  </property>
  <property name="userDn" value=""/>
  <property name="password" value=""/>
  <property name="baseEnvironmentProperties">
    <map>
      <entry>
       <key>
         <value>java.naming.security.authentication</value>
       </key>
       <value>simple</value>
      </entry>
     </map>
  </property>
</bean>

puis changer le handler SimpleTestUsernamePasswordAuthenticationHandler par celui-ci :

<bean
   class="org.jasig.cas.adaptors.ldap.FastBindLdapAuthenticationHandler" >
     <property name="filter" value="uid=%u,ou=people,dc=univ-rennes1,dc=fr" />
     <property name="contextSource" ref="contextSource" />
</bean>

Test

Redéployer le serveur CAS et tester l'authentification d'un utilisateur LDAP.

Ajout d'un frontal Apache

On va dans cette partie configurer un frontal Apache sur le port 443, qui va accéder au Tomcat du serveur CAS en AJP sur le port 8009.

Configuration de Apache

Installer le certificat du serveur en éditant /etc/httpd/conf.d/ssl.conf et modifier les lignes suivantes dans le virtual host _default_:443 :

#SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateFile /etc/pki/tls/private/cas.ifsic.univ-rennes1.fr.pem
#SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
SSLCertificateKeyFile /etc/pki/tls/private/cas.ifsic.univ-rennes1.fr.key

Ajouter la ligne suivante pour indiquer à Apache de passer les requêtes à Tomcat :

ProxyPass / ajp://cas.ifsic.univ-rennes1.fr:8009/ min=0 max=100 smax=50 ttl=10 route=ori-indexing

Configuration de Tomcat

Si le connecteur AJP sur le port 8009 n'avait pas été précédemment commenté, il n'y a rien de plus à configurer au niveau de Tomcat.

Le connecteur HTTPS sur le port 8443 peut en revanche être commenté.

Test

Le serveur CAS doit désormais répondre sur l'URL https://cas.ifsic.univ-rennes1.fr  (sur le port 443 par défaut en HTTPS).

Ajout de l'authentification Kerberos

Configuration de Apache

On ajoute simplement mod_auth_kerb au serveur virtuel frontal :

<Location />
  #SSLRequireSSL
  AuthType KerberosV5
  AuthName "Kerberos Login"
  KrbMethodNegotiate On
  KrbMethodK5Passwd Off
  KrbAuthRealms UNIV-RENNES1.FR
  Krb5KeyTab /etc/httpd/conf/mod_auth_kerb.keytab
  #require valid-user
</Location>

Bien noter que l'on ne force pas l'authentification Kerberos (la directive require valid-user est commentée) pour que le serveur CAS bascule sur une authentification LDAP si l'authentification Kerberos n'est pas vérifiée.

Configuration de CAS

Les instruction de configuration de CAS sont extraites de http://www.ja-sig.org/wiki/display/CASUM/Trusted .

Ajouter le support du handler trusted

Editer le fichier <cas-home>/cas-server-webapp/pom.xml et ajouter la dépendance suivante (par exemple juste après la dépendance vers le module cas-server-support-ldap) :

<dependency>
<groupId>org.jasig.cas</groupId>
<artifactId>cas-server-support-trusted</artifactId>

<version>${project.version}</version>
</dependency>

Modifier le login webflow

Editer le fichier <cas-home>/cas-server-webapp/src/main/webapp/WEB-INF/login-webflow.xml et ajouter l'état suivant juste avant l'état viewLoginForm :

<action-state id="remoteAuthenticate">
<action bean="principalFromRemoteAction" />
<transition on="success" to="sendTicketGrantingTicket" />
<transition on="error" to="viewLoginForm" />
</action-state>

Dans ce même fichier, remplacer les références à viewLoginForm par remoteAuthenticate pour les trois decision-state gatewayRequestCheck, renewRequestCheck et generateServiceTicket :

<decision-state id="gatewayRequestCheck">
  <if
    test="${externalContext.requestParameterMap['gateway'] != '' &amp;&amp; externalContext.requestParameterMap['gateway'] != null &amp;&amp; flowScope.service != null}"
    then="redirect"
    else="remoteAuthenticate" />
</decision-state>
<decision-state id="renewRequestCheck">
  <if
    test="${externalContext.requestParameterMap['renew'] != '' &amp;&amp; externalContext.requestParameterMap['renew'] != null}"
    then="remoteAuthenticate"
    else="generateServiceTicket" />
</decision-state>
<action-state id="generateServiceTicket">
  <action bean="generateServiceTicketAction" />
  <transition on="success" to ="warn" />
  <transition on="error" to="remoteAuthenticate" />
  <transition on="gateway" to="redirect" />
</action-state>

Déclarer le bean implémentant le nouvel état du webflow en ajoutant les lignes suivantes dans le fichier <cas-home>/cas-server-webapp/src/main/webapp/WEB-INF/cas-servlet.xml (par exemple juste avant le bean authenticationViaFormAction) :

<bean
  id="principalFromRemoteAction"
  class="org.jasig.cas.adaptors.trusted.web.flow.PrincipalFromRequestRemoteUserNonInteractiveCredentialsAction"
  p:centralAuthenticationService-ref="centralAuthenticationService" />

Modifier le schéma d'authentification

Pour modifier le schéma d'authentification, éditer le fichier <cas-home>/cas-server-webapp/src/main/webapp/WEB-INF/deployerConfigContext.xml et modifier le bean authenticationManager en ajoutant :

  • PrincipalBearingCredentialsToPrincipalResolver après les resolvers existants de credentialsToPrincipalResolvers
  • PrincipalBearingCredentialsAuthenticationHandler avant les handlers existants de authenticationHandlers
<bean id="authenticationManager" class="org.jasig.cas.authentication.AuthenticationManagerImpl">
  <property name="credentialsToPrincipalResolvers">
    <list>
      <!--  ... the others credentialsToPrincipalResolvers ... -->
      <bean class="org.jasig.cas.adaptors.trusted.authentication.principal.PrincipalBearingCredentialsToPrincipalResolver" />
    </list>
  </property>
  <property name="authenticationHandlers">
    <list>
      <bean class="org.jasig.cas.adaptors.trusted.authentication.handler.support.PrincipalBearingCredentialsAuthenticationHandler" />
      <!--  ... the others authenticationHandlers... -->
    </list>
  </property>
</bean>

Le bean authenticationManager doit ainsi ressembler à :

<bean   id="authenticationManager"
        class="org.jasig.cas.authentication.AuthenticationManagerImpl">
    <property name="credentialsToPrincipalResolvers">
      <list>
        <bean class="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver" />
        <bean class="org.jasig.cas.authentication.principal.HttpBasedServiceCredentialsToPrincipalResolver" />
        <bean class="org.jasig.cas.adaptors.trusted.authentication.principal.PrincipalBearingCredentialsToPrincipalResolver" />
      </list>
    </property>
    <property name="authenticationHandlers">
      <list>
        <bean class="org.jasig.cas.adaptors.trusted.authentication.handler.support.PrincipalBearingCredentialsAuthenticationHandler" />
        <bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
              p:httpClient-ref="httpClient" />
	<bean class="org.jasig.cas.adaptors.ldap.FastBindLdapAuthenticationHandler" >
          <property name="filter" value="uid=%u,ou=people,dc=univ-rennes1,dc=fr" />
          <property name="contextSource" ref="contextSource" />
        </bean>
      </list>
    </property>
</bean>

Test

ça doit marcher...

  • Aucune étiquette