Au 17 juillet 2023, cette page est en construction, la compatibilité esup-otp-cas avec CAS 6.6.x étant à reprendre.
Contexte
Eté 2023, l'Université de Rouen Normandie a procédé à une montée de version de son service d'authentification CAS en 6.6.9
Cette page wiki vient en complément de nos pages Retour de l'URN sur mise en place de CAS 6.0.4 et Retour de l'URN sur mise en place de CAS 6.4.1 ; les retours que l'on avait fait sur ces versions 6.x sont a priori toujours d'actualité.
Cette installation est faite sur une debian en utilisant CAS Initializr ; jusque-là notre installation et montée de version s'appuyait sur ce qui était utilisé par le Kit installation CAS V5.2 AMU.
On a également profité de cette montée de version pour mettre en place le module OpenID Connect Authentication permettant à CAS de supporter authentification OpenIdConnect (oidc) ent tant que fournisseur (provider/serveur).
Installation
Paquets
apt install openjdk-11-jdk-headless tomcat9 curl unzip
CAS Initializr
Pour construire notre CAS, on ajoute dans le .bashrc de l'utilisateur cas :
function getcas() { url="https://casinit.herokuapp.com/starter.tgz" projectType="cas-overlay" dependencies="" directory="overlay" for arg in $@; do case "$arg" in --url|-u) url=$2 shift 1 ;; --type|-t) projectType=$2 shift 1 ;; --directory|--dir|-d) directory=$2 shift 1 ;; --casVersion|--cas) casVersion="-d casVersion=$2" shift 1 ;; --bootVersion|--springBootVersion|--boot) bootVersion="-d bootVersion=$2" shift 1 ;; --modules|--dependencies|--extensions|-m) dependencies="-d dependencies=$2" shift 1 ;; *) shift ;; esac done rm -Rf ./${directory} echo -e "Generating project ${projectType} with dependencies ${dependencies}..." cmd="curl ${url} -d type=${projectType} -d baseDir=${directory} ${dependencies} ${casVersion} ${bootVersion} | tar -xzvf -" echo -e "${cmd}" eval "${cmd}" ls }
Puis on créé un fichier urn-generate-cas-overlay.sh :
#!/bin/bash -x getcas --cas 6.6.9 --modules support-ldap,support-json-service-registry,support-redis-ticket-registry,support-spnego-webflow,support-trusted-mfa-mongo,support-throttle,support-reports,supp ort-interrupt-webflow,support-oidc
On le lance ce script qui nous construit l'overlay CAS dans le répertoire overlay. Ce répertoire étant sous git dès à présent avec pour premier commit "Project created by Apereo CAS Initializr".
On ajuste le build.gradle pour installer notamment les modules CAS d'esup-otp et esup-agimus ; on fixe aussi le look via l'ajout de css et surcharge de templates.
cas@cas:/opt/overlay$ git diff warning: LF will be replaced by CRLF in build.gradle. The file will have its original line endings in your working directory warning: LF will be replaced by CRLF in gradle.properties. The file will have its original line endings in your working directory diff --git a/build.gradle b/build.gradle index bb8758e..6cffd74 100644 --- a/build.gradle +++ b/build.gradle @@ -82,6 +82,9 @@ repositories { } mavenContent { releasesOnly() } } + maven { + url "https://jitpack.io" + } } @@ -273,11 +276,15 @@ dependencies { implementation "org.apereo.cas:cas-server-support-json-service-registry" implementation "org.apereo.cas:cas-server-support-redis-ticket-registry" implementation "org.apereo.cas:cas-server-support-spnego-webflow" + implementation files("${projectDir}/lib/jcifs-ext.jar") implementation "org.apereo.cas:cas-server-support-trusted-mfa-mongo" implementation "org.apereo.cas:cas-server-support-throttle" implementation "org.apereo.cas:cas-server-support-reports" implementation "org.apereo.cas:cas-server-support-interrupt-webflow" implementation "org.apereo.cas:cas-server-support-oidc" + implementation "com.github.vbonamy:cas-server-support-agimus-cookie:cas-6.4.x-SNAPSHOT" + implementation "com.github.vbonamy:cas-server-support-agimus-logs:cas-6.4.x-SNAPSHOT" + implementation "com.github.EsupPortail:esup-otp-cas:6.6.x-SNAPSHOT" if (project.hasProperty("casModules")) { diff --git a/gradle.properties b/gradle.properties index e33296a..d875561 100644 --- a/gradle.properties +++ b/gradle.properties @@ -29,7 +29,7 @@ dockerImagePlatform=amd64:linux # Include launch script for executable WAR artifact # Setting this to true allows the final web application # to be fully executable on its own -executable=true +executable=false @@ -37,7 +37,7 @@ executable=true # if the overlay application supports or provides the chosen type. # You should set this to blank if you want to deploy to an external container. # and want to set up, download and manage the container (i.e. Apache Tomcat) yourself. -appServer=-tomcat +appServer= # Settings to generate keystore # used by the build to assist with creating cas@cas:/opt/overlay$ git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: build.gradle modified: gradle.properties Untracked files: (use "git add <file>..." to include in what will be committed) lib/ src/main/resources/static/ src/main/resources/templates/ no changes added to commit (use "git add" and/or "git commit -a") cas@cas:/opt/overlay$ tree src/main/resources/static/ src/main/resources/templates/ lib/ src/main/resources/static/ ??? images ??? cas-logo.png ??? logo_universite_rouen.svg src/main/resources/templates/ ??? fragments ? ??? footer.html ? ??? pmlinks.html ??? layout.html lib/ ??? jcifs-ext.jar 2 directories, 6 files
Puis on commit.
Packaging
Depuis /opt/overlay on lance le packaging via gradle :
./gradlew clean build
Configuration du tomcat
On a choisi ici l'utilisation du tomcat9 founi par debian, on modifie /var/lib/tomcat9/conf/server.xml pour ne pas loguer les accès (qui seront logués par le apache en frontal), désactiver le connecteur http et activer le connecteur ajp.
Déploiement
rm -rf /var/lib/tomcat9/webapps/ROOT && unzip /opt/overlay/build/libs/cas.war -d /var/lib/tomcat9/webapps/ROOT
Configuration du démarrage et démarrage
systemctl enable tomcat9 systemctl restart tomcat9
Installation des autres composants
On installe etconfigure également les autres paquets/briques nécessaires au bon fonctionnnement de notre CAS à savoir :
- apache avec ajp, ssl, ...
- certbot pour automatiser le renouvellement des certificats
- les briques requise's par les modules CAS utilisés : mogodb, redis, etc.
- les briques esup-otp et dépendances associées que l'on installe sur le même serveur
Ajustement des configurations CAS 6.4.6.3 → 6.6.9
A chaque mise à jour de CAS, son lot de renommage de configurations ... liste non exhaustive pour CAS dans /etc/cas/config/cas.properties :
- cas.audit.* → cas.audit.engine.*
- suppression de cas.authn.attributeRepository.ldap[0].useSsl et cas.authn.attributeRepository.ldap[0].providerClass
- cas.authn.attributerepository.maximum-cache-size → cas.authn.attributerepository.core.maximum-cache-size
- cas.authn.mfa.trusted.authentication-context-attribute → cas.authn.mfa.trusted.core.authentication-context-attribute
- cas.authn.mfa.trusted.device-registration-enabled → cas.authn.mfa.trusted.core.device-registration-enabled
- cas.authn.mfa.trusted.expiration=7 et cas.authn.mfa.trusted.timeUnit=DAY → ???
Les fichiers des déclarations de services dans /etc/cas/services doivent aussi être modifiés :
find /etc/cas/services/ -name "*json" -exec sed -i 's/org.apereo.cas.services.RegexRegisteredService/org.apereo.cas.services.CasRegisteredService/' {} \;
Pour esup-otp, dans /etc/cas/config/esupotp.properties, suppression de esupotp.byPassServicesIfNoEsupOtpMethodIsActive
Configuration OpenIdConnect
Ajout de la configuration suivante dans /etc/cas/config/cas.properties :
############################## ## OPENID CONNECT ## ############################## cas.authn.oidc.core.issuer=https://cas.univ-rouen.fr/oidc
Pour que cela fonctionne, CAS doit pouvoir écrire le fichier /etc/cas/config/keystore.jwks au travers de tomcat lors du lancement.
Sous debian, il faut modifier /etc/systemd/system/multi-user.target.wants/tomcat9.service pour y insérer le paramétrage suivant :
ReadWritePaths=/etc/cas/config/keystore.jwks
On créé le fichier /etc/cas/config/keystore.jwks et on lui donne comme propriétaire l'utilisateur tomcat.
Lors du lancement, on prend en compte les messages du type "The generated key MUST be added to CAS settings" pour compléter la configuration openid.