86
Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications Licence professionnelle Métiers des Réseaux Informatiques et Télécommunications Spécialité Administration des Réseaux Multimédia Présenté par : Baptiste MOINE Promotion 2016-2017 Apprenti au Centre Hospitalier Henri LABORIT Sujet du rapport : Projet CAS – Installation de CAS Server v5 Sauf mention contraire, ce rapport est mis à disposition selon les termes de la licence https://creativecommons.org/licenses/by-nc-sa/4.0/ RAPPORT D’INSTALLATION

Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Université de Poitiers

Institut Universitaire de Technologie de Châtellerault

Département Réseaux et Télécommunications

Licence professionnelle Métiers des Réseaux Informatiques et Télécommunications

Spécialité Administration des Réseaux Multimédia

Présenté par :

Baptiste MOINE

Promotion 2016-2017

Apprenti au Centre Hospitalier Henri LABORIT

Sujet du rapport :

Projet CAS – Installation de CAS Server v5

Sauf mention contraire, ce rapport est mis à disposition selon les termes de la licencehttps://creativecommons.org/licenses/by-nc-sa/4.0/

RAPPORT D’INSTALLATION

Page 2: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

TABLE DES MATIÈRES

Table des matières.................................................................................................................1Note........................................................................................................................................2Introduction.............................................................................................................................3 Tickets................................................................................................................................3 Échanges HTTP.................................................................................................................4Architecture............................................................................................................................5Préparation du système.........................................................................................................6 Configuration du nom d’hôte..............................................................................................6 Configuration de OpenSSH-Server...................................................................................7Installation des dépendances................................................................................................9 Apache Tomcat (en automatique)......................................................................................9 Apache Tomcat (en manuel)............................................................................................11 JRE (« Java Runtime Environment ») et JDK (« Java Development Kit »).....................19 Apache Maven.................................................................................................................20Installation de CAS...............................................................................................................22 Application et adaptation du modèle Maven....................................................................22 Compilation de CAS.........................................................................................................38Ajout d’un frontal avec Apache HTTP..................................................................................41 Installation........................................................................................................................41 Fichiers de configuration d’Apache HTTP.......................................................................42 Configuration....................................................................................................................44 Tests.................................................................................................................................54Création d’un environnement de test pour l’authentification sans multifacteur...................57 Installation d’Active Directory sous Windows Server 2016.............................................58 Configuration du service DNS..........................................................................................62 Configuration de l’annuaire..............................................................................................63 Génération d’un keytab....................................................................................................66 Installation de Kerberos sur le serveur CAS....................................................................67 Mise à jour du chemin d’authentification de CAS............................................................71 Ajout de miletrie.lan au registre de services....................................................................73 Intégration d’un ordinateur client au domaine miletrie.lan...............................................74 Configuration du navigateur pour autoriser SPNEGO.....................................................74 Déploiement d’une application de test basée sur phpCAS.............................................75 Test de l’authentification Kerberos sur Appli1..................................................................84 Analyse protocolaire.........................................................................................................84

Baptiste MOINE 1 Installation de CAS Server v5

Page 3: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

NOTE

Les informations suivantes ne sont pas nécessairement représentatives d’une installationou configuration optimale et ne s’appliquent que dans un contexte défini, ainsi, il estprimordial de comprendre le fonctionnement de chacune de ces configurations et deprocéder le cas échéant à une adaptation / extension de ces dernières afin d’être cohérentavec l’environnement dans lequel cette installation est faite.

Pour des raisons de confidentialité relatives à l’éthique et au secret professionnel,certaines informations ont potentiellement été extraites / falsifiées.

Baptiste MOINE 2 Installation de CAS Server v5

Page 4: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

INTRODUCTION

CAS (pour « Central Authentication Service ») est, comme l’indique son nom, un serveurd’authentification centralisé basé sur la technologie SSO (« Single Sign-On ») orienté versles applications WEB. Cette solution est mature et a été déployée dans de nombreusesuniversités américaines.

Tickets

Pour fonctionner, CAS est basé sur différents tickets (ou « cookies ») et s’appuieprincipalement sur le protocole HTTP pour l’échange de ces derniers.

TGC (« Ticket-Granting Cookie ») ou TGT (« Ticket Granting Ticket »)

Le TGC se présente sous la forme d’un cookie de session HTTP, il permet au client (p. ex.,navigateur WEB) d’indiquer à CAS ou à l’application, l’identifiant de session associée ànotre authentification, si le client ne supporte pas l’ajout de cookie, l’authentification seraexigée à chaque appel au serveur CAS. Ce cookie joue un rôle crucial dans le mécanismed’authentification unifiée, c’est pourquoi il peut être sujet à des tentatives de vol (« magiccookie theft ») lors d’une attaque par détournement de session (« Session Hijacking »).

Une attaque par Session Hijacking est souvent issue de l’exploitation d’une vulnérabilitéde type XSS (« Cross-Site Scripting ») permettant à un attaquant de procéder à l’utilisationdétournée d’une API (« Application Programming Interface » ou interface deprogrammation) côté client afin, par exemple, d’exécuter du code JavaScript et déroberune copie du magic cookie. Des attaques telles que le MitM (« Man in the Middle »)permettant l’analyse de paquets ne nous étant pas nécessairement destinés (« sniffing »).

Pour faire face aux attaques de type Session Hijacking, ce cookie est écrit en RAM etexpire à la fermeture du navigateur WEB, utilise le drapeau (« flag ») HTTPOnly pourempêcher l’accès par les API côté client (p. ex., JavaScript) ainsi que le Secure Flagindiquant au navigateur d’utiliser une communication HTTPS pour l’échange de ce cookieavec l’application.

ST (« Service Ticket »)

Le ST est un ticket à usage unique généré par le serveur CAS et permettantl’authentification du client sur une application WEB. Il est échangé entre le client etl’application WEB l’application par l’intermédiaire d’une requête HTTP GET, l’applicationrécupère ensuite l’identifiant associé à ce client en envoyant ce ticket au serveur CAS.

PT (« Proxy Ticket »)

Le PT est un ticket utilisé comme un ST par l’application WEB, mais permetl’authentification de l’utilisateur sur un service auquel il n’a pas d’accès direct.L’authentification est alors déléguée (principe du proxy) au serveur CAS qui est alorscapable de supporter l’utilisation de mécanismes supplémentaires (p. ex., autorisation,attributs).

PGT (« Proxy Granting Ticket »)

Le PGT est envoyé par le serveur CAS au proxy CAS, il permet au serveur proxy dedemander au serveur CAS la génération d’un PT pour l’authentification sur une applicationWEB.

Baptiste MOINE 3 Installation de CAS Server v5

Page 5: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Échanges HTTP

1. La requête initiale du client WEB à l’application nécessitant une authentification estredirigée vers l’URL login du serveur CAS avec une URL de retour (serviceid ou« callback ») en paramètre du GET ;

2. Le serveur CAS procède à l’authentification du client en utilisant le mécanisme locald’authentification puis redirige le client vers l’application d’origine en utilisant leserviceid en utilisant le mécanisme de redirection HTTP, le TGC est alors enregistrépar le client HTTP (s’il est accepté) ;

3. L’application WEB reçoit le ST lors de la redirection du client en paramètre de larequête GET ;

4. L’application établit une communication HTTP directe avec le serveur CAS etenvoie son URL et le ST envoyé par le client. Le serveur CAS valide le ticket et lemarque comme expiré après avoir retourné l’UID (« User IDentificator ») du client.L’authentification de l’utilisateur sur l’application WEB est valide jusqu’à l’expirationdu TGC.

En mode proxy, si le ST est validé, le serveur retourne un identifiant de PGT (PGT-id) encomplément.

Baptiste MOINE 4 Installation de CAS Server v5

Page 6: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

ARCHITECTURE

La majeure partie des implémentations de CAS dispose au minimum :

• D’un client HTTP (p. ex., navigateur WEB) ;

• D’une application WEB (basée sur HTTP) exigeant une authentification,comprenant l’éventuel backend de l’application (p. ex., base de données, cache,etc.) ;

• D’un serveur d’authentification centralisé (CAS) ;

• D’une base de données ou services dédiés à l’authentification (e.g. Kerberos,LDAP, Active Directory).

Baptiste MOINE 5 Installation de CAS Server v5

Page 7: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

PRÉPARATION DU SYSTÈME

Configuration du nom d’hôte

Mise à jour du nom d’hôte associé au système :

# export HOSTNAME=cas

# export DOMAIN=miletrie.lan

# cat <<EOF >/etc/hostname

${HOSTNAME}

EOF

# cat <<EOF >/etc/hosts

# IPv4

127.0.0.1 localhost

127.0.1.1 ${HOSTNAME}.${DOMAIN} ${HOSTNAME}

# IPv6

::1 ip6-localhost ip6-loopback

fe00::0 ip6-localnet

ff00::0 ip6-mcastprefix

ff02::1 ip6-allnodes

ff02::2 ip6-allrouters

EOF

# hostname ${HOSTNAME}

# hostname -b ${HOSTNAME}

# domainname ${HOSTNAME}.${DOMAIN}

# domainname -b ${HOSTNAME}.${DOMAIN}

# hostnamectl set-hostname ${HOSTNAME}

# sysctl kernel.hostname

# systemctl restart networking.service || /etc/init.d/networking restart

Baptiste MOINE 6 Installation de CAS Server v5

Page 8: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Configuration de OpenSSH-Server

Arrêt du service SSH pour préparer sa configuration :

# /etc/init.d/ssh stop || systemctl stop ssh.service

Génération d’un nouveau jeu de clé publique et privée pour le serveur :

# rm /etc/ssh/ssh_host_*key*

# ssh-keygen -N '' -t ed25519 -f /etc/ssh/ssh_host_ed25519_key </dev/null

# ssh-keygen -N '' -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key </dev/null

Génération d’un nouveau jeu de clés EdDSA (Edwards-curve Digital Signature Algorithm)et RSA (Rivest-Shamir-Addleman) pour l’authentification par clé privée (depuis le client) :

# mkdir ~/.ssh/

# cd ~/.ssh/

# ssh-keygen -t ed25519 -f ~/.ssh/[email protected]_ed25519

# ssh-keygen -t rsa -b 4096 -f ~/.ssh/[email protected]_rsa

FACULTATIF : Création d’un jeu de clés EdDSA et RSA résistant aux attaques de typebruteforce, cette étape est recommandée, mais dans la mesure où elle contraint àl’utilisation d’un client SSH supportant le processus cryptographique de dérivation de clé(« key derivation function » ou KDF), il sera nécessaire d’apprécier les enjeux relatifs àl’utilisation d’un tel jeu de clé, notamment en termes de portabilité et rétrocompatibilité :

# ssh-keygen -t ed25519 -o -a 100 -f ~/.ssh/[email protected]_ed25519

# ssh-keygen -t rsa -b 4096 -o -a 100 -f ~/.ssh/[email protected]_rsa

Affichage des clés publiques (depuis le client) :

# cat ~/.ssh/[email protected]_{ed25519,rsa}.pub

Baptiste MOINE 7 Installation de CAS Server v5

Page 9: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Mise à jour des clés publiques pour l’utilisateur « user » (depuis le serveur) :

# mkdir /home/user/.ssh/

# cd /home/user/.ssh/

# cat <<-'EOF' >/home/user/.ssh/authorized_keys

<contenu de [email protected]_ed25519.pub>

<contenu de [email protected]_rsa.pub>

EOF

# chown -R user:user /home/user/.ssh/

# chmod 0500 /home/user/.ssh/

# chmod 0400 /home/user/.ssh/authorized_keys

Redémarrage du service OpenSSH (depuis le serveur) :

# /etc/init.d/ssh start || systemctl start ssh.service

Suppression des clés publiques (depuis le client) :

# chmod -R 0700 ~/.ssh && rm ~/.ssh/[email protected]_{ed25519,rsa}.pub

Configuration de l’authentification client (depuis le client) :

# cat <<EOF >>~/.ssh/config

Host cas

Hostname [email protected]

User user

IdentityFile ~/.ssh/[email protected]_ed25519

IdentityFile ~/.ssh/[email protected]_rsa

EOF

# touch ~/.ssh/known_hosts

# chmod 0500 ~/.ssh

# chmod 0700 ~/.ssh/known_hosts

# chmod 0400 ~/.ssh/[email protected]_ed25519

# chmod 0400 ~/.ssh/[email protected]_rsa

# chmod 0400 ~/.ssh/config

Test et validation de l’authentification par clé publique (depuis le client) :

# ssh cas

Baptiste MOINE 8 Installation de CAS Server v5

Page 10: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

INSTALLATION DES DÉPENDANCES

CAS est un composant Java, c’est-à-dire un ensemble de servlets ou classes Javapermettant la création de données dynamiques au sein d’un service HTTP. Il est donc àdéployer sur un backend d’application WEB Java, également appelé conteneur.

Apache Tomcat (en automatique)

Important : La version 5 de CAS ne semble pas compatible avec la version stabledistribuée par Debian, il est donc conseillé de procéder à une installation manuelled’Apache Tomcat.

Apache Tomcat est un service HTTP à part entière, mais également un conteneur WEBsupportant les servlets et JSP (« JavaServer Pages »), par l’intermédiaire d’unecompilation (via l’outil Jasper) des JSP en servlets.

