...
Installation système
Installer le package tomcat5 les packages Tomcat (yum install tomcat5), Apache (yum install tomcat5httpd), puis Maven :
Bloc de code |
---|
[root@cas-kerb ~]# cd /usr/local [root@cas-kerb local]# wget ftp://ftp.inria.fr/pub/Apache/maven/binaries/apache-maven-2.2.1-bin.tar.gz --2010-03-09 10:35:41-- 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 /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) 100%[================================>] 2,840,961 2.01M/s in 1.3s 2010-03-09 10:35:43 (2.01 MB/s) - `apache-maven-2.2.1-bin.tar.gz' saved [2840961] [root@cas-kerb local]# tar xf apache-maven-2.2.1-bin.tar.gz [root@cas-kerb local]# ln -s apache-maven-2.2.1 maven2 [root@cas-kerb local]# cd /etc/profile.d [root@cas-kerb profile.d]# cat > maven2.sh export PATH=$PATH:/usr/local/maven2/bin [root@cas-kerb profile.d]# chmod 644 maven2.sh [root@cas-kerb profile.d]# . maven2.sh [root@cas-kerb profile.d]# |
...
Astuce | ||
---|---|---|
| ||
Ajouter dans le fichier src/main/webapp/WEB-INF/classes/log4j.properties la ligne suivante :
Les logs se trouvent dans le répertoire /var/log/tomcat5. La mise au point la plus difficile est celle de Kerberos . Les (les logs en debug de Krb5LoginModule se trouvent dans catalina.out). |
Test
Désactiver si nécessaire le firewall pour le port 8080 (system-config-firewall) et tester Tester http://cas-kerb.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) :
Bloc de code |
---|
[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 :
Bloc de code |
---|
[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 :
Bloc de code |
---|
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 :
Bloc de code |
---|
#!/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>
Script de déploiement de CAS
Pour faciliter le déploiement du serveur CAS et le redémarrage de Tomcat, on pourra ajouter le script /usr/local/cas-server-3.3.5/deploy-restart.sh suivant :
Bloc de code |
---|
[root@cas-kerb ~]# cd /usr/local/cas-server-3.3.5
[root@cas-kerb cas-server-3.3.5]# cat > deploy-restart.sh
#!/bin/bash
service tomcat5 stop
pushd /usr/local/cas-server-3.3.5/cas-server-webapp
mvn package && rm -f /var/lib/tomcat5/webapps/ROOT.war && cp target/cas.war /var/lib/tomcat5/webapps/ROOT.war
popd
service tomcat5 start
[root@cas-kerb cas-server-3.3.5]# chmod 744 deploy-restart.sh
[root@cas-kerb cas-server-3.3.5]# |
Ajout d'un frontal Apache
On va dans cette partie configurer un frontal Apache sur le port 80, qui va accéder au Tomcat du serveur CAS en AJP sur le port 8009.
Remarque |
---|
Il n'est pas obligatoire de mettre un frontal Apache devant Tomcat, mais cela délègue le chiffrement à Apache au lieu de Tomcat et simplifie l'administration système (cette architecture est employée de manière générale sur les plateformes d'exploitation). |
Configuration de Apache
Insérer dans /etc/httpd/httpd.conf les lignes suivantes :
Bloc de code |
---|
#
# Just a proxy to Tomcat.
#
<Location />
ProxyPass : ajp://cas-kerb.univ-rennes1.fr:8009/ min=0 max=100 smax=50 ttl=10
</Directory> |
Configuration de Tomcat
S'assurer que le connecteur AJP sur le port 8009 est décommenté et a bien le paramètres tomcatAuthentication positionné à false :
Bloc de code | ||||
---|---|---|---|---|
| ||||
<Connector port="8009"
debug="0"
enableLookups="false"
redirectPort="8443"
protocol="AJP/1.3"
tomcatAuthentication="false" /> |
Test
Le serveur CAS doit désormais répondre sur l'URL https://cas-kerb.univ-rennes1.fr (sur le port 80 par défaut en HTTP).
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 :
Bloc de code |
---|
#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 :
Bloc de code |
---|
ProxyPass / ajp://cas.ifsic.univ-rennes1.fr:8009/ min=0 max=100 smax=50 ttl=10 route=ori-indexing |
Le connecteur HTTPS sur le port 8443 peut ê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).
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) :
Bloc de code |
---|
[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 :
Bloc de code |
---|
[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 :
Bloc de code |
---|
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
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 :
Bloc de code | ||||
---|---|---|---|---|
| ||||
<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 :
Bloc de code | ||||
---|---|---|---|---|
| ||||
<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
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.
Remarque |
---|
Il n'est pas obligatoire de mettre un frontal Apache devant Tomcat, mais cela délègue le chiffrement à Apache au lieu de Tomcat et simplifie l'admisnitration système (cette architecture est employée de manière générale sur les plateformes d'exploitation). |
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 :
Bloc de code |
---|
#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 :
Bloc de code |
---|
ProxyPass / ajp://cas.ifsic.univ-rennes1.fr:8009/ min=0 max=100 smax=50 ttl=10 route=ori-indexing |
Configuration de Tomcat
S'assurer que le connecteur AJP sur le port 8009 est décommenté et a bien le paramètres tomcatAuthentication positionné à false :
...
<Connector port="8009"
debug="0"
enableLookups="false"
redirectPort="8443"
protocol="AJP/1.3"
tomcatAuthentication="false" />
Le connecteur HTTPS sur le port 8443 peut ê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
...
Bloc de code |
---|
JAVA_OPTS="$JAVA_OPTS -Djavax.security.auth.useSubjectCredsOnly=false" |
Test
Un navigateur bien configuré et possédant des credentials Kerberos valides doit maintenant se connecter au serveur CAS sans aucune interaction....