CAS est un système d'authentification initialement créé par l'Université de Yale pour fournir un moyen fiable d'authentifier un utilisateur pour une application. CAS est devenu un projet JASIG en Décembre 2004.
Le projet nous permet également de bénéficier du SSO: l'authentification unique pour les webservices authentifiés par ces soins.
Le CAS est un composant (ensemble de servlets Java) à déployer sur un serveur d'application Java.
Le serveur CAS est en attente de connexions http ou https sur plusieurs url :
En fait, l'url de validation est bien validate pour la compatibilité CAS V1 (servlet LegacyValidate), et serviceValidate en CAS V2.
Pour plus de détails: ESUP Portail
Il y a une notion de tickets, un peu à la manière kerberos.
Ces tickets sont des 'opaque handles' : ils ne transportent aucun information.
Il y a 2 tickets nécessaires au fonctionnement de base, plus 2 autres tickets dans le cas d'utilisation de proxy CAS :
Il est facultatif. Si le navigateur web n'accepte pas les cookies, l'utilisateur devra se ré-authentifier à chaque appel au serveur CAS.
Ce ticket ne peut être utilisé qu'une seule fois. Il y a ensuite dialogue direct entre l'appli web et le CAS via un GET http, avec le ST en paramètre. En réponse, le serveur CAS retourne l'identifiant de la personne, et donc l'authentifie. Il invalide également le ticket (libération des ressources associées). En fait, ce ticket concerne un personne, pour un service, et utilisable une seule fois.
Ce tutoriel a été réalisé sur une base Debian Squeeze et la dernière version disponible CAS 4.3.11.
Le but étant d'authentifier des users d'un Active Directory 2008 par le biais du CAS SSO.
wget http://downloads.jasig.org/cas/cas-server-3.4.11-release.tar.gz tar xvzf cas-server-3.4.11-release.tar.gz more cas-server-3.4.11/INSTALL.txt
On peut noter que la page de login peut-être designé.
cd cas-server-3.4.11/cas-server-webapp vi pom.xml
<!-- Dependance support LDAP --> <dependency> <groupId>${project.groupId}</groupId> <artifactId>cas-server-support-ldap</artifactId> <version>${project.version}</version> </dependency>
cd ./src/main/webapp/WEB-INF vi deployerConfigContext.xml
<property name="authenticationHandlers"> <list> <bean class="org.jasig.cas.adaptors.ldap.BindLdapAuthenticationHandler" p:filter="sAMAccountName=%u" p:searchBase="cn=Users,dc=mathieu,dc=local" p:contextSource-ref="contextSource" p:ignorePartialResultException="true" /> </list> </property> </bean>
<bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource"> <property name="pooled" value="false"/> <property name="url" value="ldap://ad.mathieu.local:389" /> <property name="userDn" value="cn=ldapuser,cn=Users,dc=mathieu,dc=local"/> <property name="password" value="P@ssw0rd"/> <property name="baseEnvironmentProperties"> <map> <entry key="com.sun.jndi.ldap.connect.timeout" value="3000" /> <entry key="com.sun.jndi.ldap.read.timeout" value="3000" /> <entry key="java.naming.security.authentication" value="simple" /> </map> </property> </bean>
Le filtre peut-être plus complexe: GID ou attributs spécifiques …
ldapsearch -b "DC=test,DC=local" -H ldap://dc1.test.local:389 -D 'administrateur' -w 'Pa$$w0rd'
Les paramétrages sont terminés, il faut maintenant compiler l'application avec la dépendance du support d'authentification LDAP ainsi que les paramétres de connexion à l'annuaire.
aptitude install maven2 sun-java6-jdk sun-java6-fonts
cd /root/sources/cas-server-3.4.11/cas-server-webapp
export JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.26/
Pour installer le paquet sun-java6-jdk, il vous ajouter les repos non-free dans le /etc/apt/source.list.
mvn -Dmaven.test.skip=true package install -e
La compilation doit se terminait ainsi :
Et comme indiqué, l'application compilé avec succès est diposnible dans le dossier target sous la forme d'une archive cas.war.
Je pars du principe que vous avez le Tomcat installé sinon vous disposez des infos nécessaires sur ce tuto:
cp target/cas.war /var/lib/tomcat6/webapps/
Une fois le war déployé, arretez le tomcat et déplacez le cas.war dans un emplacement de sauvegarde.
vi ./cas/WEB-INF/classes/log4j.xml
<param name="File" value="/var/log/tomcat6/cas.log" /> <param name="File" value="/var/log/tomcat6/perfStats.log"/>
touch /var/log/tomcat/cas.log chown tomcat6:tomcat6 /var/log/tomcat/cas.log touch /var/log/tomcat/perfStats.log chown tomcat6:tomcat6 /var/log/tomcat/cas.log
Afin de sécuriser les échanges entre le servlet CAS SSO de Jasig et notre annuaire LDAP ActiveDirectory,
il est judicieux de configurer la connexion sous LDAPS.
Le certificat doit-être installer dans le magasin personnel de l'ordinateur local.
Si le contrôleur de domaine est catalogue global, le protocole LDAPS bind au port 3269.
Si ne l'est pas, le protocole LDAPS bind au port 636.
Pour pouvoir attaquer le serveur en LDAPS, il faut disposer du certificat de la CA racine dans le magasin des autorités de certification approuvées.
openssl -x509 -in /root/CA_root.cer -out /root/CA_root.pem
cp /root/CA_root.prm /etc/ssl/certs rm -f /root/CA_root.*
vi /etc/ldap/ldap.conf
TLS_CACERT /etc/ssl/certs/CA_root.pem
ldapsearch -x -H 'ldap://2K8R2.mathieu.local:389' -b 'DC=mathieu,DC=local' -D 'administrateur' -w 'P@$$w0rd' "sAMAccountName=Administrateur"
ldapsearch -x -H 'ldaps://2K8R2.mathieu.local:3269' -b 'DC=mathieu,DC=local' -D 'administrateur' -w 'P@$$w0rd' "sAMAccountName=Administrateur"
Exporter le certificat du serveur LDAP au format x509 en base64 et transférer le sur le tomcat.
openssl x509 -in LDAP.cer -out LDAP.der -outform DER
keytool -import -trustcacerts -alias LDAPS -keystore /usr/lib/jvm/java-1.6.0-openjdk/jre/lib/security/cacerts -file LDAP.der
vi /var/lib/tomcat6/webapps/cas/WEB-INF/deployerConfigContext.xml
<property name="url" value="ldaps://192.168.1.32:3269" />
vi /etc/tomcat6/server.xml
<file xml>
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="/etc/tomcat6/mykeystore"
keystorePass="P@$$w0rd"
truststoreFile="/usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/security/cacerts" />
</code>