Apache Tomcat est généralement utilisé en tant que module (ou greffon) à un autreservice HTTP plus généraliste (e.g. Apache HTTP Server, IIS, Nginx). Ainsi, le serviceHTTP traite les requêtes HTTP de façon « classiques » (p. ex. HTML, PHP) et délègue letraitement des requêtes relevant d’une application WEB Java (p. ex. JSP, servlets) àApache Tomcat en utilisant le module mod_jk.

Installation

Recherche de la dernière version stable d’Apache Tomcat :

# apt-cache policy ^tomcat[0-9]+$

La dernière version majeure d’Apache Tomcat, au moment de la recherche, est la version8.

Parmi les différentes versions listées, des suffixes « bpo8 » sont utilisés pour indiquer qu’ils’agit d’une version rétroportée, c’est-à-dire une version du paquet ayant été recompilédepuis la branche testing ou unstable. Les autres versions sont des versions stables etdisposent de mises à jour en fonction de la branche du référentiel de Debian Jessie.

Installation de la dernière version stable d’Apache Tomcat et Apache Tomcat Native :

# apt-get install libtomcat8-java=8.0.14-1+deb8u2 tomcat8=8.0.14-1+deb8u2 tomcat8-common=8.0.14-1+deb8u2 libtcnative-1

Note : Depuis la publication de la CVE-2016-1240 le 30/09/2016, il est conseillé de passeren deb8u3 et supérieur.

Baptiste MOINE 9 Installation de CAS Server v5

Page 11: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Configuration

La configuration d’Apache Tomcat ayant déjà été étudiée par l’équipe du DSIO du CentreHospitalier Henri Laborit, il a été convenu de la réutiliser comme base à d’éventuellesmodifications.

Téléchargement des configurations du CHHL pour Apache Tomcat :

# cd /tmp/

# curl --insecure --silent --location --header "PRIVATE-TOKEN: <TOKEN-AUTH>" --url "https://gitlab/cas/tomcat8-conf/repository/archive.tar.gz?ref=master" >tomcat8-conf.tar.gz

# tar xvzf tomcat8-conf.tar.gz

Analyse des modifications :

# git diff {/etc/tomcat8,tomcat8-conf-master-*}/

Application des configurations :

# tar xvzf tomcat8-conf.tar.gz --directory /etc/tomcat8/

# mv /etc/tomcat8/tomcat8-conf-master-*/{.,}* /etc/tomcat8/

# rmdir /etc/tomcat8/tomcat8-conf-master-*/

# systemctl reload-or-try-restart tomcat8.service

Baptiste MOINE 10 Installation de CAS Server v5

Page 12: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Apache Tomcat (en manuel)

Installation

Téléchargement d’Apache Tomcat depuis les serveurs d’Apache :

# export TOMCAT8_VERSION=8.5.6

# cd /opt/

# wget http://apache.mirrors.ovh.net/ftp.apache.org/dist/tomcat/tomcat-8/v${TOMCAT8_VERSION}/bin/apache-tomcat-${TOMCAT8_VERSION}.tar.gz

# tar xvzf apache-tomcat-${TOMCAT8_VERSION}.tar.gz

# pushd apache-tomcat-${TOMCAT8_VERSION}/

Baptiste MOINE 11 Installation de CAS Server v5

Page 13: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Configuration

Ajout de variables d’environnement contextuelles pour Apache Tomcat :

# cat <<-'EOF' >/etc/default/tomcat8

# Utilisateur et groupe de Tomcat8

export TOMCAT8_USER="tomcat8"

export TOMCAT8_GROUP="tomcat8"

# Version de Tomcat8

export TOMCAT8_VERSION=8.5.6

# Répertoire contenant les fichiers configuration, les applications et les binaires de Tomcat8

export CATALINA_HOME=/opt/apache-tomcat-${TOMCAT8_VERSION}

export CATALINA_BASE=${CATALINA_HOME}

# Fichier contenant le PID de Tomcat8

export CATALINA_PID=/var/run/tomcat8.pid

# Répertoire temporaire pour Tomcat8

export CATALINA_TMPDIR=/tmp/tomcat8-tmp/

EOF

# chmod 644 /etc/default/tomcat8

# cat <<-'EOF' >>~/.bash_profile

source /etc/default/tomcat8

EOF

# source ~/.bash_profile

Baptiste MOINE 12 Installation de CAS Server v5

Page 14: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Création d’un script pour la gestion du service Apache Tomcat :

# cat <<-'EOF' >/etc/init.d/tomcat8

#!/usr/bin/env bash

#

# Written by Baptiste MOINE <[email protected]>

#

### BEGIN INIT INFO

# Provides: tomcat8

# Required-Start: $local_fs $remote_fs $network

# Required-Stop: $local_fs $remote_fs $network

# Should-Start: $named

# Should-Stop: $named

# Default-Start: 2 3 4 5

# Default-Stop: 0 1 6

# Short-Description: Apache Tomcat 8

# Description: Apache Tomcat 8 servlet engine

### END INIT INFO

DEFAULT=/etc/default/tomcat8

## Vérification du contexte d'exécution

if [ `id -u` -ne 0 ]; then

echo "root privileges are required to run this script"

exit 1

fi

## Configurations par défaut

# Utilisateur et groupe de Tomcat8

TOMCAT8_USER="tomcat8"

TOMCAT8_GROUP="tomcat8"

# Version de Tomcat8

TOMCAT8_VERSION=8.5.6

# Répertoire contenant les fichiers configuration, les applications et les binaires de Tomcat8

CATALINA_HOME=/opt/apache-tomcat-${TOMCAT8_VERSION}

CATALINA_BASE=${CATALINA_HOME}

Baptiste MOINE 13 Installation de CAS Server v5

Page 15: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

# Fichier contenant le PID de Tomcat8

CATALINA_PID=/var/run/tomcat8.pid

# Répertoire temporaire pour Tomcat8

CATALINA_TMPDIR=/tmp/tomcat8-tmp/

## Chargement des configurations

if [ -f "${DEFAULT}" ]; then

. "${DEFAULT}"

fi

## Gestion du service Tomcat8

function tomcat-start {

install -o ${TOMCAT8_USER} -g ${TOMCAT8_GROUP} -d ${CATALINA_TMPDIR} &&

start-stop-daemon --start -b -u "${TOMCAT8_USER}" -g "${TOMCAT8_GROUP}" -c "${TOMCAT8_USER}" -d "${CATALINA_TMPDIR}" -m -p "${CATALINA_PID}" -x /bin/bash -- -c "/usr/bin/authbind --deep /bin/bash -c '${CATALINA_HOME}/bin/catalina.sh run'"

}

function tomcat-stop {

[ -f ${CATALINA_PID} -a -s ${CATALINA_PID} ] && [ -e /proc/$(cat ${CATALINA_PID}) ] && start-stop-daemon --stop -u "${TOMCAT8_USER}" -g "${TOMCAT8_GROUP}" -c "${TOMCAT8_USER}" -d "${CATALINA_TMPDIR}" -p "${CATALINA_PID}" &&

install -o ${TOMCAT8_USER} -g adm -m 644 /dev/null ${CATALINA_PID} &&

rm -rf ${CATALINA_TMPDIR}

}

function tomcat-restart {

tomcat-stop

tomcat-start

}

function tomcat-status {

[ -f ${CATALINA_PID} -a -s ${CATALINA_PID} ] && [ -e /proc/$(cat ${CATALINA_PID}) ] && printf "Running\n$(ps -p $(cat ${CATALINA_PID}))\n" || printf "Stopped\n"

}

Baptiste MOINE 14 Installation de CAS Server v5

Page 16: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

## Annonce les arguments d'entrée utilisables

function usage {

printf "Usage: ${0} {start|stop|restart|status}\n"

}

## Gestion des arguments d'entrée

case "${1}" in

start)

tomcat-start

;;

stop)

tomcat-stop

;;

restart)

tomcat-restart

;;

status)

tomcat-status

;;

*)

usage

;;

esac

exit 0

EOF

# chmod 755 /etc/init.d/tomcat8

Activation du service et création des liens symboliques dans les runlevels associés :

# update-rc.d tomcat8 defaults

# update-rc.d tomcat8 enable

Baptiste MOINE 15 Installation de CAS Server v5

Page 17: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Création du service dans systemd :

# cat <<-'EOF' >/lib/systemd/system/tomcat8.service

[Unit]

Description=Apache Tomcat 8

After=network.target

[Service]

Type=forking

RemainAfterExit=no

ExecStart=/etc/init.d/tomcat8 start

ExecStop=/etc/init.d/tomcat8 stop

[Install]

WantedBy=multi-user.target

EOF

# chmod 644 /lib/systemd/system/tomcat8.service

# systemctl daemon-reload

Baptiste MOINE 16 Installation de CAS Server v5

Page 18: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Création de l’utilisateur tomcat8 et de son groupe :

# groupadd --system "${TOMCAT8_GROUP}"

# useradd --system --home-dir ${CATALINA_HOME} --no-create-home --gid "${TOMCAT8_GROUP}" --shell /bin/false "${TOMCAT8_USER}"

Création du répertoire de journalisation et de cache pour Apache Tomcat :

# install -m 750 -o ${TOMCAT8_USER} -g adm -d /var/{cache,log}/${TOMCAT8_USER}/

Activation du cache dans la configuration d’Apache Tomcat :

# sed -i 's#\(</Context>\)#\n <!-- Allow caching -->\n <Resources cachingAllowed="true" cacheMaxSize="100000" />\n\1#' ./conf/context.xml

Création d’une nouvelle arborescence pour contenir les fichiers de configuration d’ApacheTomcat :

# install -m 755 -o root -g root -d /etc/tomcat8/

# install -m 770 -o root -g ${TOMCAT8_GROUP} -d /etc/tomcat8/Catalina/{,localhost/}

Copie de la configuration de Tomcat dans la nouvelle arborescence :

# install -m 640 -o root -g ${TOMCAT8_GROUP} ./conf/* /etc/tomcat8/

Déplacement des configurations et des fichiers temporaires :

# rm -rf ${CATALINA_HOME}/{conf,temp,logs,work}

# ln -s /etc/tomcat8/ ${CATALINA_HOME}/conf

# ln -s ${CATALINA_TMPDIR} ${CATALINA_HOME}/temp

# ln -s /var/log/${TOMCAT8_USER}/ ${CATALINA_HOME}/logs

# ln -s /var/cache/${TOMCAT8_USER}/ ${CATALINA_HOME}/work

Définition du propriétaire de l’arborescence d’Apache Tomcat à l’utilisateur tomcat8 :

# chown -Rh ${TOMCAT8_USER}:${TOMCAT8_GROUP} ${CATALINA_HOME}

Baptiste MOINE 17 Installation de CAS Server v5

Page 19: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Démarrage d’Apache Tomcat en mode daemon :

# install -o ${TOMCAT8_USER} -g adm -m 644 /dev/null ${CATALINA_PID}

# rm -rf ${CATALINA_TMPDIR}

# install -o ${TOMCAT8_USER} -g ${TOMCAT8_GROUP} -d ${CATALINA_TMPDIR}

# systemctl start tomcat8.service

Vérification et validation du fonctionnement d’Apache Tomcat :

# systemctl status tomcat8.service

# curl --silent --include --location --header "User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0" --url "http://cas:8080/" | head -n1

HTTP/1.1 200

Baptiste MOINE 18 Installation de CAS Server v5

Page 20: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

JRE (« Java Runtime Environment ») et JDK (« Java DevelopmentKit »)

Installation

Recherche de la dernière version stable de Java :

# apt-cache policy ^openjdk-[0-9]+

La dernière version majeure de Java, au moment de la recherche, est la version 1.7,cependant pour des raisons de performance et de compatibilité avec CAS v5, l’installationde la version rétroportée du Java en version 1.8 est recommandée.

Installation de la dernière version de Java :

# apt-get install openjdk-8-jre=8u102-b14.1-1~bpo8+1 openjdk-8-jdk=8u102-b14.1-1~bpo8+1

Vérification de l’installation de Java 1.8 :

# java -version

Si la version retournée est inférieure à la version 1.8, il faut désinstaller les anciennesversions déjà installées, par exemple :

# apt-get remove openjdk-7-jre openjdk-7-jre-headless openjdk-7-jdk openjdk-7-jdk-headless

Nouvelle vérification de l’installation de Java 1.8 :

# java -version

Configuration du proxy

# cat <<-'EOF' >>~/.bash_profile

JAVA_FLAGS="-Dhttp.proxyHost=172.18.4.1 -Dhttp.proxyPort=8080"

export JAVA_FLAGS

EOF

# source ~/.bash_profile

Baptiste MOINE 19 Installation de CAS Server v5

Page 21: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Apache Maven

Apache Maven est un moteur de production Java. Comparable à GNU Make, il fournit uneaide à la compilation par la création de fichier de description détaillée (au format XML)comprenant notamment le processus de compilation, de résolution des dépendances avecdes modules externes, la gestion du versioning, les tests, etc. Ce fichier de description estappelé POM (pour « Project Object Model »).

Installation

Deux versions sont développées en parallèle, la version 2 et 3, cependant les prochainesreleases devraient se baser sur la version 3, il est donc préférable d’installer cette version,de plus ne s’agissant pas d’un service réseau, l’installation d’une version rétroportée enversion 3 ne devrait poser aucun problème si les dépendances sont installables.

