...
Schéma d’architecture de la solution
Pre-requis
Logiciels
- Linux : nous recommandons l'usage d'un debian/trixie (debian 13)
Java : nous recommandons l'usage d'openjdk
pour la partie serveur les versions 17 à 25 (généralement présentes dans les distributions) conviennent,
pour la partie cliente vous pouvez utiliser openjdk et openjfx en version 17 ou supérieur également.
Maven (dernière version 3.x) : le mieux est de l'installer via le système de paquets de votre linux - http://maven.apache.org/download.cgi
Postgresql : le mieux est de l'installer via le système de paquets de votre linux.
Tomcat 10 : https://tomcat.apache.org/download-10.cgi (ou jetty 10)ou jetty 12 : à installer via le système de paquets également
Apache + libapache2-mod-shib2 (par paquets)
Git
Les deux applications serveurs doivent être « shibbolethisées » - voir la documentation renater : https://services.renater.fr/federation/docs/installation/sp
...
Il est également nécessaire d'avoir un JDK d'installé (OpenJDK [installation par paquet]).
De même il vous faudra maven, que vous pouvez soit installer par paquet (apt install maven), soit manuellement depuis http://maven.apache.org/download.cgi
OpenJDK) et maven
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
| Bloc de code | ||||
| ||||
apt install openjdk-21-jdk-headless maven |
Installation des instances Tomcat
Création de l'utilisateur esup:
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
groupadd esup
useradd -g esup -m esup |
Installer les deux instances de Tomcat. L'une sera utilisée pour ESUP-SGC, l'autre pour ESUP-NFC-TAG.
On propose d'installer les 2 applications esup-sgc et esup-nfc-tag sur deux instances de Tomcat.
Plusieurs choix sont possibles Plusieurs choix sont possibles :
- on peut récupérer un binaire tomcat depuis https://tomcat.apache.org/download-10.cgi et installer manuellement celui-ci ;
- on peut installer le tomcat fourni par le gestionnaire de paquets de la distribution ;
- on peut aussi préférer jetty (installation via binaire ou paquet comme pour tomcat).
Dans la suite de cette documentation, on choisit l'option de l'installation manuelle car celle-ci a le mérite d'être indépendante du système utilisé ; l'installation par paquet peut toutefois être préférable s'appuyant sur le système de paquets pour profiter des mises à jour facilitées par votre distribution (apt sous debian) - c'est d'ailleurs cette option qui a été mise en place dans la VM ESUP-SGC de démonstration.
On installe le paquet tomcat10, avec l'utilitaire tomcat10-instance-create issu de tomcat10-user permettant de facilitier la mise en place de plusieurs instances sur le même serveur :
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
apt install tomcat10 tomcat10-user |
Dans l'optique d'installer les 2 tomcat pour esup-sgc et esup-nfc-tag de la même manière, on stoppe et désactive le tomcat proposé par défaut via le paquet tomcat10.
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
systemctl stop tomcat10.service
systemctl disable tomcat10.service |
Le paquet tomcat10 a ajouté au passage un utilisateur tomcat qui lancera nos instances de manière sécurisée avec des provilèges limitées.
Pour que les commandes bash lancées par esup-sgc fonctionne (commande chromium notamment) il faut que l'utilisateur tomcat est son home directory d'opérationnel : créez le et affectez le à l'utilisateur tomcaet si nécessaire.
| Bloc de code | ||
|---|---|---|
| ||
echo ~tomcat
-> /var/lib/tomcat
mkdir /var/lib/tomcat
chown tomcat /var/lib/tomcat |
On créé ensuite les 2 instances des tomcat ainsi :
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
tomcat10-instance-create -p 8280 -c 8205cd /opt/ wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.48/bin/apache-tomcat-10.1.48.tar.gz tar xzvf apache-tomcat-10.1.48.tar.gz mv apache-tomcat-10.1.48 apache-tomcat-10.1.48-esup-nfc-tag tar xzvf apache-tomcat-10.1.48.tar.gz mv apache-tomcat-10.1.48 apache-tomcat-10.1.48-esup-sgc ln -s apache-tomcat-10.1.48-esup-nfc-tag tomcat-esup-nfc-tag ln -s apache-tomcat-10.1.48-esup-sgc tomcat-esup-sgc rm -Rf /opt/tomcat-esup-sgc/webapps/* mkdir tomcat10-instance-create -p 8380 -c 8305 /opt/tomcat-esup-sgc/webapps/ROOT/ rm -Rf /opt/tomcat-esup-nfc-tag/webapps/* mkdir /nfc-tag |
On modifie ensuite les fichiers server.xml pour activer l'AJP, tomcat10-instance-create ne permettant pas cette option directement.
Pour l'instance d'Esup-SGC, éditer /opt/tomcat-esup-
...
sgc/
...
conf/server.xml afin de configurer le port 8205 et un connecteur AJP sur le port 8209.
Les connecteurs HTTP et HTTPS (ports 8080 et 8443 par défaut) doivent être commentés (ou être configurés sur un autre port pour éviter les conflits avec la seconde instance Tomcat)
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
<Server port="8205" shutdown="SHUTDOWN">
<!-- (...) -->
<Connector port="8209" protocol="AJP/1.3" address="127.0.0.1" redirectPort="8443" asyncTimeout="1200000" tomcatAuthentication="false" scheme="https" secure="true" URIEncoding="UTF-8" secretRequired="false"/> |
Idem pour l'instance d'Esup-NFC-TAG qui utilisera les ports 8305 et 8309.
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
<Server port="8305" shutdown="SHUTDOWN">
<!-- (...) -->
<Connector port="8309" protocol="AJP/1.3" address="127.0.0.1" redirectPort="8443" asyncTimeout="1200000" tomcatAuthentication="false" scheme="https" secure="true" URIEncoding="UTF-8" secretRequired="false"/> |
| Info |
|---|
|
Ces deux instances seront démarrées via Systemd. L'installation via les paquets debian nous propose par défaut une configuration sécurisée où l'instance de tomcat est lancé par un utilisateur banalisé tomcat à qui on octroie des droits de lecture/écriture sur certains répertoires. Les librairies tomcat sont partagées et issues du sytème (et donc mis à jour au travers d'un apt update/upgrade) alors que les configurations, logs, fichiers temporaires et répertoire des applications web (webapps) sont propres à chaque instance.
Aussi le fichier systemd à mettre en place pour chacune des 2 instances n'est pas triviale, mais il suffit de partir de celui proposé pour l'instance du tomcat par défaut (que l'on a par ailleurs désactivé plus haut) pour les obtenir :
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
cp /usr/lib/systemd/system/tomcat10.service /etc/systemd/system/tomcat-esup-sgc.service
cp /usr/lib/systemd/system/tomcat10.service /etc/systemd/system/tomcat-esup-nfc-tag.service
|
Pour Esup-SGC :
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
cat > /etc/systemd/system/tomcat-esup-sgc.service <<EOF
#
# Systemd unit file for Apache Tomcat
#
[Unit]
Description=Apache Tomcat ESUP-SGC Server
Documentation=https://tomcat.apache.org/tomcat-10.0-doc/index.html
After=network.target
RequiresMountsFor=/var/log/tomcat10 /var/lib/tomcat10 /opt/tomcat-esup-sgc
[Service]
# Configuration
Environment="CATALINA_HOME=/usr/share/tomcat10"
Environment="CATALINA_BASE=/opt/tomcat-esup-sgc"
Environment="CATALINA_TMPDIR=/opt/tomcat-esup-sgc/temp"
Environment="JAVA_OPTS=-Djava.awt.headless=true"
# Lifecycle
Type=simple
ExecStart=/bin/sh /usr/libexec/tomcat10/tomcat-start.sh
SuccessExitStatus=143
Restart=on-abort
# Logging
SyslogIdentifier=tomcat-esup-sgc
# Security
User=tomcat
Group=tomcat
PrivateTmp=yes
AmbientCapabilities=CAP_NET_BIND_SERVICE
NoNewPrivileges=true
CacheDirectory=tomcat-esup-sgc
CacheDirectoryMode=750
ProtectSystem=strict
ReadWritePaths=/opt/tomcat-esup-sgc/conf/
ReadWritePaths=/opt/tomcat-esup-sgc/work/
ReadWritePaths=/opt/tomcat-esup-sgc/webapps/
ReadWritePaths=/opt/tomcat-esup-sgc/logs/
ReadWritePaths=/opt/tomcat-esup-sgc/temp/
[Install]
WantedBy=multi-user.target |
Ne pas oublier de donner les droits à tomcat sur /opt/tomcat-esup-sgc et d'activer le service.
| Bloc de code | ||
|---|---|---|
| ||
chown -R tomcat:tomcat /opt/tomcat-esup-sgc/
systemctl enable tomcat-esup-sgc.service |
Même procédure pour Esup-NFC-TAG:
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
cat > /etc/systemd/system/tomcat-esup-nfc-tag.service <<EOF
#
# Systemd unit file for Apache Tomcat
#
[Unit]
Description=Apache Tomcat Esu Nfc Tag Server
Documentation=https://tomcat.apache.org/tomcat-10.0-doc/index.html
After=network.target
RequiresMountsFor=/var/log/tomcat10 /var/lib/tomcat10 /opt/tomcat-esup-nfc-tag
[Service]
# Configuration
Environment="CATALINA_HOME=/usr/share/tomcat10"
Environment="CATALINA_BASE |
Note : Le contenu du dossier webapps est impérativement à supprimer, si vous ne le faites pas l'interface d'administration d'esup-sgc ne s'affichera pas. l'URL /manager rentrera en conflit avec la webapp manager de tomcat livrée par défaut lors du déploiement du serveur tomcat.
Les options Java étant les mêmes pour les deux instances, on peut créer un fichier commun qui sera lu lors du démarrage des tomcat.
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
cat > /opt/esup-env <<EOF
#!/bin/sh
JAVA_OPTS="-Xms256m -Xmx512m"
EOF |
Note: si vous devez utiliser des certificats dont les autorités de certifications ne sont pas reconnus par le trustore par défaut de votre JVM (certificats autosignés par exemple), vous pouvez à ce niveau préciser dans JAVA_OPTS un trustore spécifique (que vous créez vous même) intégrant les autorités de certificats utilisés par les VirtualHosts Apache (ou encore serveurs ldaps).
| Bloc de code | ||
|---|---|---|
| ||
JAVA_OPTS="-Xms256m -Xmx512m -Djavax.net.ssl.trustStore=/opt/esup.univ-ville.jks -Djavax.net.ssl.trustStorePassword=esupesup" |
Ces deux instances seront démarrées via Systemd. On peut donc créer et activer ces deux services:
Pour Esup-SGC:
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
cat > /etc/systemd/system/tomcat-esup-sgc.service <<EOF
# Systemd unit file for tomcat
[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target
[Service]
Type=forking
EnvironmentFile=/opt/esup-env
Environment=CATALINA_PID=/opt/tomcat-esup-sgc/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat-esup-sgc
ExecStart=/opt/tomcat-esup-sgc/bin/startup.sh
ExecStop=/bin/kill -15 $MAINPID
User=esup
Group=esup
[Install]
WantedBy=multi-user.target
EOF
systemctl enable tomcat-esup-sgc.service |
...
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
cat > /etc/systemd/system/tomcat-esup-nfc-tag.service <<EOF # Systemd unit file for tomcat [Unit] Description=Apache Tomcat Web Application Container After=syslog.target network.target [Service] Type=forking EnvironmentFile=/opt/esup-env Environment=CATALINA_PID=/opt/tomcat-esup-nfc-tag/temp/tomcat.pid Environment=CATALINA_HOME=/opt/tomcat-esup-nfc-tag ExecStart" Environment="CATALINA_TMPDIR=/opt/tomcat-esup-nfc-tag/bin/startup.sh ExecStop=/bin/kill -15 $MAINPID User=esup Group=esup [Install] WantedBy=multi-user.target EOF systemctl enable tomcat-esup-nfc-tag.service |
Configuration des Tomcat
Pour l'instance d'Esup-SGC, éditer /opt/tomcat-esup-sgc/conf/server.xml afin de configurer le port 8205 et un connecteur AJP sur le port 8209.
Les connecteurs HTTP et HTTPS (ports 8080 et 8443 par défaut) doivent être commentés (ou être configurés sur un autre port pour éviter les conflits avec la seconde instance Tomcat)
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
<Server port="8205" shutdown="SHUTDOWN">
<!-- (...) -->
<Connector port="8209" protocol="AJP/1.3" redirectPort="8443" asyncTimeout="1200000" tomcatAuthentication="false" scheme="https" secure="true" URIEncoding="UTF-8" secretRequired="false"/> |
...
temp"
Environment="JAVA_OPTS=-Djava.awt.headless=true"
# Lifecycle
Type=simple
ExecStart=/bin/sh /usr/libexec/tomcat10/tomcat-start.sh
SuccessExitStatus=143
Restart=on-abort
# Logging
SyslogIdentifier=tomcat-esup-nfc-tag
# Security
User=tomcat
Group=tomcat
PrivateTmp=yes
AmbientCapabilities=CAP_NET_BIND_SERVICE
NoNewPrivileges=true
CacheDirectory=tomcat-esup-nfc-tag
CacheDirectoryMode=750
ProtectSystem=strict
ReadWritePaths=/opt/tomcat-esup-nfc-tag/conf/
ReadWritePaths=/opt/tomcat-esup-nfc-tag/work/
ReadWritePaths=/opt/tomcat-esup-nfc-tag/webapps/
ReadWritePaths=/opt/tomcat-esup-nfc-tag/logs/
ReadWritePaths=/opt/tomcat-esup-nfc-tag/temp/
[Install]
WantedBy=multi-user.target |
Ne pas oublier de donner les droits à tomcat sur /opt/tomcat-esup-sgc et d'activer le service.
| Bloc de code | ||
|---|---|---|
| ||
chown -R tomcat:tomcat /opt/tomcat-esup-nfc-tag/
systemctl enable tomcat-esup-nfc-tag.service |
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
<Server port="8305" shutdown="SHUTDOWN">
<!-- (...) -->
<Connector port="8309" protocol="AJP/1.3" redirectPort="8443" asyncTimeout="1200000" tomcatAuthentication="false" scheme="https" secure="true" URIEncoding="UTF-8" secretRequired="false"/> |
| Info |
|---|
Configuration d'Apache
Activer les modules suivants:
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
a2enmod rewrite
a2enmod ssl
a2enmod proxy_ajp
a2enmod proxy_http
a2enmod shib
a2enmod headers
|
...
Il reste donc à les intégrer à l'IDP, soit directement, soit en passant par la fédération d'identité., soit directement, soit en passant par la fédération d'identité.
Logs
Suivant votre installation et paramétrage, vous retrouvez les logs dans /opt/tomcat-esup-sgc/logs/ et /opt/tomcat-esup-nfc-tag/logs/
En installant les tomcat comme décrits ici, et les lançant avec systemd, vous pourrez également consulter ces logs via journalct :
| Bloc de code | ||
|---|---|---|
| ||
journalctl -xeu tomcat-esup-sgc.service --follow |
Rotation des logs
Il est possible de mettre en place une rotation journalière des logs. La plupart des distributions fournissent logrotate. Il est donc possible de créer un fichier de config /etc/logrotate.d/esup-sgc avec, par exemple, le contenu suivant:
| Bloc de code | ||
|---|---|---|
| ||
/opt/tomcat-esup-sgc/logs/*log /opt/tomcat-esup-sgc/logs/catalina.out { copytruncate daily missingok rotate 30 compress delaycompress } /opt/tomcat-esup-nfc-tag/logs/*log /opt/tomcat-esup-nfc-tag/logs/catalina.out { copytruncate daily missingok rotate 30 compress delaycompress } |
...
Pour avoir un système de gestion de cartes fonctionnel, l'installation minimale consiste à installer :
...
minimale consiste à installer :
- un serveur tomcat avec l'application web esup-nfc-tag-server sgc : Installation ESUP-NFC-TAG-SERVER
L'ordre d'installation n'a pas d'importance. Toutefois, les deux applications étant dépendentes, la documentation d'installation d'ESUP-SGC comporte des configurations d'ESUP-NFC-TAG-SERVER
Pour enrôler et éventuellement encoder vos cartes vous avez également besoin d'un client esup-sgc-client : voir la documentation [archivé]
Installation materielle
Dans l'application esup-sgc-client, pour l'édition en 2 temps, l'encodage des cartes s'effectue à l'aide de la webcam et du lecteur de carte NFC. La webcam est disposée au dessus du lecteur de cartes de manière à le filmer. Lorsque qu'une carte est placée sur le lecteur la webcam lit le qrcode puis lance l'encodage.
Pour automatiser l'encodage des cartes il est possible d'utiliser une imprimante Zebra ZXP3. voir : Tuto robot encodeur basé sur une Zebra ZXP3
- SGC - Configurations ESUP-SGC et ESUP-NFC-TAG-SERVER
- un serveur tomcat avec l'application web esup-nfc-tag-server : ESUP-NFC-TAG-SERVER
L'ordre d'installation n'a pas d'importance. Toutefois, les deux applications étant dépendentes, la documentation d'installation d'ESUP-SGC comporte des configurations d'ESUP-NFC-TAG-SERVER
Pour enrôler et éventuellement encoder vos cartes vous avez également besoin d'un client esup-sgc-client : voir Pour plus d'informations sur les différentes possibilités d'édition, voir la page ESUP-SGC-Client et édition des cartes
...
