navigation
Home
admin
|
Cas
October 18th, 2016
|
| Table des matières |  |
- Principes
- Changement de version du tomcat
- Changement de version du jdk
- Installation
- Installation pour un AD sur une debian jessie
- Config AJP
- Config RESTFul
- Utilisation
- Page de login
- Vulnerability CVE-2010-4172
- Note 1
- TGC
- People et Peoplext (i.e. recherche dans deux arborescences)
- Consommation de CPU trop importante
- CAS et openldap (05/2011)
- Logs
- Gestion des attributs
- Monitoring avec JavaMelody
- Config des logs : username et service accédé sur une même ligne de log
- Config des logs : Modifier l'affichage de auth.log
- Modifier le serveur ldap vers lequel pointe le CAS
- Messsages d'erreurs
| Principes |  |
"Sans trop entrer dans les détails du protocole CAS, en voici les principes généraux :
Lorsque lutilisateur sauthentifie auprès de CAS, il obtient un TGT (Ticket Granting Ticket). Ce ticket nest jamais présenté aux applications, il permet à CAS didentifier lutilisateur.
Lorsque lutilisateur souhaite utiliser un service (une application), il demande à CAS un ST (Service Ticket) pour le service donné, en fournissant son TGT ainsi que le nom du service.
Lutilisateur présente ensuite son ST à lapplication. Celle-ci contacte CAS en lui fournissant le ST et son nom de service. CAS retourne lidentité de lutilisateur.
<fD> Dès lors, lapplication peut placer lidentité de lutilisateur dans la session quelle maintient avec celui-ci.
Afin dêtre compatible avec une utilisation web, ce protocole se traduit en pratique par un stockage du TGT dans un cookie accessible uniquement à CAS, et lutilisation de redirections HTTP avec des URL du type /cas/login?service=nomService pour demander un ST et /myapp/login?ST=leTicket pour authentifier lutilisateur au sein dune application.
Notez quon trouve des ressemblances avec le protocole Kerberos, à ceci prêt que les tickets ne contiennent pas directement lidentité de lutilisateur."
Source : http://blog.excilys.com/2010/05/06/cas-et-grails-sans-sarcasmes/
| Changement de version du tomcat |  |
Installer la nouvelle version de tomcat cf doc Tomcat
puis :
cp -r tomcat/webapps/cas apache-tomcat-6.0.32/webapps/
cp tomcat/conf/logging.properties apache-tomcat-6.0.32/conf # modification de l'emplacement des logs
chown -R tomcat tomcat |
relancer le tomcat et c'est tt...
| Installation |  |
Tomcat
Première étape : installer un tomcat : cf http://perso.univ-lemans.fr/~brichard/logiciels/?doc=Tomcat
Note : ne pas oublier les configs spécifiques (cf docs priv).
cas-toolbox
- Utilisation de cas-toolbox-3.3.5-3 cas-toolbox-3.4.7-1 (téléchargement ici : https://sourcesup.cru.fr/frs/?group_id=401)
- Modification de : (Cf README)
build.properties
-> deploy.path=/usr/local/tomcat/webapps/cas
-> cas.package.version=3.4.7 (à rajouter)
sinon on a des erreurs du type :
BUILD FAILED
/usr/local/src/cas-toolbox-3.3.5-3/build.xml:294: src '/usr/local/src/cas-toolbox-3.3.5-3/build/maven-repository/org/jasig/cas/cas-server-webapp/${cas.package.version}/cas-server-webapp-${cas.package.version}.war' doesn't exist.
|
ou
BUILD FAILED
/usr/local/src/cas-toolbox-3.4.7-1/build.xml:294: src '/usr/local/src/cas-toolbox-3.4.7-1/build/maven-repository/org/jasig/cas/cas-server-webapp/${cas.package.version}/cas-server-webapp-${cas.package.version}.war' doesn't exist.
|
config.properties
ldap.host
ldap.basedn
cas.host : cas.domaine.fr
cas.uri : /cas
cas.port : :8009
cas.authHandlers=ldapHandler (fileHandler -> ldapHandler)
Le tomcat (donc le cas) répond uniquement en http sur le 8009.
Le https est fait par le apache via le mode proxy AJP.
Proxy : (cf. http://www.esup-portail.org/display/PROJESUPECM/Installation+de+ESUP-ECM)
Pour maven il faut créer un fichier ~/.m2/settings.xml :
<settings>
<proxies>
<proxy>
<active>true</active>
<protocol>http</protocol>
<host>proxy-host.domain.org</host>
<port>1234</port>
<nonProxyHosts>*.domaine.fr|localhost</nonProxyHosts>
</proxy>
</proxies>
</settings>
|
Pour la config ldap, regarder ici http://perso.univ-lemans.fr/~brichard/secu/?doc=Cas#modif_ldap et ici http://perso.univ-lemans.fr/~brichard/secu/?doc=Cas#peoplext
Pour la config des logs, regarder ici http://perso.univ-lemans.fr/~brichard/secu/?doc=Cas#logs
Pour RestFul, regarder ici http://perso.univ-lemans.fr/~brichard/secu/?doc=Cas#restful
Pour Melody, regarder ici http://perso.univ-lemans.fr/~brichard/secu/?doc=Cas#monitoring et ici http://perso.univ-lemans.fr/~brichard/secu/?doc=Cas#monitoring
Pour la customisation de la page de login, regarder ici http://perso.univ-lemans.fr/~brichard/secu/?doc=Cas#login
(Note pour moi : un bilan précis des fichiers à modifier est à consulter dans ma doc privée)
Puis lancer :
-
En cas d'essais multiples, un "ant clean" préalable peut être nécessaire.
/* ------------ pas observé lors de la dernière install --------
// 1. ERROR in /usr/local/src/cas-toolbox-3.3.5-3/update/source/org/esupportail/cas/HandlersDiscover.java (at
// line 13)
// private List<AuthenticationHandler> listToAdd;
// ^^^^
// The type List is not generic; it cannot be parameterized with arguments <AuthenticationHandler>
// -> installer un jdk différent de celui installé par défaut sur la debian
*/
-
Relancer tomcat
Tester :
https://cas.domaine.fr/cas
J'ai modifié l'emplacement des logs => voir rubrique dédiée.
| Installation pour un AD sur une debian jessie |  |
Tomcat
- Première étape : installer un tomcat : cf http://perso.univ-lemans.fr/~brichard/logiciels/?doc=Tomcat
: pour cette install, on utilise les paquets debian et tomcat6
Configuration de cas-toolbox
- Utilisation de cas-toolbox-3.4.7-1 (téléchargement ici : https://sourcesup.cru.fr/frs/?group_id=401)
- Modification de : (Cf README)
build.properties
-> deploy.path=/var/lib/tomcat6/webapps/cas
-> cas.package.version=3.4.7 (à rajouter)
sinon on a des erreurs du type :
BUILD FAILED
/usr/local/src/cas-toolbox-3.3.5-3/build.xml:294: src '/usr/local/src/cas-toolbox-3.3.5-3/build/maven-repository/org/jasig/cas/cas-server-webapp/${cas.package.version}/cas-server-webapp-${cas.package.version}.war' doesn't exist.
|
ou
BUILD FAILED
/usr/local/src/cas-toolbox-3.4.7-1/build.xml:294: src '/usr/local/src/cas-toolbox-3.4.7-1/build/maven-repository/org/jasig/cas/cas-server-webapp/${cas.package.version}/cas-server-webapp-${cas.package.version}.war' doesn't exist.
|
config.properties
ldap.host.1=ldap://xxxx:389
ldap.host.2=ldap://yyyy:389
ldap.searchBase=OU=aaa,OU=bbb,OU=ccc
ldap.filter=sAMAccountName=%u
ldap.userName=<ici un compte pour se connecter en lecture à l'AD>
ldap.password=<ici le mot de passe du compte ci-dessus>
cas.host = cas.domaine.fr
cas.uri = /cas
cas.port = :8009
cas.authHandlers=ldapHandler (fileHandler -> ldapHandler)
ldap-auth.xml
mkdir -p custom/webpages/WEB-INF/auth-configuration/
cp -p update/webpages/WEB-INF/auth-configuration/ldap-auth.xml custom/webpages/WEB-INF/auth-configuration/ |
Pour que ca fonctionne, il faut utiliser BindLdapAuthenticationHandler
https://wiki.jasig.org/display/CASUM/LDAP
Les lignes à modifier du fichier custom/webpages/WEB-INF/auth-configuration/ldap-auth.xml sont les suivantes :
[...]
<bean id="ldapHandler" class="org.jasig.cas.adaptors.ldap.BindLdapAuthenticationHandler" lazy-init="true">
<property name="filter" value="${ldap.filter}" />
<property name="searchBase" value="${ldap.basedn}" />
[...]
|
Il faut également rajouter 2 lignes sous <bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource" :
<property name="userDn" value="${ldap.userName}" />
<property name="password" value="${ldap.password}" /> |
et passer la propriété pooled de false à true :
<property name="pooled" value="true" /> |
cas.properties
cp -p update/webpages/WEB-INF/cas.properties custom/webpages/WEB-INF/ |
Modification de custom/webpages/WEB-INF/cas.properties :
[...]
cas.authHandlers=ldapHandler
ldap.host.1=@ldap.host.1@
ldap.host.2=@ldap.host.2@
ldap.filter=@ldap.filter@
ldap.searchBase=@ldap.searchBase@
ldap.userName=@ldap.userName@
ldap.password=@ldap.password@
[...]
|
Déployement
-
En cas d'essais multiples, un "ant clean" préalable peut être nécessaire.
Erreur lors de l'ant init
BUILD FAILED
/usr/local/src/cas-toolbox-3.4.7-1/build.xml:358: Unable to resolve artifact: Unable to get dependency information: Unable to read the metadata file for artifact 'org.jasig.cas:cas-server-core:jar': Cannot find parent: org.jasig.parent:jasig-parent for project: org.jasig.cas:cas-server:pom:3.4.7 for project org.jasig.cas:cas-server:pom:3.4.7 |
Une solution : télécharger le fichier cas-maven-repository-3.4.7.1.tar.gz sur le site de sourcesup.cru.fr et le détarrer dans le répertoire build
-
Tests
Relancer tomcat
Tester :
http://cas.domaine.fr:8080/cas
Proxy AJP
Installer apache avec les modules ssl et proxy_ajp
apache2ctl -M
[...]
proxy_ajp_module (shared)
ssl_module (shared)
[...] |
Modifier la config d'apache. Dans le vhost ajouter :
ProxyPass /cas ajp://127.0.0.1:8009/cas/ |
SI on met ProxyPass /cas/ ajp://127.0.0.1:8009/cas/ (notez le / après cas), l'URL d'accès sera https://cas.domaine.fr/cas/ avec la encore un / à la fin de l'URL.
Modifier la config de tomcat. Dans le fichier /etc/tomcat6/server.xml, décommenter la ligne suivante :
<Connector port="8009" protocol="AJP/1.3" redirectPort="8080" /> |
Tests
Relancer tomcat et apache
Tester :
https://cas.domaine.fr/cas
Gestion des logs
cp update.esup/webpages/WEB-INF/classes/log4j.xml custom/webpages/WEB-INF/classes/ |
et tt se configure dans le fichier log4j.xml
Configurer la rotation des logs
http://www.codejava.net/coding/configure-log4j-for-creating-daily-rolling-log-files
| Changement de version du jdk |  |
Testé un chgt de tomcat + un chgt de jdk...
J'ai eu le message d'erreur suivant :
The Spring ContextLoaderListener we wrap threw on contextInitialized.
But for our having caught this error, the web application context would not have initialized.
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'validationAnnotationBeanPostProcessor' defined in ServletContext resource [/WEB-INF/spring-configuration/applicationContext.xml]: Initialization of bean failed; nested exception is java.lang.IllegalArgumentException: error the @annotation pointcut expression is only supported at Java 5 compliance level or above |
En conservant le même jdk, il n'y a pas de pb...
| Redirection AJP |  |
Activer le module ajp :
Editer default-ssl :
ProxyPass /cas/ ajp://127.0.0.1:8009/cas/ |
Problème :
client denied by server configuration: proxy:ajp://127.0.0.1:8009/examples/
solution : modifier /etc/apache2/mods-enabled/proxy.conf
et rajouter une ligne allow from all après le deny from all
Note : lorsqu'on utilise une redirection AJP, il n'est plus nécessaire que configurer
le tomcat pour qu'il fasse du ssl...Le serveur https se charge de tout.
| Installation de RESTful (F. Carlier) |  |
cf. http://www.crium.univ-metz.fr/reseau/auth/cas/
cf. http://gibbs.acu.edu/2009/03/20/iphone-cas-auth/comment-page-1/#comment-1813
cf. https://wiki.jasig.org/display/CASUM/RESTful+API
Config initiale
cd cas-toolbox-3.3.5-3/
mkdir -p custom/webpages/WEB-INF/
cp update/webpages/WEB-INF/web.xml custom/webpages/WEB-INF/
|
Modifier le fichier web.xml. Ajouter à la fin (juste avant </web-app>) :
<servlet>
<servlet-name>restlet</servlet-name>
<servlet-class>com.noelios.restlet.ext.spring.RestletFrameworkServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>restlet</servlet-name>
<url-pattern>/v1/*</url-pattern>
</servlet-mapping>
|
Télécharger la version 1.1.10 http://www.restlet.org/downloads/1.1/
cd /usr/local/src/restlet-1.1.10/lib
cp org.restlet.jar /usr/local/tomcat/webapps/cas/WEB-INF/lib/
cp org.restlet.ext.spring_2.5.jar /usr/local/tomcat/webapps/cas/WEB-INF/lib/
cp com.noelios.restlet.jar /usr/local/tomcat/webapps/cas/WEB-INF/lib
cp com.noelios.restlet.ext.spring_2.5.jar /usr/local/tomcat/webapps/cas/WEB-INF/lib
cp com.noelios.restlet.ext.servlet_2.5.jar /usr/local/tomcat/webapps/cas/WEB-INF/lib
cd ../../cas-toolbox-3.3.5-3/
cp ./build/maven-repository/org/jasig/cas/cas-server-integration-restlet/3.3.5/cas-server-integration-restlet-3.3.5.jar /usr/local/tomcat/webapps/cas/WEB-INF/lib/
|
Télécharger cglib .jar (http://cglib.sourceforge.net/) et copier le jar dans /usr/local/tomcat/webapps/cas/WEB-INF/lib/
Télécharger asm-4.0_RC1.jar (http://forge.ow2.org/projects/asm/) et copier le jar dans /usr/local/tomcat/webapps/cas/WEB-INF/lib/
Tests :
Récupérer le client python ici : https://wiki.jasig.org/display/CASUM/RESTful+API
modifs :
params = /* mettre username et password */
conn = httplib.HTTPSConnection("serveurcas.domaine.fr") /* à faire à deux endroits */
conn.request("POST", "/cas/v1/tickets/", params, headers) /* à faire à deux endroits */
document = '/cas_protected_v2/index.html'
service = 'http://serveurweb.domaine.fr'
|
Résultat :
iq:~# ./test_restful
201 Créé
https://serveurcas.domaine.fr/cas/v1/tickets/TGT-48006-bwDtc0NIcZLbKJrDq5OWVlNiNyzhTZgWCzegFRQRm1IWOdB3-serveurcas.domaine.fr
TGT-48006-bwDtc0NIcZLbKJrDq5OWVlNiNyzhTZgWCzegFRQRm1IWOdB3-serveurcas.domaine.fr
***
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><html><head><title>201 The request has been fulfilled and resulted in a new resource being created</title></head><body><h1>TGT Created</h1><form action="https://serveurcas.domaine.fr/cas/v1/tickets/TGT-48006-bwDtc0NIcZLbKJrDq5OWVlNiNyzhTZgWCzegFRQRm1IWOdB3-serveurcas.domaine.fr" method="POST">Service:<input type="text" name="service" value=""><br><input type="submit" value="Submit"></form></body></html>
200 OK
service: http://serveurweb.domaine.fr
st : ST-52446-mxIFVbeqYcpfkH9rA2-serveurcas.domaine.fr
***
url : http://serveurweb.domaine.fr?ticket=ST-52446-mxIbeAeqYcpfkH9rA2-serveurcas.domaine.fr
<html><body><h1>OK</h1></body></html>
|
Erreurs
Grave: Unhandled exception or error intercepted
org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.jasig.cas.integration.restlet.TicketResource] for bean with name 'ticketResource' defined in ServletContext resource [/WEB-INF/restlet-servlet.xml]; nested exception is java.lang.ClassNotFoundException: org.jasig.cas.integration.restlet.TicketResource |
Solution : cp cas-toolbox-3.4.7-1/build/maven-repository/org/jasig/cas/cas-server-integration-restlet/3.4.7/cas-server-integration-restlet-3.4.7.jar /usr/local/tomcat/webapps/cas/WEB-INF/lib/ |
| Utilisation |  |
- Cassifier un répertoire
- [secu/?doc=Apache_2_-_Cassifier_un_repertoire_-_PHPCAS">PHPCAS
| Page de login |  |
A voir ici : cas/WEB-INF/view/jsp/default/ui et cas/WEB-INF/view/jsp/default/ui/includes
Ne pas oublier de copier css, img, images
docs :
http://www.esup-portail.org/consortium/espace/SSO_1B/tech/cas/cas_x509.html#3.3
Après copie des fichiers, ne pas oublier de supprimer le répertoire /usr/local/tomcat/work/Catalina pour une prise en compte immédiate des modifs.
| Vulnerability CVE-2010-4172 |  |
Apache Tomcat Manager application XSS vulnerability
ce que je fais :
cd /usr/local/tomcat/webapps/manager/WEB-INF/jsp
mv sessionDetail.jsp sessionDetail.jsp.vulnerability-CVE-2010-4172
mv sessionDetail.jsp sessionDetail.jsp.vulnerability-CVE-2010-4172
| Note 1 |  |
catalina.out :
"INFO: validateJarFile(/usr/local/tomcat/webapps/cas/WEB-INF/lib/servlet-api-2.4.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class"
http://comments.gmane.org/gmane.comp.jakarta.tomcat.user/199694 :
"You must never place the servlet-api-*.jar file in your webapp's WEB-INF/lib directory; the container
(Tomcat, in this case) provides that jar."
| TGC |  |
La durée de vie du Ticket Granting Cookie : par défaut, elle est de 2 heures.
http://www.esup-portail.org/consortium/espace/SSO_1B/cas/jres/cas-jres2003-article-web.htm
Si les informations sont correctes, le serveur renvoie au navigateur un cookie appelé TGC (Ticket Granting Cookie).
Le Ticket Granting Cookie (TGC) est le passeport de l'utilisateur auprès du serveur CAS. Le TGC, à durée de vie limitée (typiquement quelques heures), est le moyen pour les navigateurs d'obtenir auprès du serveur CAS des tickets pour les clients CAS sans avoir à se ré-authentifier. C'est un cookie privé (n'est jamais transmis à d'autres serveurs que le serveur CAS) et protégé (toutes les requètes des navigateurs vers le serveur CAS se font sous HTTPS). Comme tous les tickets utilisés dans le mécanisme CAS, il est opaque (ne contient aucune information sur l'utilisateur authentifié) : c'est un identifiant de session entre le navigateur et le serveur CAS.
https://wiki.jasig.org/display/CAS2/Adjusting+the+CAS+SSO+duration
Out of the box parameters
In web.xml, you can adjust ticket timeouts. Specifically, the ticket granting ticket timeout is specified as the context parameter "edu.yale.its.tp.cas.grantingTimeout". It is specifed in seconds, and its default value is two hours.
<!-- Timeout for granting tickets -->
<context-param>
<param-name>edu.yale.its.tp.cas.grantingTimeout</param-name>
<param-value>7200</param-value>
</context-param>
Since the timeouts are stored as integers (max value 2,147,483,647) and converted to milliseconds, the maximum timeout in seconds is: 2147483 (almost 25 days). If you need longer timeouts than that, you will have to change 'int' to 'long' for timeouts and tolerances in the CAS java code.
| People et Peoplext (i.e. recherche dans deux arborescences) |  |
1/ Modifs de /usr/local/tomcat/webapps/cas/WEB-INF/cas.properties :
[...]
cas.authHandlers=ldapHandler
ldap.host.1=ldap://iq.domaine.fr:389
ldap.host.2=@ldap.host.2@
ldap.basedn=dc=domaine,dc=fr
ldap.filter=(&(|(ou:dn:=peoplext)(ou:dn:=people) ) (uid=%u) )
[...]
|
Pour que ca fonctionne, il faut utiliser BindLdapAuthenticationHandler
https://wiki.jasig.org/display/CASUM/LDAP
=>
2/ Modifs de /usr/local/tomcat/webapps/cas/WEB-INF/auth-configuration/ldap-auth.xml
Les lignes à modifier sont les suivantes :
[...]
<bean id="ldapHandler" class="org.jasig.cas.adaptors.ldap.BindLdapAuthenticationHandler" lazy-init="true">
<property name="filter" value="${ldap.filter}" />
<property name="searchBase" value="${ldap.basedn}" />
[...]
|
| Consommation de CPU trop importante |  |
cf https://listes.esup-portail.org/sympa/arc/cas-fr/2010-12/msg00006.html
Modif de /usr/local/tomcat/webapps/cas/WEB-INF/spring-configuration/auditTrailContext.xml :
on commente le bean org.inspektr.statistics.StatisticManagementAspect"
Note du 12/1/2012 : modif non nécessaire pour cas-toolbox-3.4.7.1
| CAS et openldap (05/2011) |  |
http://www.crium.univ-metz.fr/reseau/auth/cas/
ldap-auth.xml est distribué avec
<property name="pooled" value="true" /> |
les
<entry key="com.sun.jndi.ldap.connect.timeout" value="100"/>
<entry key="com.sun.jndi.ldap.read.timeout" value="30"/>
ou
<entry key="com.sun.jndi.ldap.connect.pool.timeout" value="10"/>
|
ne semblent pas pris en compte, les connexions ldap restent ouvertes et finissent par saturer openldap :
il faut passer le pooled à "false"
-> fait sur cas
| Logs |  |
Configuration
tt se configure ici :
/custom/webapps/cas/WEB-INF/classes/log4j.xml
Version-Specific Warning
As of CAS Server 3.4, an XML-based log4j configuration file is used instead of a properties file.
Source : https://wiki.jasig.org/display/CASUM/Logging
cp ./cas-toolbox-3.4.7-1/update.esup/webpages/WEB-INF/classes/log4j.xml cas-toolbox-3.4.7-1/custom/webpages/WEB-INF/classes/ |
On peut par exemple passer log4j.logger.org.jasig à DEBUG
Note : il faut copier log4j-1.2.15.jar dans custom/webpages/WEB-INF/lib/
Changer le répertoire destination des logs
Pour modifier le répertoire dans lequel sont stockés les logs, j'ai modifié les fichiers :
/usr/local/tomcat/webapps/cas/WEB-INF/classes/log4j.xml (auth.log et cas.log)
/usr/local/tomcat/conf/logging.properties
Configurer la rotation des logs
http://www.codejava.net/coding/configure-log4j-for-creating-daily-rolling-log-files
| Cas et les attributs LDAP (5/2011) |  |
cf http://www.crium.univ-metz.fr/reseau/auth/cas/
cf https://wiki.jasig.org/display/CASUM/Attributes
Cas propose de diffuser des attributs récupérés dans le LDAP.
La procédure ci-dessous montre comment on peut récupérer ces attributs
depuis une page Web.
(cas-toolbox 3.3.5-3 et tomcat 6.0.32)
1/ Installation de phpCAS 1.2.1 (pb possibles avec les versions antérieures)
2/ Configuration du service manager :
Le "Services Management" est dispo à l'adresse : http://monserveurcas:8080/cas/services/manage.html
cf : https://wiki.jasig.org/display/CASUM/Services+Management
Persistance de la config : deux solutions :
- via hibernate comme indiqué ici :
https://wiki.jasig.org/display/CASUM/Configuring
- via le fichier deployerConfigContext.xml dans le bean "serviceRegistryDao" comme ceci par exemple :
<!-- on definit ici qui peut accéder au service -->
<bean id="userDetailsService" class="org.springframework.security.userdetails.memory.InMemoryDaoImpl">
<property name="userMap">
<value>
${security.useradmin}=notused,ROLE_ADMIN
bruno=notused,ROLE_ADMIN
</value>
</property>
</bean>
<!-- on definit ici les attributs qui sont proposes -->
<bean id="attributeRepository"
class="org.jasig.services.persondir.support.StubPersonAttributeDao">
<property name="backingMap">
<map>
<entry key="uid" value="uid" />
<entry key="mail" value="mail" />
</map>
</property>
</bean>
<!-- on definit ici les services -->
<bean id="serviceRegistryDao" class="org.jasig.cas.services.InMemoryServiceRegistryDaoImpl">
<property name="registeredServices">
<list>
<bean
class="org.jasig.cas.services.RegisteredServiceImpl"
p:id="1"
p:description="Services Management"
p:serviceId="http://serveur.domaine.fr:8080/cas/services/**"
p:name="Services Management"
p:theme="default"
p:allowedToProxy="true"
p:enabled="true"
p:ssoEnabled="true"
p:anonymousAccess="false">
<property name="allowedAttributes">
<list/>
</property>
</bean>
<bean class="org.jasig.cas.services.RegisteredServiceImpl"
p:id="2"
p:description="HTTP"
p:serviceId="http://*.domaine.fr/**"
p:name="HTTP"
p:theme="default"
p:allowedToProxy="true"
p:enabled="true"
p:ssoEnabled="true"
p:anonymousAccess="false">
<property name="allowedAttributes">
<list>
<value>uid</value>
<value>mail</value>
</list>
</property>
</bean>
<bean class="org.jasig.cas.services.RegisteredServiceImpl"
p:id="3"
p:description="HTTPS"
p:serviceId="https://*.domaine.fr/**"
p:name="HTTPS"
p:theme="default"
p:allowedToProxy="true"
p:enabled="true"
p:ssoEnabled="true"
p:anonymousAccess="false">
<property name="allowedAttributes">
<list>
<value>uid</value>
<value>mail</value>
</list>
</property>
</bean>
</list>
</property>
</bean>
|
3/ Modification de l'authentification (tjs dans deployerConfigContext.xml)
<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.authentication.principal.CredentialsToLDAPAttributePrincipalResolver">
<!-- The Principal resolver form the credentials -->
<property name="credentialsToPrincipalResolver">
<bean class=
"org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver" />
</property>
<property name="filter" value="${ldap.filter}" />
<!-- The attribute used to define the new Principal ID -->
<property name="principalAttributeName" value="uid" />
<property name="searchBase" value="${ldap.basedn}" />
<property name="contextSource" ref="contextSource" />
<property name="attributeRepository" ref="attribRepository" />
</bean>
</list>
</property>
<property name="authenticationHandlers" >
<ref bean="handlerList"/>
</property>
</bean>
|
4/ Ajout du contextSource (tjs dans deployerConfigContext.xml)
on a sinon des erreurs du type "Cannot resolve reference to bean 'contextSource'"
<bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource">
<property name="anonymousReadOnly" value="false" />
<!-- <property name="pooled" value="true" /> -->
<property name="pooled" value="false" />
<property name="urls">
<list>
<value>ldap://monldap.domaine.fr:389</value>
</list>
</property>
<property name="userDn" value="cn=administrateur,dc=domaine,dc=fr"/>
<property name="password" value="mot_de_passe"/>
<property name="baseEnvironmentProperties">
<map>
<!--
<entry>
<key><value>java.naming.security.protocol</value></key>
<value>ssl</value>
</entry>
-->
<entry>
<key><value>java.naming.security.authentication</value></key>
<value>simple</value>
</entry>
</map>
</property>
</bean>
|
5/ Modification de ldap-auth.xml
Ajout du bean attribRepository :
<bean id="attribRepository" class="org.jasig.services.persondir.support.ldap.LdapPersonAttributeDao">
<property name="contextSource" ref="contextSource" />
<property name="baseDN" value="${ldap.basedn}" />
<property name="requireAllQueryAttributes" value="true" />
<!--
Attribute mapping beetween principal (key) and LDAP (value) names
used to perform the LDAP search. By default, multiple search criteria
are ANDed together. Set the queryType property to change to OR.
-->
<property name="queryAttributeMapping">
<map>
<entry key="uid" value="uid" />
</map>
</property>
<property name="resultAttributeMapping">
<map>
<!-- Mapping beetween LDAP entry attributes (key) and Principal's (value) -->
<entry key="uid" value="uid"/>
<entry key="mail" value="mail"/>
</map>
</property>
</bean>
|
6/ Définition de ldap.filter dans cas.properties
on a sinon l'erreur : "Could not resolve placeholder 'ldap.filter'"
Note : cet ajout implique de quitter le mode FastBindLdapAuthenticationHandler
pour le BindLdapAuthenticationHandler (cf plus haut people et peoplext)
7/ Modification de la vue : view/jsp/protocol/2.0/casServiceValidationSuccess.jsp
Ajout de :
<c:forEach var="auth" items="${assertion.chainedAuthentications}">
<c:forEach var="attr" items="${auth.principal.attributes}" >
<c:forEach var="value" items="${attr.value}">
<cas:attribute name="${fn:escapeXml(attr.key)}" value="${fn:escapeXml(value)}" />
</c:forEach>
</c:forEach>
</c:forEach>
|
9/ Consultation des attributs
$attr = phpCAS::getAttributes();
echo "nb attributs : ".count($attr)."<br>";
foreach (phpCAS::getAttributes() as $key => $value) {
if (is_array($value"> {
echo '<li>', $key, ':<ol>';
foreach($value as $item) {
echo '<li><strong>', $item, '</strong></li>';
}
echo '</ol></li>';
} else {
echo '<li>', $key, ': <strong>', $value, '</strong></li>';
}
}
|
| Monitoring - javaMelody (5/2011) |  |
http://code.google.com/p/javamelody/
Installation :
- télécharger le zip
- cp javamelody.jar /usr/local/tomcat/webapps/cas/WEB-INF/lib/
- cp jrobin-1.5.9.1.jar /usr/local/tomcat/webapps/cas/WEB-INF/lib/
- Modification du fichier web.xml (à rajouter en tt début de fichier après la ligne <?web-app [...]>
<!-- pour melody -->
<filter>
<filter-name>monitoring</filter-name>
<filter-class>net.bull.javamelody.MonitoringFilter</filter-class>
<init-param>
<param-name>quartz-default-listener-disabled</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>monitoring</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>net.bull.javamelody.SessionListener</listener-class>
</listener>
|
Le service est accessible à l'adressse http://server:8080/cas/monitoring
Suppléments
- Problème 1 : Tomcat ne s'arrete plus...
GRAVE: The web application [/cas] appears to have started a thread named [DefaultQuartzScheduler_QuartzSchedulerThread] but has failed to stop it. This is very likely to create a memory leak.
|
Modification du fichier spring-configuration/applicationContext.xml (après les balises <description> par exemple)
<bean id="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="exposeSchedulerInRepository" value="true" />
</bean>
|
- Restreindre les access à une plage d'IP
Rajouter dans le fichier web.xml
<init-param>
<param-name>allowed-addr-pattern</param-name>
<param-value>172.6.8..*|172.6.18..*</param-value>
</init-param>
|
- Problème 2 : les graphiques ne sont pas affichés et on a l'erreur suivante :
java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment
|
Solution (http://wiki.apache.org/tomcat/FAQ/Linux_Unix#Q2
Ajouter l'option
au démarrage.
| Config des logs : username et service accédé sur une même ligne de log (6/2011) |  |
Objectif : obtenir, sur une même ligne de log, le username et le service accédé.
il suffit d'activer le log au niveau INFO pour la classe org.jasig.cas.CentralAuthenticationServiceImpl
Source : Philippe Marasse cas-fr@esup-portail.org
Exemple :
2011-06-06 09:31:08,177 INFO [org.jasig.cas.CentralAuthenticationServiceImpl] - Granted service ticket [ST-1-B4Bl9PnvJwqxwFm7K-iq.domaine.fr] for service [http://domaine.fr/service] for user [bruno]
|
| Config des logs : Modifier l'affichage de auth.log (1/2012) |  |
Il faut modifier le fichier source/org/esupportail/cas/audit/support/AuthAuditTrailManager.java
| Modifier le serveur ldap vers lequel pointe le CAS |  |
Modifier le fichier /usr/local/tomcat/webapps/cas/WEB-INF/cas.properties et relancer !
c'est tout
| Messages d'erreurs |  |
ATTENTION: processCallbacks status 2
Ce message apparait régulièrement dans catalina.out.
Il est à priori sans gravité :
Yeah, this should probably be lowered to DEBUG level logging. It usually
happens when Apache drops the connection before Tomcat can send the "I'm
ready for the next request" message. As such, it is pretty harmless (other
than disk space). After this, Tomcat will just send the Thread back to it's
pool to await another connection. |
Source : http://mail-archives.apache.org/mod_mbox/tomcat-users/200901.mbox/%3Cgjugcj$6hq$1@ger.gmane.org%3E
java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
Passage de la cas-toolbox en version 3.4.7 et du jdk en version 1.7u3.
Problème sur certains clients en jdk 1.6.0_17 :
test : http://www.esup-portail.org/consortium/espace/SSO_1B/tech/cas/CAStroubleshooting.html#8.2.3
Exception in thread "main" javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors |
Solution 1 : recréer un keystore
keytool -import -alias cas.univ-lemans.fr -keystore cas.keystore -file cas.crt |
Solution 2 : modifier le keystore de JRE
keytool -import -v -trustcacerts -alias cas.univ-lemans.fr -file cas.crt -keystore [...]/jre/lib/security/cacerts |
|
|
Contact
|
|---|
Pour m'envoyer un mail, Pour me laisser un commentaire :richard.brunooo chez gmail.com |  |
|
|