Installation de la dernière version de Maven 3.3.9 :

# wget http://apache.mirrors.ovh.net/ftp.apache.org/dist/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz

# tar xvzf apache-maven-3.3.9-bin.tar.gz --directory /opt/

# cd apache-maven-3.3.9/

Définition du JAVA_HOME (facultatif) et ajout de Maven au PATH :

# cat <<-'EOF' >>/etc/default/tomcat8

# Répertoire d’accès à Java

JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

EOF

# cat <<-'EOF' >>~/.bash_profile

export PATH=/opt/apache-maven-3.3.9/bin:$PATH

EOF

# source ~/.bash_profile

Vérification et validation de l’installation de Maven 3 :

# mvn -v

Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T17:41:47+01:00)

Maven home: /opt/apache-maven-3.3.9

Java version: 1.8.0_102, vendor: Oracle Corporation

Java home: /usr/lib/jvm/java-8-openjdk-amd64/jre

Default locale: fr_FR, platform encoding: UTF-8

OS name: "linux", version: "3.16.0-4-amd64", arch: "amd64", family: "unix"

Baptiste MOINE 20 Installation de CAS Server v5

Page 22: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Configuration du proxy

Sauvegarde des fichiers de configurations globaux et création d’une configurationpersonnalisée pour l’utilisateur :

# cp /opt/apache-maven-3.3.9/conf/settings.xml{,.bak}

# cp /opt/apache-maven-3.3.9/conf/settings.xml ~/.m2/settings.xml

Duplication du bloc de balise « proxy » à l’intérieur du bloc « proxies » :

# sed -i -e ':a;N;$!ba;s/\(<proxies>\)\(.*\)\(<\/proxies>\)/\1\2\2\3/;' ~/.m2/settings.xml

Application ou suppression de paramètres en fonction du protocole de connexion (p. ex.,HTTP, HTTPS) :

# sed -i -e '/<proxies>/,/<\/proxies>/{

/\s\{4\}-->/d; # Suppression de la fermeture du bloc de commentaire

s/\(\s\{4\}|$\)/\1-->/; # Fermeture du bloc de commentaire

s/\(<active>\).*\(<\/active>\)/\1true\2/; # Le proxy est actif

/<username>.*<\/username>/d; # Pas de nom d’utilisateur (exploitation de la plage IP), suppression de la propriété

/<password>.*<\/password>/d; # Pas de mot de passe (exploitation de la plage IP), suppression de la propriété

s/\(<host>\).*\(<\/host>\)/\1172.18.4.1\2/; # Hôte du service proxy

s/\(<port>\).*\(<\/port>\)/\18080\2/; # Port d’écoute du service proxy

s/\(<nonProxyHosts>\).*\(<\/nonProxyHosts>\)/\1*.miletrie.chl|dev|dev.ch-poitiers.fr\2/; # Liste blanche du proxy

0~2s/\(<id>\).*\(<\/id>\)/\1webcache_http\2/; # Identifiant du proxy HTTP

0~2s/\(<protocol>\).*\(<\/protocol>\)/\1http\2/; # Protocole du proxy HTTP

1~2s/\(<id>\).*\(<\/id>\)/\1webcache_https\2/; # Identifiant du proxy HTTPS

1~2s/\(<protocol>\).*\(<\/protocol>\)/\1https\2/; # Protocole du proxy HTTPS

}' ~/.m2/settings.xml

Baptiste MOINE 21 Installation de CAS Server v5

Page 23: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

INSTALLATION DE CAS

CAS étant développé en Java, son déploiement au sein du conteneur de servlets Catalinanécessite la création d’une archive WEB spécifique à cette application (on parle d’archiveWAR).

Afin de créer cette archive, la communauté de développeur autour du projet CAS, met àdisposition des modèles (templates) d’abstraction (overlay), tels que Apache Maven,permettant la compilation et la création de l’archive WAR du projet. S’agissant de modèles,il sera nécessaire de procéder à leur adaptation pour l’appliquer à notre contexte.

Application et adaptation du modèle Maven

Téléchargement de l’overlay Maven pour CAS :

# cd /opt/

# git clone https://github.com/apereo/cas-overlay-template.git cas-server-5

# pushd cas-server-5/

Baptiste MOINE 22 Installation de CAS Server v5

Page 24: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Création d’un fork

Créer un fork d’un référentiel (Git, SVN ou Mercurial) consiste à faire une copie de ceréférentiel (c.-à-d. clone), en conservant un lien vers le référentiel d’origine (remote origin)appelé upstream dans le cadre d’un fork, mais en appliquant les mises à jour sur unsecond référentiel qui nous est propre appelé origin.

Création d’un référentiel Git, ici une instance GitLab interne au CHL sera utilisée, mais ilest possible d’utiliser n’importe quel gestionnaire de référentiel Git (e.g. GitLab, AtlassianBitBucket, IBM BlueMix DevOps Services, GitHub).

Modification des dépôts sur le clone local :

# git remote rename origin upstream

# git remote add origin https://[email protected]/MB082668/cas-server-5.git

Vérification des dépôts :

# git remote -v

Baptiste MOINE 23 Installation de CAS Server v5

Illustration 1: Fork d’un référentiel Git

Page 25: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Configuration globale de Git :

# cat <<-'EOF' >~/.gitconfig

[user]

name = Baptiste MOINE

email = [email protected]

#[http]

# proxy = http://172.18.4.1:8080

EOF

Suppression des fichiers inutilisés (binaires d’Apache Maven et le README qui necorrespond pas à notre projet) :

# rm -rf README.md mvnw.bat mvnw maven/

Création d’un nouveau commit et envoi des modifications sur le dépôt fork :

# git add README.md mvnw.bat mvnw maven/

# git commit --message "Suppression des fichiers inutilisés"

# git push --set-upstream origin master

Baptiste MOINE 24 Installation de CAS Server v5

Page 26: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

pom.xml

Tel qu’expliqué dans la section dédiée à l’installation de Apache Maven, ce moteur deproduction est comparable à GNU Make et se base sur un fichier de description (au formatXML) appelé POM (pour « Project Object Model ») et permettant de fournir une descriptionavancée du projet et des phases de mise en service comprenant notamment le processusde compilation, de résolution des dépendances avec des modules externes, la gestion duversioning, les tests, etc.

Ce fichier respecte généralement la structure suivante :

• Description du projet Apache Maven POM en donnant son espace de nom(XMLNS), l’accès à son schéma (XSD) et son instance (XSI) XML :

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd ">

• Description des métadonnées du projet (p. ex., nom, version, identifiant de groupeet d’artefact) :

<!-- Meta-données du projet -->

<modelVersion>4.0.0</modelVersion>

<groupId>fr.chpoitiers</groupId>

<artifactId>cas-server-5</artifactId>

<packaging>war</packaging>

<version>0.0.1-SNAPSHOT</version>

<name>Serveur cas personnalisé pour le CHL</name>

Baptiste MOINE 25 Installation de CAS Server v5

Page 27: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

• Description des propriétés du projet : Il s’agit simplement de données variablesexploitables dans n’importe quelles autre section du fichier de description. Pourexemple, en voici un extrait :

<properties>

<!-- Compilateur Java -->

<maven.compiler.plugin.groupId>

org.apache.maven.plugins

</maven.compiler.plugin.groupId>

<maven.compiler.plugin.version>3.5.1</maven.compiler.plugin.version>

<maven.wrapper.plugin.groupId>

com.rimerosolutions.maven.plugins

</maven.wrapper.plugin.groupId>

<maven.wrapper.plugin.version>0.1.5</maven.wrapper.plugin.version>

</properties>

Baptiste MOINE 26 Installation de CAS Server v5

Page 28: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

• Déclaration des modules nécessaires à la phase de construction (build) du projet.Pour exemple, en voici un extrait :

<build>

<plugins>

<!-- Compilateur Java -->

<plugin>

<groupId>${maven.compiler.plugin.groupId}</groupId>

<artifactId>maven-compiler-plugin</artifactId>

<version>${maven.compiler.plugin.version}</version>

<configuration>

<source>${java.source.version}</source>

<target>${java.target.version}</target>

</configuration>

</plugin>

<plugin>

<groupId>${maven.wrapper.plugin.groupId}</groupId>

<artifactId>wrapper-maven-plugin</artifactId>

<version>${maven.wrapper.plugin.version}</version>

</plugin>

</plugins>

<finalName>cas</finalName>

</build>

• Description des dépendances (p. ex., version, phase concernée, identifiant degroupe et d’artefact) :

<dependencies>

<!-- Registre des services au format JSON -->

<dependency>

<groupId>${cas.groupId}</groupId>

<artifactId>cas-server-support-json-service-registry</artifactId>

<version>${cas.version}</version>

<scope>runtime</scope>

</dependency>

</dependencies>

Baptiste MOINE 27 Installation de CAS Server v5

Page 29: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

• Description des dépôts fournissant les modules et dépendances nécessaires :

<!-- Dépôts -->

<repositories>

<repository>

<id>sonatype-releases</id>

<url>https://oss.sonatype.org/content/repositories/releases/</url>

<snapshots>

<enabled>false</enabled>

</snapshots>

<releases>

<enabled>true</enabled>

</releases>

</repository>

</repositories>

Une fois l’ensemble des sections de configuration du projet complétées, on en profite pourcréer un nouveau commit et pousser les modifications sur le dépôt fork :

# git add pom.xml

# git commit --message "Mise à jour du fichier pom.xml"

# git push --set-upstream origin master

Baptiste MOINE 28 Installation de CAS Server v5

Page 30: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Fichiers de configuration

