Astuce | ||
---|---|---|
| ||
Cette page décrit l'installation de A à Z d'un nouveau serveur CAS qui permet :
Il est facile pour un administrateur CAs d'extraire de cette documentation les éléments nécessaires à l'adaptation d'un serveur CAS existant pour lui donner les fonctionnalités voulues. |
Sommaire |
---|
Nom du serveur | cas-kerb.univ-rennes1.fr |
Système | RedHat Entreprise 5 |
Ouverture de ports | ssh (22 tcp) |
Sommaire |
---|
Nom du serveur | cas-kerb.univ-rennes1.fr |
Système | RedHat Entreprise 5 |
Ouverture de ports | ssh (22 tcp) |
Installation système
...
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 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]# |
Installation de CAS
Télécharger la dernière version de CAS depuis http://www.jasig.org/cas/download et décompresser :
Bloc de code |
---|
[root@cas-kerb ~]# cd /usr/local [root@cas-kerb local]# wget http://www.ja-sig.org/downloads/cas/cas-server-3.3.5-release.tar.gz --2010-03-09 1009: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]# |
Installation de CAS
Télécharger la dernière version de CAS depuis http://www.jasig.org/cas/download et décompresser :
Bloc de code |
---|
[root@cas-kerb ~]# cd /usr/local25:51-- 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 427K/s in 15s 2010-03-09 09:26:07 (919 KB/s) - `cas-server-3.3.5-release.tar.gz' saved [14467126/14467126] [root@cas-kerb local]# tar wget http://www.ja-sig.org/downloads/cas/casxf cas-server-3.3.5-release.tar.gz --2010-03-09 09:25:51-- http://www.ja-sig.org/downloads/cas/[root@cas-kerb local]# cd cas-server-3.3.5 [root@cas-kerb 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 427K/s in 15s 2010-03-09 09:26:07 (919 KB/s) - `cas-server-3.3.5-release.tar.gz' saved [14467126/14467126] [root@cas-kerb local]# tar xf cas-server-3.3.5-release.tar.gz [root@cas-kerb local]# cd cas-server-3.3.5 [root@cas-kerb cas-server-3.3.5]#]# |
Pour diminuer les temps de compilation, on ajoute la propriété skipTests au plugin maven-sunfire dans le fichier pom.xml à la racine du projet :
Bloc de code | ||||
---|---|---|---|---|
| ||||
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
<includes>
<include>**/*Tests.java</include>
</includes>
<excludes>
<exclude>**/Abstract*.java</exclude>
</excludes>
</configuration>
</plugin> |
Créer un répertoire cas-server-rennes1 dans lequel seront stockées toutes les personnalisations et y ajouter le fichier pom.xml suivant :
...
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 |
...
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 #!/bin/bash service tomcat5 stop pushd /var/lib/tomcat5/webapps rm -rf ROOT ROOT.war popd rm -rf /usr/share/tomcat5/work/_ pushd /var/log/tomcat5 rm -rf cas.log catalina.out touch cas.log catalina.out chown tomcat.tomcat cas.log catalina.out popd pushd /usr/local/cas-server-3.3.5/ pushd cas-server-rennes1 mvn package install rm -rf /var/lib/tomcat5/webapps/ROOT rm -rf /var/lib/tomcat5/webapps/ROOT.war rm -rf /usr/share/tomcat5/work/_-rennes1 mvn package install cp target/cas.war /var/lib/tomcat5/webapps/ROOT.war popd 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]# |
...
Après redémarrage de Apache et Tomcat, 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).
Passage en HTTPS
Installer si nécessaire le package mod_ssl (yum install mod_ssl).
Installerle certificat x509 et la cléprivée du serveur dans les répertoires appropriés (/etc/pki/tls/
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/privatecerts/cas-kerb.univ-rennes1.fr.pem #SSLCertificateKeyFile /etc/pki/tls/private/localhost.key SSLCertificateKeyFile /etc/pki/tls/private/cas-kerb.univ-rennes1.fr.key |
...
Après redémarrage de Apache, 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).port 443 par défaut en HTTPS).
Astuce | ||
---|---|---|
| ||
Ne pas oublier de supprimer la ligne suivante de /etc/httpd/conf/httpd.conf :
|
Ajout de l'authentification LDAP
...
Ajout de l'authentification Kerberos
La documentation de référence est http://www.ja-sig.org/wiki/display/CASUM/SPNEGO .
Configuration de Kerberos
Editer le fichier /etc/krb5.conf pour intégrer le serveur au domaine Kerberos :
de référence est http://www.ja-sig.org/wiki/display/CASUM/SPNEGO .
Configuration de Kerberos
Editer le fichier /etc/krb5.conf pour intégrer le serveur au domaine Kerberos :
Bloc de code |
---|
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = UNIV-RENNES1.FR
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
forwardable = yes
[realms]
UNIV-RENNES1.FR = {
kdc = kerb1.univ-rennes1.fr:88
admin_server = kerb1.univ-rennes1.fr:749
default_domain = univ-rennes1.fr
}
[domain_realm]
.univ-rennes1.fr |
Bloc de code |
[logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] default_realm = UNIV-RENNES1.FR dns_lookup_realmuniv-rennes1.fr = false dns_lookup_kdcUNIV-RENNES1.FR [appdefaults] pam = false{ ticket_lifetimedebug = 24hfalse forwardable = yes [realms] UNIV-RENNES1.FR ticket_lifetime = {36000 kdc renew_lifetime = kerb1.univ-rennes1.fr:88 admin_server = kerb1.univ-rennes1.fr:749 default_domain = univ-rennes1.fr } [domain_realm] 36000 forwardable = true krb4_convert = false } |
Ajouter le principal HTTP/cas-kerb.univ-rennes1.fr
...
(casse importante) au royaume et l'exporter dans le fichier /etc/http.keytab :
Bloc de code |
---|
[root@cas-kerb ~]# kadmin
Authenticating as principal rootifsic/admin@UNIV-RENNES1.FR with password.
kadmin: Client not found in Kerberos database while initializing kadmin interface
[rootifsic@cas-kerb ~]# kadmin -p root/admin
Authenticating as principal root/admin with password.
Password for root/admin@UNIV-RENNES1.FR:
kadmin: addprinc -randkey HTTP/cas-kerb.univ-rennes1.fr
WARNING: no policy specified for |
...
HTTP/cas-kerb.univ-rennes1. |
...
Bloc de code |
---|
[root@cas-kerb ~]# kadmin Authenticating as principal rootifsic/admin@UNIVfr@UNIV-RENNES1.FR; defaulting to no policy Principal "HTTP/cas-kerb.univ-rennes1.fr@UNIV-RENNES1.FR" with passwordcreated. kadmin: ktadd Client not found in Kerberos database while initializing kadmin interface [rootifsic@cas-kerb ~]# kadmin -p root/admin Authenticating as principal root/admin with password. Password for root/admin@UNIV-RENNES1.FR: kadmin: addprinc -randkey -k /etc/http.keytab HTTP/cas-kerb.univ-rennes1.fr Entry for principal HTTP/cas-kerb.univ-rennes1.fr with kvno 3, encryption type Triple DES cbc mode with HMAC/sha1 added to keytab WRFILE:/etc/http.keytab. Entry for principal HTTP/cas-kerb.univ-rennes1.fr WARNING: no policy specified for HTTP/cas-kerb.univ-rennes1.fr@UNIV-RENNES1.FR; defaulting to no policy Principal " with kvno 3, encryption type ArcFour with HMAC/md5 added to keytab WRFILE:/etc/http.keytab. Entry for principal HTTP/cas-kerb.univ-rennes1.fr@UNIV-RENNES1.FR" created. kadmin: ktadd -k fr with kvno 3, encryption type DES with HMAC/sha1 added to keytab WRFILE:/etc/http.keytab HTTP/cas-kerb.univ-rennes1.fr Entry for principal HTTP/cas-kerb.univ-rennes1.fr with kvno 3, encryption type Triple DES cbc mode with HMAC/sha1RSA-MD5 added to keytab WRFILE:/etc/http.keytab. Entrykadmin: for principal HTTP/cas-kerb.univ-rennes1.fr with kvno 3, encryption type ArcFour with HMAC/md5 added to keytab WRFILE:/etc/http.keytab. Entry for principal HTTP/cas-kerb.univ-rennes1.fr with kvno 3, encryption type DES with HMAC/sha1 added to keytab WRFILE:/etc/http.keytab. Entry for principal HTTP/cas-kerb.univ-rennes1.fr with kvno 3, encryption type DES cbc mode with RSA-MD5 added to keytab WRFILE:/etc/http.keytab. kadmin: exit [root@cas-kerb ~]# |
...
exit
[root@cas-kerb ~]# |
Le fichier /etc/http.keytab sera utilisé par la librairie JCIFS, il doit être lisible par l'utilisateur tomcat :
Bloc de code |
---|
[root@cas-kerb ~]# cd /etc
[root@cas-kerb etc]# chown root:tomcat http.keytab
[root@cas-kerb etc]# chmod 640 http.keytab
[root@cas-kerb etc]# |
Astuce | ||
---|---|---|
| ||
Ajouter dans le fichier /etc/tomcat5/tomcat5.conf les lignes suivantes :
Les logs se trouvent dans /var/log/tomcat5/catalina.out. |
Configuration de CAS
Ajouter le support du handler spnego
...
Bloc de code | ||||
---|---|---|---|---|
| ||||
<bean id="authenticationManager" class="org.jasig.cas.authentication.AuthenticationManagerImpl"> <property name="credentialsToPrincipalResolvers"> <list> <!-- ... the others credentialsToPrincipalResolvers ... --> <bean class="org.jasig.cas.support.spnego.authentication.principal.SpnegoCredentialsToPrincipalResolver" /> </list> </property> <property name="authenticationHandlers"> <list> <bean class="org.jasig.cas.support.spnego.authentication.handler.support.JCIFSSpnegoAuthenticationHandler"> <property name="authentication"> <bean class="jcifs.spnego.Authentication" /> </property> <property name="principalWithDomainName" value="truefalse" /> <property name="NTLMallowed" value="false"/> </bean> <!-- ... the others authenticationHandlers... --> </list> </property> </bean> |
...
La configuration de JCIFS se fait également dans le fichier login.conf pointé par le bean jcifsConfig. Créer ce fichier avec le contenu suivant :
Bloc de code |
---|
jcifs.spnego.initiatecom.sun.security.jgss.krb5.accept { com.sun.security.auth.module.Krb5LoginModule required useKeyTabdebug=true keyTab="/etc/http.keytab" }; jcifs.spnego.accept { com.sun.security.auth.module.Krb5LoginModule requiredstoreKey=true useKeyTab=true keyTab="/etc/http.keytab" }; |
Astuce |
On peut également ajouter l'option debug=true pour obtenir des informations dans catalina.out. principal="HTTP/cas-kerb.univ-rennes1.fr";
}; |
Configuration de Tomcat
Il faut passer à la JVM qui exécute Tomcat l'option -Djavax.security.auth.useSubjectCredsOnly=false, par exemple en éditant le fichier /etc/tomcat5/tomcat5.conf et en ajoutant la ligne suivante :
...
Bloc de code |
---|
[root@cas-kerb ~]# kadmin -p root/admin Authenticating as principal root/admin with password. Password for root/admin@UNIV-RENNES1.FR: kadmin: addprinc -randkey cas/admin WARNING: no policy specified for cas/admin@UNIV-RENNES1.FR; defaulting to no policy Principal "cas/admin@UNIV-RENNES1.FR" created. kadmin: ktadd -k /etc/cas-admin.keytab cas/admin Entry for principal cas/admin with kvno 3, encryption type Triple DES cbc mode with HMAC/sha1 added to keytab WRFILE:/etc/cas-admin.keytab. Entry for principal cas/admin with kvno 3, encryption type ArcFour with HMAC/md5 added to keytab WRFILE:/etc/cas-admin.keytab. Entry for principal cas/admin with kvno 3, encryption type DES with HMAC/sha1 added to keytab WRFILE:/etc/cas-admin.keytab. Entry for principal cas/admin with kvno 3, encryption type DES cbc mode with RSA-MD5 added to keytab WRFILE:/etc/ DES cbc mode with RSA-MD5 added to keytab WRFILE:/etc/cas-admin.keytab. kadmin: exit [root@cas-kerb ~]# |
Le fichier cas-admin.keytab doit être lisible par l'utilisateur tomcat :
Bloc de code |
---|
[root@cas-kerb ~]# cd /etc [root@cas-kerb etc]# chown root:tomcat cas-admin.keytab [root@cas-kerb etc]# chmod 640 cas-admin.keytab. kadmin: exit [root@cas-kerb ~etc]# |
Il est également nécessaire de modifier les permissions du fichier de log de kadmin sans quoi l'appel de kadmin par l'utilisateur tomcat provoquerait une erreur.
...
Bloc de code | ||||
---|---|---|---|---|
| ||||
<bean id="kerberosFeedConfig" class="org.esupportail.cas.adaptors.kerberosfeed.KerberosFeedConfig"> <property name="kadminPath" value="/usr/kerberos/sbinbin/kadmin" /> <property name="realm" value="UNIV-RENNES1.FR" /> <property name="principal" value="cas/admin" /> <property name="useKeytab" value="true" /> <property name="keytab" value="/etc/cas-admin.keytab" /> <!-- property name="password" value="secret" /--> <property name="passwordAllowedChars" value="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789&~#{([-|`\\_^@)]=+}$%*!:/;.,?><" /> </bean> |
...
Les informations seront ici stockées dans le répertoire /tmp.
Test
Se connecter sur le serveur CAS avec un utilisateur de l'annuaire LDAP (par exemple dupont) et vérifier qu'il est bien ajouté dans la base Kerberos (getprinc dupont sous kadmin sur le KDC).