En complément du modèle Maven, Apereo fournit dans ce modèle d’abstraction, uneconfiguration de base pour CAS et le moteur de journalisation. Comme expliqué dans lasection « configuration » du README (voir README.md#configuration), lesconfigurations fournies dans le répertoire etc, sont à placer, par défaut, dans lerépertoire /etc/cas.

Jetty

Le module Jetty est utilisé pour un déploiement rapide des applications WEB, il estcapable d’analyser périodiquement le projet afin de rechercher des mises à jour etprocéder à leur déploiement. Ceci étant principalement conçu par les développeursopérationnels (DevOps), nous pouvons nous passer de ce module :

# rm -rf ./etc/jetty

De plus, avant de soumettre les modifications au référentiel, il peut être intéressant depouvoir distinguer les fichiers de configuration produits par le CHL, des fichiers deconfiguration par défaut. Pour cela, les fichiers de configurations seront placés dans lerépertoire /etc/chl/cas5/ :

# mkdir -p ./etc/chl/cas5/

# mv ./etc/!(chl) -t ./etc/chl/cas5/

Création d’un nouveau commit et envoi des modifications sur le dépôt fork :

# git add ./etc

# git commit --message "Déplacement des fichiers de configuration et suppression de Jetty"

# git push --set-upstream origin master

Baptiste MOINE 29 Installation de CAS Server v5

Page 31: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

log4j

CAS fournit un service de journalisation appelé log4j qui enregistre l’ensemble desinformations relatives aux événements importants tels qu’une authentification réussie ouéchouée. Ce moteur de journalisation est personnalisable afin d’enregistrer desinformations supplémentaires.

Le fichier de configuration associé au service de journalisation est par défaut le fichier/etc/log4j2.xml et respecte généralement la structure suivante :

• Définition de la structure XML et de ses propriétés :

<?xml version="1.0" encoding="UTF-8" ?>

• Description des propriétés du service de journalisation (voir Configuration de log4jet Configuration de l’intervalle de rafraîchissement), par exemple, on utilisera lemoteur de journalisation de CAS afin un intervalle de rafraîchissement desévénements toutes les 10 secondes :

<Configuration monitorInterval="10" packages="org.apereo.cas.logging">

...

</Configuration>

Baptiste MOINE 30 Installation de CAS Server v5

Page 32: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

• Description des flux de sortie (appenders) (p. ex., console, fichier, formatd’affichage, taille maximale, politique d’écrasement), par exemple, pour pouvoirenregistrer des événements dans un fichier cas.log ou les afficher directement enconsole (stdout) (voir Configuration des flux de sortie et Configuration de log4j avecsyslog) :

<Appenders>

<!-- Console -->

<Console name="console" target="SYSTEM_OUT">

<PatternLayout pattern="%d %p [%c] - &lt;%m&gt;%n"/>

</Console>

<!-- Fichier ne dépassant pas 10MB -->

<RollingFile name="file" fileName="${sys:catalina.base}/logs/cas.log" append="true" filePattern="${sys:catalina.base}/logs/cas-%d{yyyy-MM-dd-HH}-%i.log">

<PatternLayout pattern="%d %p [%c] - %m%n"/>

<Policies>

<OnStartupTriggeringPolicy />

<SizeBasedTriggeringPolicy size="10 MB"/>

<TimeBasedTriggeringPolicy />

</Policies>

</RollingFile>

<!-- Alias des flux de sortie pour CAS -->

<CasAppender name="casFile">

<AppenderRef ref="file" />

</CasAppender>

<CasAppender name="casConsole">

<AppenderRef ref="console" />

</CasAppender>

</Appenders>

Baptiste MOINE 31 Installation de CAS Server v5

Page 33: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

• Description des flux d’entrée (synchronicité du flux, module associé, niveau degravité, l’additivité des flux, le flux de sortie associé) (voir Configuration des fluxd’entrée), par exemple :

<Loggers>

<!-- Conteneur de servlets, Catalina en mode asynchrone -->

<AsyncLogger name="org.apache.catalina" level="debug" additivity="false">

<AppenderRef ref="casConsole"/>

<AppenderRef ref="casFile"/>

</AsyncLogger>

<!-- Service de journalisation en mode asynchrone -->

<AsyncRoot level="info">

<AppenderRef ref="casConsole"/>

</AsyncRoot>

<Loggers>

Une fois l’ensemble des sections de configuration du projet complétées, il sera nécessairede faire une copie de ce fichier dans les ressources de l’application afin de permettre àApache Tomcat de journaliser les événements avant le chargement de Spring :

# cp ./{etc/chl/cas5,src/main/resources}/log4j2.xml

Création d’un nouveau commit et envoi des modifications sur le dépôt fork :

# git add ./{etc/chl/cas5,src/main/resources}/log4j2.xml

# git commit --message "Mise à jour du fichier log4j2.xml"

# git push --set-upstream origin master

Baptiste MOINE 32 Installation de CAS Server v5

Page 34: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

CAS

Afin de configurer CAS, le modèle d’abstraction fournit un fichier de configurationcas.properties de type Property Resource Bundles (PRB) au format « dead.beef =foobar » (voir Properties files).

Tel qu’expliqué dans la documentation de CAS en section « Configuration Properties », cemodèle est conçu comme un guide et ne doit en aucun cas être suivi aveuglément, il estau contraire préférable d’être sélectif sur le choix des propriétés saisies dans ce fichier deconfiguration.

À titre d’exemple, en voici un extrait (la description du fichier complet serait trop longuepour figurer dans ce rapport) :

# Nom complet du serveur

cas.server.name=http://cas.miletrie.lan:8080

# Chemin complet d'accès à CAS

cas.server.prefix=${cas.server.name}/cas

# Répertoire contenant le registre des services (fichiers de description au format JSON)

cas.serviceRegistry.config.location=file:///etc/chl/cas5/services

# Chemin d'accès à la configuration de log4j

logging.config=file:/etc/chl/cas5/log4j2.xml

Une fois la configuration de CAS effectuée, on en profite pour déplacer ce fichier dans unrépertoire plus approprié :

# mkdir ./etc/chl/cas5/config

# mv ./etc/chl/cas5/{,config/}cas.properties

Il ne reste plus qu’à créer un nouveau commit et pousser les modifications sur le dépôtfork :

# git add ./etc/chl/cas5/{,config/}cas.properties

# git commit --message "Déplacement et mise à jour du fichier cas.properties"

# git push --set-upstream origin master

Baptiste MOINE 33 Installation de CAS Server v5

Page 35: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Registre de service

Le registre de service définit l’ensemble des services sur lesquels CAS pourra nousauthentifier.

Tels qu’expliqué dans la documentation de CAS (voir JSON Service Management), lesservices sont définis sous la forme de fichiers, exploitant un formatage basé sur du JSON,dans le répertoire /etc/chl/cas5/services.

Ces fichiers doivent respecter la convention de nommage suivante :

<nom de service>-<id de service>.json

Par exemple :

# mkdir ./etc/chl/cas5/services

# cat <<-'EOF' >./etc/chl/cas5/services/miletrie-1000.json

{

/*

Tous les services HTTP/HTTPS du domaine miletrie.chl

*/

"@class" : "org.apereo.cas.services.RegexRegisteredService"

"serviceId" : ^https?://.*\.miletrie\.chl/.*

"name" : "miletrie"

"id" : 1000

}

EOF

# cat <<-'EOF' >./etc/chl/cas5/services/ch-poitiers-1001.json

{

/*

Tous les services HTTP/HTTPS du domaine ch-poitiers.fr

*/

"@class" : "org.apereo.cas.services.RegexRegisteredService"

"serviceId" : ^https?://(.*\.)?ch-poitiers\.fr/.*

"name" : "ch-poitiers"

"id" : 1001

}

EOF

Baptiste MOINE 34 Installation de CAS Server v5

Page 36: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Création d’un nouveau commit et envoi des modifications sur le dépôt fork :

# git add ./etc/chl/cas5/services/{miletrie-1000,ch-poitiers-1001}.json

# git commit --message "Ajout des services de miletrie.chl et ch-poitiers.fr"

# git push --set-upstream origin master

Baptiste MOINE 35 Installation de CAS Server v5

Page 37: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Bootstrap

Tel qu’expliqué dans la documentation de CAS en section « Configuration Storage », afinde charger l’ensemble des fichiers de configurations, CAS doit procéder à la lecture d’unfichier de configuration décrivant les propriétés contextuelles relatives à l’amorçage duprojet, on appelle ce type de fichier un fichier Bootstrap.

Ce fichier, de type Property Resource Bundles (PRB), n’est pas fourni dans le modèled’abstraction et doit être créé manuellement.

Dans notre cas, la configuration minimale requise pour l’amorçage de CAS est ladescription du chemin d’accès aux fichiers de configuration du service CAS :

# mkdir ./src/main/resources/

# cat <<-'EOF' >./src/main/resources/bootstrap.properties

##

# Configuration de Spring Cloud Bus

#

# Nom de l'application

spring.application.name=cas

# L'échec de connexion au serveur est fatale

spring.cloud.config.fail-fast=true

# Chargement des fichiers de configuration en local

spring.profiles.active=native

spring.cloud.config.server.bootstrap=true

spring.cloud.config.server.prefix=/configserver

# Fichier de configuration local

spring.cloud.config.server.native.searchLocations=file:/etc/chl/cas5/config

EOF

Création d’un nouveau commit et envoi des modifications sur le dépôt fork :

# git add ./src/main/resources/bootstrap.properties

# git commit --message "Création du fichier bootstrap.properties"

# git push --set-upstream origin master

Baptiste MOINE 36 Installation de CAS Server v5

Page 38: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

propertyFileConfigurer.xml

Modification du chemin d’accès au fichier de configuration cas.properties :

# sed -i 's#\(^\s*<util:properties id="casProperties" location="\)[^"]*\(" \/>$\)#\1file:/etc/chl/cas5/config/cas.properties\2#' ./src/main/webapp/WEB-INF/spring-configuration/propertyFileConfigurer.xml

Création d’un nouveau commit et envoi des modifications sur le dépôt fork :

# git add ./src/main/webapp/WEB-INF/spring-configuration/propertyFileConfigurer.xml

# git commit --message "Mise à jour du chemin d'accès à la configuration de CAS"

# git push --set-upstream origin master

Baptiste MOINE 37 Installation de CAS Server v5

Page 39: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Compilation de CAS

La configuration des services et du modèle d’abstraction étant faite, il ne reste plus qu’àlancer la compilation du projet :

# mvn clean package -e

Si la compilation réussie, une archive ZIP avec l’extension « .war » (« WEB ApplicationARchive ») devrait avoir été créée dans le répertoire « target » du projet :

[INFO] Building war: /opt/cas-server-5/target/cas.war

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

Ajout de l’archive dans Apache Tomcat :

# cp /opt/cas-server-5/target/cas.war ${CATALINA_HOME}/webapps/cas.war

Copie des fichiers de configuration de CAS :

# install -m 755 -o root -g root -d /etc/chl/

# install -m 750 -o ${TOMCAT8_USER} -g ${TOMCAT8_GROUP} -d /etc/chl/cas5/

# install -m 640 -o ${TOMCAT8_USER} -g ${TOMCAT8_GROUP} {.,}/etc/chl/cas5/log4j2.xml

# cp -R {.,}/etc/chl/cas5/config/

# cp -R {.,}/etc/chl/cas5/services/

# chmod -R 640 /etc/chl/cas5/{config,services}/

# chown -R ${TOMCAT8_USER}:${TOMCAT8_GROUP} /etc/chl/cas5/{config,services}/

# chmod 750 /etc/chl/cas5/{config,services}/

Baptiste MOINE 38 Installation de CAS Server v5

Page 40: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Redémarrage d’Apache Tomcat pour le déploiement de CAS par Catalina en arrière-planet affichage du journal d’événement complet de Catalina et en suivant les modifications dudescripteur de fichier :

# systemctl restart tomcat8.service

# tail -F -n +1 ${CATALINA_HOME}/logs/catalina.$(date +%Y-%m-%d).log

Si des erreurs relatives à l’écriture de journaux d’événements sont remontées, procéder àla mise à jour des droits sur le répertoire contenant ces fichiers et redémarrer à nouveau leservice Apache Tomcat :

# rm -rf ${CATALINA_HOME}/logs /var/log/${TOMCAT8_USER}/

# install -m 750 -o ${TOMCAT8_USER} -g adm -d /var/log/${TOMCAT8_USER}/

# ln -s /var/log/${TOMCAT8_USER}/ ${CATALINA_HOME}/logs

# systemctl restart tomcat8.service

Baptiste MOINE 39 Installation de CAS Server v5

Page 41: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Par la suite et pour la durée du projet uniquement, afin de simplifier les éventuelsdéploiements à répétition de CAS, il est possible de créer une fonction pour ledéploiement rapide de CAS :

# cat <<-'EOF' >>~/.bash_profile

# Déploiement rapide de CAS

function cas-deploy {

rm -rf /etc/chl/cas5/ /opt/cas-server-5/target/ ${CATALINA_HOME}/webapps/cas* ${CATALINA_HOME}/{logs,work} /var/{cache,log}/${TOMCAT8_USER}/;

install -m 750 -o ${TOMCAT8_USER} -g adm -d /var/{cache,log}/${TOMCAT8_USER}/;

ln -s /var/log/${TOMCAT8_USER}/ ${CATALINA_HOME}/logs;

ln -s /var/cache/${TOMCAT8_USER}/ ${CATALINA_HOME}/work;

systemctl restart tomcat8.service &&

pushd /opt/cas-server-5/ &&

mvn clean package -e &&

cp /opt/cas-server-5/target/cas.war ${CATALINA_HOME}/webapps/ &&

install -m 755 -o root -g root -d /etc/chl/ &&

install -m 750 -o ${TOMCAT8_USER} -g ${TOMCAT8_GROUP} -d /etc/chl/cas5/ &&

install -m 640 -o ${TOMCAT8_USER} -g ${TOMCAT8_GROUP} {.,}/etc/chl/cas5/log4j2.xml &&

cp -R {.,}/etc/chl/cas5/config/ &&

cp -R {.,}/etc/chl/cas5/services/ &&

chmod -R 640 /etc/chl/cas5/{config,services}/ &&

chown -R ${TOMCAT8_USER}:${TOMCAT8_GROUP} /etc/chl/cas5/{config,services}/ &&

chmod 750 /etc/chl/cas5/{config,services}/ &&

systemctl restart tomcat8.service &&

popd

}

EOF

Note : Comme décrit dans les premières instructions de la fonction, la suppression desjournaux et des caches est faite afin de ne pas encombrer le support de stockage dû àune conservation superflue des journaux d’événements de CAS pendant la réalisationdu PoC.

Baptiste MOINE 40 Installation de CAS Server v5

Page 42: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

AJOUT D’UN FRONTAL AVEC APACHE HTTP

Afin d’agir comme un pare-feu, l’ajout d’un service Apache en frontal permettra nonseulement de traiter l’ensemble des requêtes adressées (ou non) à Apache Tomcat, de lesfiltrer, gérer les autorisations, la journalisation des accès, mais surtout, rendre accessiblele service d’authentification sur le port 80/tcp et forcer l’utilisation d’une communicationsécurisée exploitant le protocole HTTPS sur le port 443/tcp au moyen du mécanismeHTTP Strict Transport Security (HSTS).

Installation

Recherche de la dernière version stable d’Apache HTTP :

# apt-cache policy ^apache2+$

La dernière version majeure d’Apache HTTP, au moment de la recherche, est la version2.4.

Parmi les différentes versions listées, des suffixes « bpo8 » sont utilisés pour indiquer qu’ils’agit d’une version rétroportée, c’est-à-dire une version du paquet ayant été recompilédepuis la branche testing ou unstable. Les autres versions sont des versions stables etdisposent de mises à jour en fonction de la branche du référentiel de Debian Jessie.

Installation de la dernière version stable d’Apache HTTP :

# apt-get install apache2=2.4.10-10+deb8u7 libapache2-mod-jk=1:1.2.37-4+deb8u1

Baptiste MOINE 41 Installation de CAS Server v5

Page 43: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Fichiers de configuration d’Apache HTTP

La structure des fichiers de configuration d’Apache HTTP est composée comme suit :

/etc/apache2/

├─── apache2.conf

├─── conf-available/

│ ├─── charset.conf

│ ├─── javascript-common.conf

│ ├─── localized-error-pages.conf

│ ├─── other-vhosts-access-log.conf

│ ├─── security.conf

│ └─── serve-cgi-bin.conf

├─── conf-enabled/

├─── envvars

├─── magic

├─── mods-available/

├─── mods-enabled/

├─── ports.conf

├─── sites-available/

│ ├─── 000-default.conf

│ └─── default-ssl.conf

└─── sites-enabled/

apache2.conf

Il s’agit du fichier principal pour la configuration du service HTTP. La plupart desconfigurations peuvent être faites directement dans ce fichier, mais il est recommandéd’utiliser des fichiers séparés. Ce fichier est le premier à être lu et procède à l’inclusionrécursive des autres fichiers de configuration.

conf-available/

Ce répertoire contient des fichiers spécifiques à différents aspects de la configurationd’Apache HTTP. Par exemple, on retrouve le fichier security.conf qui permet de définirl’ensemble des paramètres de configurations permettant la sécurisation du service HTTP.

conf-enabled/

Ce répertoire contient les fichiers de configuration activés, c’est-à-dire qu’ils vont êtreinclus dans la configuration effective du service HTTP.

Ces fichiers sont sous la forme de liens symboliques et pointent vers le fichier associédans le répertoire conf-available. Ces liens peuvent être créés manuellement ou enutilisant les commandes a2enconf ou a2disconf.

envvars

Ce fichier est utilisé afin de spécifier les différentes variables contextuellesd’environnement à exporter.

Baptiste MOINE 42 Installation de CAS Server v5

Page 44: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

magic

Ce fichier décrit la configuration du module mod_mime_magic utilisé pour déterminer letype MIME d’un fichier. Tout comme la commande UNIX file, le module se base surl’analyse des premiers octets du fichier pour déterminer le magic number et d’autresinformations permettant de savoir quel est le type de contenu du fichier.

Par exemple :

0 string #!/bin/sh application/x-shellscript

Cette règle indique que :

• À partir du tout premier octet (1 indiquerait que l’on commence à partir dudeuxième) ;

• On recherche une chaîne de caractère ;

• Dont le contenu correspond à « #!/bin/sh » ;

• Si ce type de contenu est trouvé, alors le type MIME correspondant est« application/x-shellscript ».

mods-available/

Ce répertoire contient des fichiers spécifiques à la configuration et le chargement demodules d’Apache HTTP. Par exemple, on retrouve le fichier proxy_ajp.load qui permet dedemander le chargement du module AJP.

mods-enabled/

Ce répertoire contient les fichiers de configuration des modules activés.

Ces fichiers sont sous la forme de liens symboliques et pointent vers le fichier associédans le répertoire mods-available. Ces liens peuvent être créés manuellement ou enutilisant les commandes a2enmod ou a2dismod.

ports.conf

Ce fichier est utilisé afin de spécifier les ports sur lesquels les hôtes virtuels (vhosts) vontécouter.

sites-available/

Ce répertoire contient les fichiers de configuration des hôtes virtuels (vhosts) permettantde décrire les différentes applications WEB.

sites-enabled/

Ce répertoire contient les fichiers de configuration des vhosts activés.

Ces fichiers sont sous la forme de liens symboliques et pointent vers le fichier associédans le répertoire sites-available. Ces liens peuvent être créés manuellement ou enutilisant les commandes a2ensite ou a2dissite.

Baptiste MOINE 43 Installation de CAS Server v5

Page 45: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Configuration

Hardening d’Apache HTTP

Modules

Désactivation du module d’indexation, utilisé pour lister le contenu d’un répertoire :

# a2dismod autoindex

Désactivation du module de statut du service, utilisé pour des besoins statistiques ou demonitoring :

# a2dismod status

Activation du module headers, utilisé pour modifier les en-têtes des requêtes et des réponses HTTP :

# a2enmod headers

Baptiste MOINE 44 Installation de CAS Server v5

Page 46: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

security.conf

Désactivation de l’affichage de la version du service sur les pages d’erreur :

# sed -i 's@\(^ServerTokens\).*@\1 Prod@' /etc/apache2/conf-available/security.conf

Désactivation de l’affichage de la version dans l’en-tête HTTP « Server » :

# sed -i '{s@\(^ServerSignature\)@#\1@;s@^#\(ServerSignature Off\)@\1@}' /etc/apache2/conf-available/security.conf

Désactivation de la méthode HTTP TRACE, utilisée afin de vérifier l’activité du service. Cetype de requête présente un vecteur d’attaque important lors d’attaque de type XSS. Ainsi,une requête HTTP exploitant cette méthode recevra en réponse le code « 405 Method notAllowed » :

# sed -i '{s@\(^TraceEnable\)@#\1@;s@^#\(TraceEnable Off\)@\1@}' /etc/apache2/conf-available/security.conf

Cette méthode retourne le contenu d’une requête envoyée au service HTTP.

Par exemple :

# cat <<-'EOF' | nc cas.miletrie.lan 80

TRACE / HTTP/1.0

Host: cas.miletrie.lan

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3

Connection: keep-alive

Cache-Control: max-age=0

Cookie: PHPSESSID=SESSIONCOOKIESETFROMPHP

EOF

Baptiste MOINE 45 Installation de CAS Server v5

Page 47: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

La réponse du serveur HTTP sera :

HTTP/1.1 200 OK

Date: Tue, 08 Nov 2016 16:16:50 GMT

Server: Apache/2.4.10 (Debian)

Connection: close

Content-Type: message/http

TRACE / HTTP/1.0

Host: cas.miletrie.lan

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3

Connection: keep-alive

Cache-Control: max-age=0

Cookie: PHPSESSID=SESSIONCOOKIESETFROMPHP

Protection contre les attaques par clickjacking en interdisant l’insertion d’une page fourniepar le service HTTP, dans un cadre d’insertion (frame) :

# sed -i 's@#\(Header set X-Frame-Options: "sameorigin"\).*@\1@' /etc/apache2/conf-available/security.conf

Baptiste MOINE 46 Installation de CAS Server v5

Page 48: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Redémarrage d’Apache HTTP et vérification du service :

# systemctl restart apache2.service

# cat <<-'EOF' | nc cas.miletrie.lan 80

TRACE / HTTP/1.0

Host: cas.miletrie.lan

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3

Accept-Encoding: gzip, deflate

Connection: keep-alive

Cache-Control: max-age=0

Cookie: PHPSESSID=SESSIONCOOKIESETFROMPHP

EOF

La réponse du service HTTP est à présent :

HTTP/1.1 405 Method Not Allowed

Date: Tue, 08 Nov 2016 16:18:35 GMT

Server: Apache

Allow:

Content-Length: 223

Keep-Alive: timeout=5, max=100

Connection: Keep-Alive

Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">

<html><head>

<title>405 Method Not Allowed</title>

</head><body>

<h1>Method Not Allowed</h1>

<p>The requested method TRACE is not allowed for the URL /.</p>

</body></html>

Baptiste MOINE 47 Installation de CAS Server v5

Page 49: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Configuration du module JK

# sed -i '{

s@\(workers\.tomcat_home=\).*@\1'${CATALINA_HOME}'@; # Chemin d'accès à Tomcat

s@\(workers\.java_home=\).*@\1'${JAVA_HOME}'@; # Chemin d'accès à Java

s@\(worker\.list=\).*@\1cas@; # Modification du nom de worker en cas

/worker\.list/,/worker\.loadbalancer/{ # Tâches entre la liste des workerset la configuration du load balancer

/worker\.list/b; # Ne remplace pas la première ligne

/worker\.loadbalancer/b; # Ne remplace pas la dernière ligne

s@\(worker\.\)[^\.]*\(.*\)@\1cas\2@ # Remplace le nom du worker

}

s@\(worker\.cas.port=\).*@\18009@; # Port JDC Tomcat

s@\(worker\.cas.host=\).*@\1localhost@;

s@\(worker\.cas.type=\).*@\1ajp13@

}' /etc/libapache2-mod-jk/workers.properties

Baptiste MOINE 48 Installation de CAS Server v5

Page 50: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Création des vhosts pour Apache Tomcat

HTTP

Activation du module rewrite :

# a2enmod rewrite

Création d’un vhost en écoute sur le port 80/tcp pour rediriger vers le port 443/tcp :

# cat <<-'EOF' >/etc/apache2/sites-available/http.conf

<VirtualHost _default_:80>

###

# Configuration du service

#

ServerName cas.miletrie.lan

ServerAdmin [email protected]

###

# Redirection sur HTTPS et sur le vhost CAS

#

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteCond %{HTTPS} off

RewriteRule (.*) https://cas.miletrie.lan%{REQUEST_URI}

</IfModule>

</VirtualHost>

EOF

Baptiste MOINE 49 Installation de CAS Server v5

Page 51: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

HTTPS

Activation du module ssl :

# a2enmod ssl

Création d’une clé privée pour la signature du certificat :

# mkdir ~/.ssl/

# pushd ~/.ssl/

# openssl genrsa -aes256 -out server.key 4096

Création d’une Certificate Signing Request (CSR) contenant une signature du serveurainsi que des informations publiques (c.-à-d. Pays, Nom (CN), localisation) :

# openssl req -new -key server.key -out cas.miletrie.lan.csr

Information du certificat Valeur

Nom court du pays FR

Nom complet du pays France

Ville Poitiers

Nom de l’organisation Centre Hospitalier Henri Laborit

Unité de l’organisation DSIO

Nom du service (FQDN) cas.miletrie.lan

Adresse e-mail [email protected]

Signature du certificat :

# openssl x509 -req -days 365 -in cas.miletrie.lan.csr -signkey server.key -outcas.miletrie.lan.crt

Copie du certificat dans le répertoire prévu à cet effet :

# install -m 755 -o root -g root -d /etc/ssl/certs/

# install -m 710 -o root -g ssl-cert -d /etc/ssl/private/

# install -m 644 -o root -g root {.,/etc/ssl/certs}/cas.miletrie.lan.crt

# install -m 640 -o root -g ssl-cert {.,/etc/ssl/private}/server.key

Baptiste MOINE 50 Installation de CAS Server v5

Page 52: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Suppression des anciens certificats et du répertoire « .ssl/ » :

# rm /etc/ssl/certs/ssl-cert-snakeoil.pem /etc/ssl/private/ssl-cert-snakeoil.key

# popd

# rm -rf ~/.ssl/

Préparation du HTTP Public Key Pinning (HPKP) :

# openssl x509 -noout -in /etc/ssl/certs/cas.miletrie.lan.crt -pubkey | \

openssl asn1parse -noout -inform pem -out public.key; \

openssl dgst -sha256 -binary public.key | \

openssl enc -base64; \

rm public.key

Création d’un vhost en écoute sur le port 443/tcp pour la communication AJP avecTomcat :

# cat <<-'EOF' >/etc/apache2/sites-available/https.conf

<IfModule mod_ssl.c>

<VirtualHost _default_:443>

###

# Configuration du service

#

ServerName cas.miletrie.lan

ServerAdmin [email protected]

###

# Journalisation

#

ErrorLog ${APACHE_LOG_DIR}/cas.error.log

CustomLog ${APACHE_LOG_DIR}/cas.access.log combined

###

# Activation du module SSL

#

SSLEngine on

SSLProtocol ALL -SSLv2 -SSLv3

SSLHonorCipherOrder On

SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS

Baptiste MOINE 51 Installation de CAS Server v5

Page 53: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

SSLCertificateFile /etc/ssl/certs/cas.miletrie.lan.crt

SSLCertificateKeyFile /etc/ssl/private/server.key

SSLVerifyClient none

# HSTS pour 1 an sur tous les sous-domaines

Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" env=HTTPS

# HPKP pour 60 jours

Header set Public-Key-Pins "pin-sha256=\"EY5YKJpjOwmV9asoRLNT/ROAFmGBVk5uEz7xziU7rRA=\"; max-age=5184000" env=HTTPS

###

# CAS

#

# Force la redirection de la racine (uniquement !) sur /cas

RedirectMatch 301 ^/$ /cas

# Monte cas sur l'URL /cas via AJP

<IfModule jk_module>

JkMount /cas cas

JkMount /cas/* cas

</IfModule>

</VirtualHost>

</IfModule>

EOF

Désactivation du vhost par défaut et activation des nouveaux :

# a2dissite 000-default

# a2ensite http https

Configuration de Tomcat

Afin de rendre le montage du module JK, il est nécessaire d’activer le connecteur AJP surTomcat, pour cela, vérifier en dé-commentant, si besoin, la directive suivante :

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

Baptiste MOINE 52 Installation de CAS Server v5

Page 54: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Configuration de CAS

Modification du nom de serveur de CAS :

# sed -i 's#\(cas.server.name=\).*#\1cas.miletrie.lan:8080#' ./etc/chl/cas5/config/cas.properties

# sed -i 's#\(cas.server.prefix=\).*#\1${cas.server.name}/cas#' ./etc/chl/cas5/config/cas.properties

# sed -i 's#\(cas.host.name=\).*#\1cas.miletrie.lan#' ./etc/chl/cas5/config/cas.properties

Note : L’URL d’accès à l’application CAS sera dorénavant http://cas.miletrie.lan/cas, laredondance du terme « cas » sera supprimée en production en remplaçant le nom duserveur par « id ».

Création d’un nouveau commit et envoi des modifications sur le dépôt fork :

# git add ./etc/chl/cas5/config/cas.properties

# git commit --message "Mise à jour du port d'écoute de CAS et du nom d'hôte"

# git push --set-upstream origin master

Baptiste MOINE 53 Installation de CAS Server v5

Page 55: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Tests

Redémarrage d’Apache HTTP et redéploiement de CAS :

# systemctl restart apache2.service

# cas-deploy

Remarque : L’utilisation d’une clé SSL/TLS protégée par une passphrase nécessite undéverrouillage, ainsi, si elle est définie, lors du redémarrage du service HTTP, il serademandé la saisie de la passphrase.

Afin de vérifier l’état de fonctionnement des deux vhosts, nous allons préparer une requêtesur l’adresse http://cas/ qui devrait rediriger en plusieurs étapes vers l’adressehttps://cas.miletrie.lan/cas/login :

# curl --insecure --silent --include --location --head --header "User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0" --url "http://cas/"

• La première réponse indique que les mécanismes de HSTS (ajout de l’en-tête« Strict-Transport-Security »), HPKP (ajout de l’en-tête « Public-Key-Pins ») et laredirection vers HTTPS (Code 302 Found) sont fonctionnels :

HTTP/1.1 302 Found

Date: Tue, 08 Nov 2016 16:19:45 GMT

Server: Apache

Location: https://cas.miletrie.lan/

Content-Type: text/html; charset=iso-8859-1

• La deuxième réponse correspond effectivement à la redirection effectuée par ladirective permettant de rediriger sur « /cas » (Code 301 Moved Permanently) :

HTTP/1.1 301 Moved Permanently

Date: Tue, 08 Nov 2016 16:19:45 GMT

Server: Apache

Location: https://cas.miletrie.lan/cas

Content-Type: text/html; charset=iso-8859-1

Baptiste MOINE 54 Installation de CAS Server v5

Page 56: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

• La troisième réponse correspond à une redirection sur « /cas/ » :

HTTP/1.1 302 302

Date: Tue, 08 Nov 2016 16:19:45 GMT

Server: Apache

Location: /cas/

X-Frame-Options: sameorigin

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

Public-Key-Pins: pin-sha256="+F1qAHf9QaHi2oBAcua8N2OcNoys6fZEp319xiR+89s="; max-age=5184000

• La quatrième réponse indique une redirection vers « /cas/login » issue del’application CAS dont l’accès se fait par AJP vers le service Tomcat (ajout d’un en-tête « X-Application-Context »). Cette réponse permet de valider le fonctionnementdu lien AJP, du service Tomcat et de l’application CAS :

HTTP/1.1 302 302

Date: Tue, 08 Nov 2016 16:19:45 GMT

Server: Apache

X-Application-Context: cas:native:8443

Location: /cas/login

Content-Language: fr-FR

X-Frame-Options: sameorigin

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

Public-Key-Pins: pin-sha256="+F1qAHf9QaHi2oBAcua8N2OcNoys6fZEp319xiR+89s="; max-age=5184000

Baptiste MOINE 55 Installation de CAS Server v5

Page 57: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

• Enfin la dernière réponse correspond à la page d’authentification de CAS,distinguable grâce à l’en-tête « Content-Type » indiquant qu’il s’agit d’une pageHTML (« text/html ») :

HTTP/1.1 200 200

Date: Tue, 08 Nov 2016 16:19:45 GMT

Server: Apache

X-Application-Context: cas:native:8443

Cache-Control: no-store

Content-Language: fr-FR

Content-Length: 8699

Vary: Accept-Encoding

X-Frame-Options: sameorigin

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

Public-Key-Pins: pin-sha256="+F1qAHf9QaHi2oBAcua8N2OcNoys6fZEp319xiR+89s="; max-age=5184000

Content-Type: text/html;charset=UTF-8

Baptiste MOINE 56 Installation de CAS Server v5

Page 58: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

CRÉATION D’UN ENVIRONNEMENT DE TEST POUR L’AUTHENTIFICATION SANS MULTIFACTEUR

Suite à l’installation de notre service d’authentification centralisé, il peut être intéressant devalider son fonctionnement en utilisant, par exemple, le protocole Kerberos pourl’authentification des clients sur le portail et développer une application simple pourprendre en charge l’authentification du client par l’intermédiaire de CAS en s’appuyant surle mécanisme SPNEGO (protocole négociant au choix une authentification avec NTLM ouKerberos).

Pour mettre en place cet environnement de test, il sera nécessaire de :

• Installer et configurer un service d’annuaire permettant de contenir notre based’utilisateurs, ici nous avons fait le choix d’Active Directory, mais l’utilisationd’OpenLDAP est tout à fait envisageable ;

• Installer et configurer un service Kerberos comprenant plusieurs services,notamment :

◦ Un service de distribution de clés (KDC pour « Key Distribution Center ») ;

◦ Un service d’authentification (AS pour « Authentication Service ») ;

◦ Un service d’attribution de tickets (TGS pour « Ticket-Granting Service »).

• Mettre à jour le flux d’authentification (« Login Webflow ») associé à CAS afin desupporter la négociation de tickets Kerberos ;

• Intégrer un ordinateur client au domaine ;

• Déployer une application de test basée sur phpCAS (par exemple).

Baptiste MOINE 57 Installation de CAS Server v5

Page 59: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Installation d’Active Directory sous Windows Server 2016

Pour commencer l’installation du service d’annuaire Active Directory, il est préférable (maispas nécessaire !) de procéder à l’installation de Windows Server en mode « ExpérienceUtilisateur », ceci permettant de bénéficier des outils d’administration graphique et d’unenvironnement plus accessible pour l’administration, à noter que ce type d’installationnécessitera de plus de ressources physiques (et virtuelles s’il s’agit d’un environnementvirtualisé) qu’une installation simple avec un accès console.

Préparation du système

Configuration du nom d’hôte

> netdom renamecomputer $env:computername /Newname "SRV-DC1"

> netsh interface ip set address "Ethernet" static 172.16.57.146 255.255.0.0 172.16.10.1

> netsh interface ip add dns "Ethernet" 172.16.10.32 index=1

> netsh interface ip add dns "Ethernet" 172.16.10.33 index=2

> shutdown -r -t 00 -c "Modification du nom d'hôte et de la configuration IPv4"

Installation des services de domaine Active Directory et des outils d’administration

Ayant besoin d’un service d’authentification basé sur Kerberos 5, l’installation du serviceAD LDS (« Active Directory Lightweight Directory Service ») ne serait pas suffisante, il estdonc nécessaire d’installer les services AD DS (« Active Directory Directory Service »)embarquant entre autre le service Kerberos (source :https://social.technet.microsoft.com/Forums/en-US/db8d16d7-c959-47d3-bee0-a7b0f36a2c75/kerberos-service-not-running-on-ad-lds-server?forum=winserverDS).

Les services de domaine Active Directory (AD DS) stockent des informations sur lesutilisateurs, les ordinateurs et les périphériques sur le réseau. Ils permettent égalementaux administrateurs de gérer ces informations de façon sécurisée et facilitent le partagedes ressources et la collaboration entre les utilisateurs.

L’installation des services de domaine Active Directory utilise le Gestionnaire de serveur etWindows PowerShell, comme tous les autres rôles et fonctionnalités dans WindowsServer 2012. À noter que l’assistant graphique dans le « Gestionnaire de serveur » ou lemodule « ServerManager » pour Windows PowerShell sont à la fois exploitables en local,mais également à distance.

S’agissant d’une évolution majeure dans la gestion des services de Windows Server, unmaximum de processus de déploiement Windows PowerShell seront effectués et décritdans la suite de ce guide.

Baptiste MOINE 58 Installation de CAS Server v5

Page 60: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Quelques règles de bonnes pratique :

• Afin de veiller à la disponibilité des services de domaine Active Directory et assurerune continuité de services aux utilisateurs en cas de panne du serveur, l’installationd’un minimum de deux contrôleurs de domaine par domaine est conseillée parMicrosoft ;

• Les services AD DS nécessitant qu’un serveur DNS soit installé sur le réseau etaccessible en écriture par les services d’annuaire Active Directory, une réplicationde celui-ci sera également conseillée.

Dans notre cas, l’installation d’un unique serveur sera amplement nécessaire puisqu’il nes’agit que d’un environnement de test qui sera de toute manière retravaillé pour être misen production.

> [string[]]$InstallFeatures = @()

> $InstallFeatures += "AD-Domain-Services"

> $InstallFeatures += "RSAT-ADDS-Tools"

> $InstallFeatures += "RSAT-AD-AdminCenter"

> $InstallFeatures += "RSAT-ADLDS"

> $InstallFeatures += "RSAT-AD-PowerShell"

> $InstallFeatures += "RSAT-AD-Tools"

> $InstallFeatures += "RSAT-ADDS"

> Add-WindowsFeature $InstallFeatures

Ajout d’une nouvelle forêt « miletrie.lan »

Pour les tests et afin de ne pas perturber l’environnement de production, la création d’unenouvelle forêt « miletrie.lan » sera effectuée.

> Import-Module ADDSDeployment

> Install-ADDSForest -CreateDnsDelegation:$false -DatabasePath "D:\NTDS" -DomainMode "Win2012R2" -DomainName "miletrie.lan" -DomainNetbiosName "MILETRIE" -ForestMode "Win2012R2" -InstallDns:$true -LogPath "D:\Logs" -NoRebootOnCompletion:$false -SafeModeAdministratorPassword $(Read-Host -Prompt"Mot de passe de restauration des services d'annuaire (DSRM)" -AsSecureString |ConvertTo-SecureString -AsPlainText -Force) -SysvolPath "D:\SYSVOL" -Confirm -Verbose

Ici, la question de créer une délégation de zone DNS ne se pose pas puisqu’il s’agit de lazone racine.

Baptiste MOINE 59 Installation de CAS Server v5

Page 61: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

La dernière commande devrait retourner ce type de message :

Baptiste MOINE 60 Installation de CAS Server v5

Créez une forêt Active Directory avec le nom « miletrie.lan ».

Configurez ce serveur en tant que premier contrôleur de domaine ActiveDirectory d’une nouvelle forêt.

Le nouveau nom de domaine est « miletrie.lan ». C’est aussi le nom de lanouvelle forêt.

Nom NetBIOS du domaine : MILETRIE

Niveau fonctionnel de la forêt : Windows Server 2012 R2

Niveau fonctionnel du domaine : Windows Server 2012 R2

Options supplémentaires :

• Catalogue global : Oui

• Serveur DNS : Oui

• Créer une délégation DNS : Non

Dossier de la base de données : D:\NTDS

Dossier des fichiers journaux : D:\Logs

Dossier SYSVOL : D:\SYSVOL

Le service Serveur DNS sera configuré sur cet ordinateur.

Cet ordinateur sera configuré pour utiliser ce serveur DNS en tant que serveurDNS préféré.

Le mot de passe du nouvel administrateur de domaine sera le même que celuide l’administrateur local de cet ordinateur.

Page 62: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Vérification des services réseau

Afin de vérifier que chacun des services souhaités est effectivement installé et fonctionnel,il est possible de vérifier les ports d’écoute du serveur et croiser ces informations avec lesprocessus et services en cours d’exécution :

> netstat -ano | findstr "LISTENING"

> tasklist /SVC

Le croisement de ces informations nous permet de déduire cette liste :

Protocole Adresse locale Adressedistante

État Description

TCP 127.0.0.1:53 0.0.0.0:0 LISTENING Domain Name Service

TCP 172.16.57.146:53 0.0.0.0:0 LISTENING Domain Name Service

TCP 172.16.57.146:139

0.0.0.0:0 LISTENING NETBIOS Session Service

TCP 0.0.0.0:88 0.0.0.0:0 LISTENING Kerberos

TCP 0.0.0.0:135 0.0.0.0:0 LISTENING DCE endpoint resolution

TCP 0.0.0.0:389 0.0.0.0:0 LISTENING Lightweight Directory Access Protocol

TCP 0.0.0.0:445 0.0.0.0:0 LISTENING Microsoft CIFS

TCP 0.0.0.0:464 0.0.0.0:0 LISTENING Kerberos (v5)

TCP 0.0.0.0:593 0.0.0.0:0 LISTENING Remote Procedure Call

TCP 0.0.0.0:636 0.0.0.0:0 LISTENING LDAP over TLS/SSL

TCP 0.0.0.0:3268 0.0.0.0:0 LISTENING Microsoft Global Catalog

TCP 0.0.0.0:3269 0.0.0.0:0 LISTENING Microsoft Global Catalog over SSL

TCP 0.0.0.0:5985 0.0.0.0:0 LISTENING Windows Remote Management Service

TCP 0.0.0.0:9389 0.0.0.0:0 LISTENING Active Directory Web Services

TCP 0.0.0.0:47001 0.0.0.0:0 LISTENING Windows Remote Management Service

Le service DNS, LDAP et Kerberos sont donc bien exécutés.

Baptiste MOINE 61 Installation de CAS Server v5

Page 63: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Configuration du service DNS

Validation du fonctionnement du service DNS et liste des RR actuels

Les RR correspondent à un enregistrement dans la zone DNS, ils peuvent être dedifférents types dont la liste complète est référencée par l’IANA(http://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml) :

> Import-Module DnsServer

> Get-DnsServerResourceRecord -ZoneName "miletrie.lan" -RRType "SRV"

> Get-DnsServerResourceRecord -ZoneName "miletrie.lan" -Name "SRV-DC1" -RRType "A"

Ajout d’enregistrements sur le service DNS

Ici, nous allons ajouter un enregistrement (RR de type « A ») associé au serveur CAS etau serveur d’application de test (on l’appellera « Appli1 ») :

> Add-DnsServerResourceRecordA -Name "cas" -ZoneName "miletrie.lan" -AllowUpdateAny -IPv4Address "172.16.57.144" -TimeToLive 01:00:00

> Add-DnsServerResourceRecordA -Name "appli1" -ZoneName "miletrie.lan" -AllowUpdateAny -IPv4Address "172.16.57.148" -TimeToLive 01:00:00

Baptiste MOINE 62 Installation de CAS Server v5

Page 64: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Configuration de l’annuaire

Création d’unités d’organisation

Plusieurs unités d’organisation seront créés afin de faciliter la maintenance de l’annuaire :

> New-ADOrganizationalUnit -Name "Utilisateurs" -Path "DC=miletrie,DC=lan"

> New-ADOrganizationalUnit -Name "Personnel CHL" -Path "OU=Utilisateurs,DC=miletrie,DC=lan"

> New-ADOrganizationalUnit -Name "Applications" -Path "OU=Utilisateurs,DC=miletrie,DC=lan"

L’arborescence de l’annuaire sera donc tel que :

miletrie.lan

├─── Computers # Ordinateurs du domaine

├─── Domain Controllers # Contrôleurs du domaine

└─── Utilisateurs # Utilisateurs du domaine

├─── Applications # Comptes de services du domaine

└─── Personnel CHL # Comptes d’utilisateurs du domaine

Ajout d’un utilisateur bmoine à l’annuaire avec support pour le chiffrement AES128 et AES256

Chaque utilisateur possède des attributs qui sont décrits en fonction d’un schéma associéà l’annuaire. L’attribut « msDC-SupportedEncryptionTypes » permet de définir lesalgorithmes de chiffrement supportés, pour cela, il suffit d’additionner les bitscorrespondant et de donner cette valeur à cet attribut.

Les bits correspondant sont tels que :

Algorithmes Valeur hexadécimale

DES-CBC-CRC 0x01

DES-CBC-MD5 0x02

RC4-HMAC 0x04

AES128-CTS-HMAC-SHA1-96 0x08

AES256-CTS-HMAC-SHA1-96 0x10

Ici, nous allons restreindre l’utilisation du chiffrement aux seuls algorithmes AES128 etAES256, donc :

0x08 + 0x10 = 0x18

(1 * 16^1) + (8 * 16^0) = 16 + 8 = 24

Baptiste MOINE 63 Installation de CAS Server v5

Page 65: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

S’agissant d’un nouvel utilisateur, il est possible de spécifier les algorithmes à utiliserdirectement en texte clair lors de sa création :

> New-ADUser "bmoine" -GivenName "Baptiste" -Surname "MOINE" -DisplayName "Baptiste MOINE" -UserPrincipalName "[email protected]" -AccountPassword $(Read-Host -Prompt "Mot de passe de pour l'utilisateur bmoine" -AsSecureString)-ChangePasswordAtLogon $False -Enabled $True -Path "OU=Personnel CHL,OU=Utilisateurs,DC=miletrie,DC=lan" -KerberosEncryptionType "AES128, AES256"

Vérification des algorithmes utilisés

Afin de simplifier la vérification sur l’ensemble des utilisateurs, le script suivant permet desortir un tableau listant les algorithmes utilisables associés à chacun des utilisateurs del’annuaire :

> $Users = Get-ADUser -Filter * -SearchBase "OU=Personnel CHL,OU=Utilisateurs,DC=miletrie,DC=lan" -Properties "msDS-SupportedEncryptionTypes"

> ForEach ($User in $Users) {

$EncryptionAlgorithm = New-Object System.Collections.Specialized.OrderedDictionary

@{

"DES-CBC-CRC"=0x01;

"DES-CBC-MD5"=0x02;

"RC4-HMAC"=0x04;

"AES128-CTS-HMAC-SHA1-96"=0x08;

"AES256-CTS-HMAC-SHA1-96"=0x10

}.GetEnumerator()| ForEach-Object {

$EncryptionAlgorithm.Add($_.Name, @("Non","Oui")[(($User."msDS-SupportedEncryptionTypes") -bor $_.Value) -eq ($User."msDS-SupportedEncryptionTypes")])

}

Write-Host "Utilisateur $($User.UserPrincipalName) :"

Write-Host "$($EncryptionAlgorithm.GetEnumerator() | Sort-Object Name -Descending | Format-Table @{Expression={$_.Name};Label="Algorithme de chiffrement"},@{Expression={$_.Value};Label="Supporté par l'utilisateur"} | Out-String)"

}

Baptiste MOINE 64 Installation de CAS Server v5

Page 66: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Par exemple, pour l’utilisateur bmoine, le tableau retourné est le suivant :

Algorithme de chiffrement Supporté par l’utilisateur

RC4-HMAC Non

DES-CBC-MD5 Non

DES-CBC-CRC Non

AES256-CTS-HMAC-SHA1-96 Oui

AES128-CTS-HMAC-SHA1-96 Oui

Ajout de l’utilisateur bmoine au groupe « Opérateurs de compte » pour permettrel’intégration de postes au domaine :

> ADD-ADGroupMember "Opérateurs de compte" –members "bmoine"

Création d’un compte de service pour CAS

> New-ADUser "cas" -DisplayName "CAS Server Principle Name" -UserPrincipalName "[email protected]" -AccountPassword $(Read-Host -Prompt "Mot de passe de pour l'utilisateur cas" -AsSecureString) -ChangePasswordAtLogon $False -Enabled $True -Path "OU=Applications,OU=Utilisateurs,DC=miletrie,DC=lan" -KerberosEncryptionType "AES128, AES256"

Baptiste MOINE 65 Installation de CAS Server v5

Page 67: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Génération d’un keytab

L’outil ktpass permet à un administrateur de configurer un service Kerberos différent deWindows Server comme un security principal dans Windows Server en générant unkeytab Kerberos contenant un ou plusieurs secrets partagés (« shared secret key ») entrele serveur Kerberos et le service.

Dans un premier temps, nous allons créer un keytab, contenant une clé partagée pourchacun des protocoles de chiffrement :

> ktpass /out cas.keytab /princ HTTP/[email protected] /pass +rndPass /mapuser [email protected] /ptype KRB5_NT_PRINCIPAL /crypto All

Ici, le mot de passe est utilisé uniquement comme un nonce permettant de générer lesclés en améliorant l’entropie et n’est pas utilisé pour chiffrer ce keytab.

L’option « /mapuser » permet d’indiquer le compte de service associé à ce service, onparle de SPN (« Service Principal Name »). Ses attributs seront mis à jour enconséquence.

Baptiste MOINE 66 Installation de CAS Server v5

Page 68: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Installation de Kerberos sur le serveur CAS

Installation de Kerberos

# debconf-set-selections <<< "krb5-config krb5-config/default_realm string MILETRIE.LAN"

# debconf-set-selections <<< "krb5-config krb5-config/kerberos_servers string srv-dc1.miletrie.lan"

# debconf-set-selections <<< "krb5-config krb5-config/admin_server string srv-dc1.miletrie.lan"

# apt-get -fy install krb5-user

Copie du keytab sur le serveur CAS

# install -o root -g tomcat8 -m 750 -d /opt/cas-server-5/etc/chl/cas5/kerberos/

# install -o root -g tomcat8 -m 640 {,/opt/cas-server-5/etc/chl/cas5/kerberos/}cas.keytab

Modification du keytab pour ne garder que AES128 et AES256

# ktutil

ktutil> read_kt /opt/cas-server-5/etc/chl/cas5/kerberos/cas.keytab

ktutil> list -t -k -e

ktutil> delete_entry 1

ktutil> delete_entry 1

ktutil> delete_entry 1

ktutil> write_kt /opt/cas-server-5/etc/chl/cas5/kerberos/cas.keytab.new

ktutil> exit

# mv /opt/cas-server-5/etc/chl/cas5/kerberos/cas.keytab{.new,}

Baptiste MOINE 67 Installation de CAS Server v5

Page 69: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Afin de prendre en compte l’ajout de ce keytab dans le déploiement de CAS, le script dedéploiement rapide sera mis à jour dans ~/.bash_profile tel que :

function cas-deploy {

rm -rf /etc/chl/cas5/ /opt/cas-server-5/target/ ${CATALINA_HOME}/webapps/cas* ${CATALINA_HOME}/{logs,work} /var/{cache,log}/${TOMCAT8_USER}/;

install -m 750 -o ${TOMCAT8_USER} -g adm -d /var/{cache,log}/${TOMCAT8_USER}/;

ln -s /var/log/${TOMCAT8_USER}/ ${CATALINA_HOME}/logs;

ln -s /var/cache/${TOMCAT8_USER}/ ${CATALINA_HOME}/work;

systemctl restart tomcat8.service &&

pushd /opt/cas-server-5/ &&

mvn clean package -e &&

cp /opt/cas-server-5/target/cas.war ${CATALINA_HOME}/webapps/ &&

install -m 755 -o root -g root -d /etc/chl/ &&

install -m 750 -o ${TOMCAT8_USER} -g ${TOMCAT8_GROUP} -d /etc/chl/cas5/ &&

install -m 640 -o ${TOMCAT8_USER} -g ${TOMCAT8_GROUP} {.,}/etc/chl/cas5/log4j2.xml &&

cp -R {.,}/etc/chl/cas5/config/ &&

cp -R {.,}/etc/chl/cas5/services/ &&

cp -R {.,}/etc/chl/cas5/kerberos/ &&

chown -R ${TOMCAT8_USER}:${TOMCAT8_GROUP} /etc/chl/cas5/{config,services}/ &&

chown -R root:${TOMCAT8_GROUP} /etc/chl/cas5/kerberos/ &&

chmod -R 640 /etc/chl/cas5/{config,kerberos,services}/ &&

chmod 750 /etc/chl/cas5/{config,kerberos,services}/ &&

systemctl restart tomcat8.service &&

popd

}

Baptiste MOINE 68 Installation de CAS Server v5

Page 70: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Configuration de Kerberos

# cat <<-'EOF' >/etc/krb5.conf

[logging]

default = FILE:/var/log/krb5libs.log

kdc = FILE:/var/log/krb5kdc.log

admin_server = FILE:/var/log/kadmind.log

[libdefaults]

default_realm = MILETRIE.LAN

ticket_lifetime = 24000

default_keytab_name = /etc/chl/cas5/kerberos/cas.keytab

dns_lookup_realm = false

dns_lookup_kdc = false

forwardable = yes

default_tkt_enctypes = aes256-cts des3-cbc-sha1 arcfour-hmac des-cbc-md5 des-cbc-crc

default_tgs_enctypes = aes256-cts des3-cbc-sha1 arcfour-hmac des-cbc-md5 des-cbc-crc

[realms]

MILETRIE.LAN = {

kdc = srv-dc1.miletrie.lan

admin_server = srv-dc1.miletrie.lan

default_domain = MILETRIE.LAN

}

[domain_realm]

.miletrie.lan = MILETRIE.LAN

miletrie.lan = MILETRIE.LAN

EOF

Baptiste MOINE 69 Installation de CAS Server v5

Page 71: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Test d’authentification

Suppression des précédents tickets (optionnel) :

# kdestroy

Liste des clés dans le keytab :

# klist -k

Authentification avec le keytab :

# kinit -k HTTP/[email protected]

Liste des tickets :

# klist

# Ticket cache: FILE:/tmp/krb5cc_0

# Default principal: HTTP/[email protected]

#

# Valid starting Expires Service principal

# 12/28/16 10:49:00 12/28/16 17:29:00 krbtgt/[email protected]

Récupération d’un nouveau TGT pour l’utilisateur bmoine :

# kinit -V -p bmoine

Liste des tickets

# klist

# Ticket cache: FILE:/tmp/krb5cc_0

# Default principal: [email protected]

#

# Valid starting Expires Service principal

# 12/28/16 10:49:00 12/28/16 17:29:00 krbtgt/[email protected]

Baptiste MOINE 70 Installation de CAS Server v5

Page 72: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Mise à jour du chemin d’authentification de CAS

Tout d’abord il faut vérifier que le fichier de provisioning Maven (pom.xml) dispose biendes instructions nécessaires à installer les dépendances nécessaires au fonctionnementde SPNEGO :

<?xml version="1.0" encoding="UTF-8"?>

<project ...>

...

<properties>

...

<!-- Version de CAS -->

<cas.groupId>org.apereo.cas</cas.groupId>

<cas.version>5.1.0-SNAPSHOT</cas.version>

...

</properties>

<dependencies>

...

<!-- Authentification -->

<!-- SPNEGO pour Kerberos -->

<dependency>

<groupId>${cas.groupId}</groupId>

<artifactId>cas-server-support-spnego</artifactId>

<version>${cas.version}</version>

<scope>compile</scope>

</dependency>

<!-- Webflow pour SPNEGO (https://apereo.github.io/cas/5.0.x/installation/SPNEGO-Authentication.html) -->

<dependency>

<groupId>${cas.groupId}</groupId>

<artifactId>cas-server-support-spnego-webflow</artifactId>

<version>${cas.version}</version>

<scope>runtime</scope>

</dependency>

...

</dependencies>

...

</project>

Baptiste MOINE 71 Installation de CAS Server v5

Page 73: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Ensuite, il est nécessaire de configurer CAS (cas.properties) afin qu’il soit correctementassocié en tant que client Kerberos auprès de Windows Server en utilisant la configurationlocale du client Kerberos (voir https://apereo.github.io/cas/5.0.x/installation/Configuration-Properties.html), à titre d’exemple, voici un extrait de la configuration :

# cat <<-'EOF' >>./etc/chl/cas5/config/cas.properties

##

# Configuration pour l'authentification SPNEGO avec Kerberos et JCIFS

#

cas.authn.spnego.kerberosConf=/etc/krb5.conf

cas.authn.spnego.jcifsServicePrincipal=HTTP/[email protected]

cas.authn.spnego.kerberosKdc=172.16.57.146

cas.authn.spnego.ipsToCheckPattern=172.16.+

cas.authn.spnego.kerberosRealm=MILETRIE.LAN

EOF

Remarque : Pour créer les différentes clés de chiffrement et de signature des TGC et duWEBFlow (cas.webflow.encryption.key, cas.webflow.signing.key, cas.tgc.encryption.key etcas.tgc.signing.key), il est préférable de les générer manuellement :

# pushd /opt/

# git clone https://github.com/mitreid-connect/json-web-key-generator

# pushd json-web-key-generator/

# mvn package

# for (( i=1; i<=2; ++i )); do java -jar target/json-web-key-generator-0.4-SNAPSHOT-jar-with-dependencies.jar -s 512 -t oct -S -o /tmp/webflow.json; done

# for (( i=1; i<=2; ++i )); do java -jar target/json-web-key-generator-0.4-SNAPSHOT-jar-with-dependencies.jar -s 512 -t oct -S -o /tmp/tgc.json; done

# cat /tmp/{webflow,tgc}.json

# popd

# popd

Enfin, il suffit de créer un fichier « login-webflow.xml » contenant nos différentes actions,transitions, vues et décisions telles que décrites sur le Wiki d’Apereo (voirhttps://apereo.github.io/cas/5.0.x/installation/Webflow-Customization.html).

Création d’un nouveau commit et envoi des modifications sur le dépôt fork :

# git add .

# git commit --message "Mise en place de SPNEGO"

# git push --set-upstream origin master

Baptiste MOINE 72 Installation de CAS Server v5

Page 74: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Ajout de miletrie.lan au registre de services

# cat <<-'EOF' >./etc/chl/cas5/services/miletrie-1002.json

{

/*

Tous les services HTTP/HTTPS du domaine miletrie.lan

*/

"@class" : "org.apereo.cas.services.RegexRegisteredService"

"serviceId" : ^https?://.*\.miletrie\.lan/.*

"name" : "miletrie-lan"

"id" : 1002

}

EOF

Création d’un nouveau commit et envoi des modifications sur le dépôt fork :

# git add .

# git commit --message "Ajout de miletrie.lan au registre de services"

# git push --set-upstream origin master

Déploiement de CAS :

# cas-deploy

Baptiste MOINE 73 Installation de CAS Server v5

Page 75: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Intégration d’un ordinateur client au domaine miletrie.lan

Pour tester l’authentification Kerberos sur Appli1, il est nécessaire d’être client Kerberosdu serveur Kerberos placé sur le contrôleur de domaine, pour cela, il est nécessaired’intégrer l’ordinateur au domaine miletrie.lan.

Intégration du poste au domaine, ici, l’ordinateur client fonctionne sous Microsoft Windows7 et se nomme « Win7-PC » :

# netdom join Win7-PC /domain:miletrie.lan /userd:bmoine /passwordd:hdP$X7YdhNoE7wqodFowhEK2zfPQBj!f

# shutdown -r -t 00 -c "Intégration du poste au domaine miletrie.lan"

Configuration du navigateur pour autoriser SPNEGO

Firefox

Dans la barre d’adresse du navigateur, saisir « about:config » et modifier la propriété« network.negotiate-auth.trusted-uris » en lui donnant pour valeur « cas.miletrie.lan ».

Internet Explorer

Dans les Options Internet (Win+R « inetcpl.cpl ») :

• Dans l’onglet « Avancé », dans les paramètres de « Sécurité », vérifier que l’option« Activer l’authentification Windows intégrée » est cochée ;

• Dans l’onglet « Sécurité », dans les « Sites » de la zone « Intranet local » (bouton« Avancé »), ajouter « https://cas.miletrie.lan ».

Baptiste MOINE 74 Installation de CAS Server v5

Illustration 3: Options Internet - Activation de l'authentification Windowsintégrée

Illustration 2: about:config - Trusted URIs

Page 76: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Déploiement d’une application de test basée sur phpCAS

Pour déployer cette application de test, nous allons nous baser sur une nouvelleinstallation de Debian Jessie qui sera dédiée à la fourniture de l’application de test surHTTP.

Préparation du système

Configuration de l’accès réseau

Configuration des contrôleurs d’interfaces réseau et de la résolution de noms DNS :

# export HOSTNAME=appli1

# export DOMAIN=miletrie.lan

# cat <<-EOF >/etc/network/interfaces

# Loopback NIC

auto lo

iface lo inet loopback

# Ethernet NIC

auto eth0

allow-hotplug eth0

iface eth0 inet static

address 172.16.57.148

netmask 255.255.0.0

gateway 172.16.10.1

dns-search ${DOMAIN}

dns-nameservers 172.16.57.146 172.16.10.32 172.16.10.33

EOF

# ifdown eth0 && ifup eth0

Régénération du fichier /etc/resolv.conf :

# resolvconf -u || /etc/init.d/networking restart

Baptiste MOINE 75 Installation de CAS Server v5

Page 77: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Configuration du nom d’hôte

Mise à jour du nom d’hôte associé au système :

# cat <<EOF >/etc/hostname

${HOSTNAME}

EOF

# cat <<EOF >/etc/hosts

# IPv4

127.0.0.1 localhost

127.0.1.1 ${HOSTNAME}.${DOMAIN} ${HOSTNAME}

# IPv6

::1 ip6-localhost ip6-loopback

fe00::0 ip6-localnet

ff00::0 ip6-mcastprefix

ff02::1 ip6-allnodes

ff02::2 ip6-allrouters

EOF

# hostname ${HOSTNAME}

# hostname -b ${HOSTNAME}

# domainname ${HOSTNAME}.${DOMAIN}

# domainname -b ${HOSTNAME}.${DOMAIN}

# hostnamectl set-hostname ${HOSTNAME}

# sysctl kernel.hostname

# systemctl restart networking.service || /etc/init.d/networking restart

Baptiste MOINE 76 Installation de CAS Server v5

Page 78: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Installation du service HTTP avec PHP

Mise à niveau des paquets et du noyau système :

# apt-get update

# apt-get -fy upgrade && apt-get -fy dist-upgrade

Installation des services :

# apt-get -fy install nginx spawn-fcgi php5-fpm php5-cli php5-json php5-curl

Arrêt des services :

# systemctl stop php5-fpm.service

# systemctl stop nginx.service

Configuration de nginx

Sauvegarde et configuration de nginx :

# cp /etc/nginx/nginx.conf{,.bak}

# cat <<-'EOF' >/etc/nginx/nginx.conf

user www-data;

worker_processes auto;

worker_rlimit_nofile 2000;

pid /var/run/nginx.pid;

events {

worker_connections 1024;

use epoll;

multi_accept on;

}

http {

open_file_cache max=2000 inactive=20s;

open_file_cache_valid 30s;

open_file_cache_min_uses 2;

open_file_cache_errors on;

Baptiste MOINE 77 Installation de CAS Server v5

Page 79: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

log_format main '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

error_log /var/log/nginx/error.log warn;

sendfile on;

tcp_nopush on;

tcp_nodelay on;

keepalive_timeout 65;

types_hash_max_size 2048;

reset_timedout_connection on;

client_body_timeout 10;

send_timeout 2;

gzip on;

gzip_disable "MSIE [1-6]\.(?!.*SV1)";

gzip_comp_level 2;

gzip_min_length 1000;

gzip_proxied expired no-cache no-store private auth;

gzip_types text/plain application/x-javascript text/xml text/css application/xml;

server_tokens off;

server_names_hash_bucket_size 2048;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE

ssl_prefer_server_ciphers on;

include /etc/nginx/mime.types;

default_type application/octet-stream;

charset UTF-8;

include /etc/nginx/conf.d/*.conf;

include /etc/nginx/sites-enabled/*;

}

EOF

Baptiste MOINE 78 Installation de CAS Server v5

Page 80: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Création d’un nouveau vhost pour appli1.miletrie.lan

# cat <<-'EOF' >/etc/nginx/sites-available/appli1

upstream phpfcgi {

# server php:9000;

server unix:/var/run/php5-fpm.sock;

}

server {

listen 80;

listen [::]:80;

server_name appli1.miletrie.lan;

##

# Index

#

index index.php index.html index.htm;

##

# Journalisation

#

access_log /var/log/nginx/appli1/access.log;

error_log /var/log/nginx/appli1/error.log;

##

# Racine

#

root /usr/share/nginx/webroot/appli1;

###

# Location

#

location / {

try_files $uri $uri/ =404;

}

location ~ \.php$ {

try_files $uri =404;

fastcgi_index index.php;

Baptiste MOINE 79 Installation de CAS Server v5

Page 81: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

fastcgi_intercept_errors on;

fastcgi_pass phpfcgi;

fastcgi_split_path_info ^(.+\.php)(/.+)$;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include /etc/nginx/fastcgi_params;

}

location ~* \.(ico|css|js|gif|jpe?g|png)$ {

expires max;

log_not_found off;

access_log off;

add_header Pragma public;

add_header Cache-Control "public, must-revalidate, proxy-revalidate";

}

location ~ /\.ht {

deny all;

}

error_page 404 /404.html;

# error_page 500 502 503 504 /50x.html;

location = /404.html {

root /usr/share/nginx/static/;

}

location = /50x.html {

root /usr/share/nginx/static/;

}

}

EOF

Baptiste MOINE 80 Installation de CAS Server v5

Page 82: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Suppression du vhost « default » :

# rm /etc/nginx/sites-enabled/default

Activation du vhost « appli1 » :

# ln -s /etc/nginx/sites-available/appli1 /etc/nginx/sites-enabled/appli1

Création de l’arborescence du vhost :

# install -m 755 -o root -g adm -d /var/log/nginx/appli1/

# touch /var/log/nginx/appli1/{access,error}.log

# chmod 640 /var/log/nginx/appli1/{access,error}.log

# chown www-data:adm /var/log/nginx/appli1/{access,error}.log

# install -m 755 -o root -g root -d /usr/share/nginx/{webroot,static}/

Clone de l’application de test depuis mon référentiel GitLab :

# pushd /usr/share/nginx/webroot/

# git clone https://gitlab.com/Creased/php-cas-demo.git appli1

Clone de phpCAS en version 1.3 stable :

# git clone -b 1.3-stable https://github.com/Jasig/phpCAS.git /usr/share/nginx/webroot/appli1/vendor/phpCAS

Baptiste MOINE 81 Installation de CAS Server v5

Page 83: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Ajout de pages statiques pour les erreurs (404 et 50x) :

# cat <<-'EOF' >/usr/share/nginx/static/404.html

<!DOCTYPE html>

<html>

<head>

<title>404 Not Found</title>

<style>

body {

width: 35em;

margin: 0 auto;

font-family: Tahoma, Verdana, Arial, sans-serif;

}

</style>

</head>

<body>

<h1>404 Not Found</h1>

<p>Sorry, the page you are looking for could not be found.<br/>

The page may no longer exist or have moved to a new location.</p>

<p><em>Faithfully yours, nginx.</em></p>

</body>

</html>

EOF

# cat <<-'EOF' >/usr/share/nginx/static/50x.html

<!DOCTYPE html>

<html>

<head>

<title>Error</title>

<style>

body {

width: 35em;

margin: 0 auto;

font-family: Tahoma, Verdana, Arial, sans-serif;

}

</style>

</head>

<body>

<h1>An error occurred.</h1>

Baptiste MOINE 82 Installation de CAS Server v5

Page 84: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

<p>Sorry, the page you are looking for is currently unavailable.<br/>

Please try again later.</p>

<p>If you are the system administrator of this resource then you shouldcheck

the <a href="http://nginx.org/r/error_log">error log</a> for details.</p>

<p><em>Faithfully yours, nginx.</em></p>

</body>

</html>

EOF

Redémarrage des services :

# systemctl restart php5-fpm.service

# systemctl restart nginx.service

Baptiste MOINE 83 Installation de CAS Server v5

Page 85: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Test de l’authentification Kerberos sur Appli1

Depuis le client WIN7-PC, ouvrir le navigateur Firefox et saisir l’adresse d’Appli1 dans labarre d’adresse (p. ex., http://appli1.miletrie.lan/). Si tout se passe bien, l’applicationdevrait procéder à la redirection vers CAS, authentifier notre utilisateur automatiquementen utilisant Kerberos et afficher retourner son contenu en indiquant un message debienvenue (voir Illustration 4).

Analyse protocolaire

Si on procède à une capture des paquets envoyés aux différents services lors d’un accèsnon authentifié à Appli1, on peut décrire un diagramme de flux tel que :

Baptiste MOINE 84 Installation de CAS Server v5

Illustration 4: Appli1 - Bonjour bmoine

Page 86: Université de Poitiers Institut Universitaire de ... · Université de Poitiers Institut Universitaire de Technologie de Châtellerault Département Réseaux et Télécommunications

Baptiste MOINE 85 Installation de CAS Server v5

Illustration 5: Diagramme de flux pour l'accès à une application « CASifiée »