...
Java : nous recommandons l'usage d'openjdk
pour la partie serveur les versions 8 ou 11 17 à 25 (généralement présentes dans les distributions) conviennent,
pour la partie cliente vous pouvez utiliser openjdk et openjfx en version 11 17 ou 12supérieur également.
Maven (dernière version 3.0.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 8 10 : https://tomcat.apache.org/download-8010.cgi (ou jetty 10)
Apache + libapache2-mod-shib2
Git
...
Serveur : 2 CPU, RAM > 2 Go, Disque > 20 Go
Cartes Mifare Desfire EV1 ou , EV2, EV3
- Edition 2 temps :
Un lecteur RFID USB Compatible PC/SC pour encodage
- Une webcam
- Une imprimante à carte.
- Edition 1 temps :
- Une imprimante à carte evolis (primacy) / zebra (zc300) avec lecteur NFC
...
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
apt-get install wget apache2 libapache2-mod-shib git apt-get install postgresql postgresql-contrib |
...
De même il vous faudra maven, que vous pouvez soit installer par paquet (apt -get install maven), soit manuellement depuis http://maven.apache.org/download.cgi
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
apt install openjdk-21-jdk-headless maven |
Installation des instances Tomcat
...
Installer les deux instances de Tomcat. L'une sera utilisée pour ESUP-SGC, l'autre pour ESUP-NFC-TAG.
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 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.
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
| Bloc de code | ||||
| ||||
cd /opt/ wget https://dlcdn.apache.org/tomcat/tomcat-910/v9v10.01.5848/bin/apache-tomcat-910.01.5848.tar.gz tar xzvf apache-tomcat-910.01.5848.tar.gz mv apache-tomcat-910.01.5848 apache-tomcat-910.01.5848-esup-nfc-tag tar xzvf apache-tomcat-910.01.5848.tar.gz mv apache-tomcat-910.01.5848 apache-tomcat-910.01.5848-esup-sgc ln -s apache-tomcat-910.01.5848-esup-nfc-tag tomcat-esup-nfc-tag ln -s apache-tomcat-910.01.5848-esup-sgc tomcat-esup-sgc rm -Rf /opt/tomcat-esup-sgc/webapps/* mkdir /opt/tomcat-esup-sgc/webapps/ROOT/ rm -Rf /opt/tomcat-esup-nfc-tag/webapps/* mkdir /opt/tomcat-esup-nfc-tag/webapps/ROOT/ chown -R esup:esup /opt/apache-tomcat-910.01.5848-esup-sgc/ chown -R esup:esup /opt/apache-tomcat-910.01.5848-esup-nfc-tag/ |
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.
...
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
cat > /opt/esup-env <<EOF
#!/bin/sh
JAVA_HOME=/opt/jdk
#GRADLE_HOME=/usr/local/gradle-2.14.1
#ANDROID_HOME=/usr/local/android-sdk
JAVA_OPTS="-Xms256m -Xmx512m"
EOF |
...
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
a2enmod rewrite a2enmod ssl a2enmod proxy_ajp a2enmod proxy_http a2enmod shib a2enmod expiresheaders a2enmod cache_disk |
Créer un fichier de configuration pour le VirtualHost esup-sgc.univ-ville.fr /etc/apache2/sites-available/esup-sgc.univ-ville.fr.conf
...
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
<VirtualHost *:80>
ServerName esup-sgc.univ-ville.fr
ServerAdmin webmaster@univ-ville.fr
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
RewriteRule ^/(.*)$ https://esup-sgc.univ-ville.fr/$1 [L,R]
</VirtualHost>
<VirtualHost *:443>
ServerName esup-sgc.univ-ville.fr
ServerAdmin webmaster@univ-ville.fr
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/esup-sgc.univ-ville.fr/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/esup-sgc.univ-ville.fr/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/esup-sgc.univ-ville.fr/chain.pem
ProxyPass /Shibboleth.sso !
ProxyPass /secure !
ScriptAlias /secure /var/www/printenv.pl
ShibCompatValidUser Off
<Location /Shibboleth.sso>
SetHandler shib
AuthType None
Require all granted
</Location>
# Security measure: remove any client-supplied REMOTE_USER header early. <Location /shibboleth-sp>
AuthType None
Require all granted
</Location>
Alias /shibboleth-sp/main.css /usr/share/shibboleth/main.css
<Location /secure>
AuthType shibboleth
ShibRequestSetting requireSession 1
require shib-session
ShibUseHeaders On
ShibRequestSetting applicationId default
</Location>
<Location />
AuthType shibboleth
RequestHeader unset REMOTE_USER early
ShibRequestSetting requireSession 1<Location /Shibboleth.sso>
requireSetHandler shib-session
ShibUseHeadersAuthType OnNone
ShibRequestSettingRequire applicationIdall defaultgranted
</Location>
<Location "/resources">/shibboleth-sp>
RequireAuthType allNone
granted
Require ShibRequireSessionall Offgranted
</Location>
<Location "/wsrest"> Alias /shibboleth-sp/main.css /usr/share/shibboleth/main.css
<Location /secure>
Require all granted
AuthType shibboleth
ShibRequireSession Off
</Location>
ShibRequestSetting <Location "/payboxcallback">requireSession 1
Require allrequire grantedshib-session
ShibRequireSessionShibUseHeaders OffOn
</Location>
ProxyPass / ajp://localhost:8209/ ttl=10 timeout=3600 retry=1
ShibRequestSetting applicationId default
<LocationMatch "^/(resources|webjars)"></Location>
ExpiresActive On
<Location />
ExpiresByType text/css "access plus 1 hour"AuthType shibboleth
ExpiresByType text/javascript "accessShibRequestSetting plusrequireSession 1
hour"
require ExpiresByType application/javascript "access plus 1 hour"
shib-session
ShibUseHeaders On
ExpiresByType image/gif "access plus 1 hour"
ShibRequestSetting applicationId default
ExpiresByType image</pngLocation>
"access plus 1<Location hour"/resources">
ExpiresByType image/jpg "accessRequire plus 1 hour"all granted
ExpiresByType image/jpeg "access plus 1 hour" ShibRequireSession Off
</Location>
ExpiresByType<Location application/x-shockwave-flash "access plus 1 hour"
ExpiresByType image/x-icon "access plus 1 hour""/wsrest">
Require all granted
ShibRequireSession Off
</LocationMatch>
Location>
CacheRoot<Location /var/cache/httpd/esup-sgc"/payboxcallback">
CacheDirLevels 2 Require all granted
CacheDirLength 1
ShibRequireSession Off
CacheEnable disk </resourcesLocation>
CacheEnableProxyPass disk /webjars/ ajp://localhost:8209/ ttl=10 timeout=3600 retry=1
AddOutputFilterByType DEFLATE text/plain text/html text/css text/javascript application/x-javascript application/javascript application/json image/svg+xml
</VirtualHost> |
...
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
<VirtualHost *:80>
ServerName esup-nfc-tag.univ-ville.fr
ServerAdmin webmaster@univ-ville.fr
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error_esup-nfc-tag.log
CustomLog ${APACHE_LOG_DIR}/access_esup-nfc-tag.log combined
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
RewriteRule ^/(.*)$ https://esup-nfc-tag.univ-ville.fr/$1 [L,R]
</VirtualHost>
<VirtualHost *:443>
ServerName esup-nfc-tag.univ-ville.fr
ServerAdmin webmaster@univ-ville.fr
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error_esup-nfc-tag.log
CustomLog ${APACHE_LOG_DIR}/access_esup-nfc-tag.log combined
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/esup-nfc-tag.univ-ville.fr/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/esup-nfc-tag.univ-ville.fr/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/esup-nfc-tag.univ-ville.fr/chain.pem
ProxyPass /Shibboleth.sso !
ProxyPass /secure !
ScriptAlias /secure /var/www/printenv.pl
ShibCompatValidUser Off
<Location /Shibboleth.sso>
SetHandler shib
AuthType None
Require all granted
</Location>/www/printenv.pl
<Location /shibboleth-sp>ShibCompatValidUser Off
# Security measure: remove AuthType None
any client-supplied REMOTE_USER header early. Require all granted
</Location>
Alias /shibboleth-sp/main.css /usr/share/shibboleth/main.css
<Location /secure>
AuthType shibboleth
ShibRequestSetting requireSession 1
require shib-session
ShibUseHeaders On
ShibRequestSetting applicationId esup-nfc-tag
</Location>
<Location /manager>
AuthType shibboleth
ShibRequestSetting requireSession 1
require shib-session
ShibUseHeaders On
RequestHeader unset REMOTE_USER early
ShibRequestSetting applicationId esup-nfc-tag<Location /Shibboleth.sso>
</Location>
<LocationSetHandler /admin>shib
AuthType shibbolethNone
ShibRequestSettingRequire requireSessionall 1granted
</Location>
require<Location shib-session/shibboleth-sp>
AuthType None
ShibUseHeadersRequire all Ongranted
</Location>
ShibRequestSetting applicationId esup-nfc-tag
</Location>Alias /shibboleth-sp/main.css /usr/share/shibboleth/main.css
<Location /nfc>secure>
AuthType shibboleth
ShibRequestSetting requireSession 1
require shib-session
ShibUseHeaders On
ShibRequestSetting applicationId esup-nfc-tag
</Location>
ProxyPass<Location / ajp://localhost:8309/ ttl=10 timeout=3600 retry=1
manager>
<Location "/resources">AuthType shibboleth
ShibRequestSetting ExpiresActiverequireSession On1
require shib-session
ExpiresByType text/css "access plus 1ShibUseHeaders hour"On
ShibRequestSetting ExpiresByType text/javascript "access plus 1 hour"applicationId esup-nfc-tag
</Location>
<Location /admin>
ExpiresByType application/javascript "access plus 1AuthType hour"shibboleth
ShibRequestSetting requireSession ExpiresByType1
image/gif "access plus 1 hour"
require shib-session
ExpiresByType image/png "access plus 1ShibUseHeaders hour"On
ShibRequestSetting ExpiresByType image/jpg "access plus 1 hour"applicationId esup-nfc-tag
</Location>
<Location /nfc>
ExpiresByType image/jpeg "access plus 1AuthType hour"shibboleth
ExpiresByType application/x-shockwave-flash "access plus 1 hour"
ShibRequestSetting requireSession 1
require shib-session
ExpiresByType image/x-icon "access plus 1ShibUseHeaders hour"On
</Location>
CacheRoot /var/cache/httpd/ShibRequestSetting applicationId esup-nfc-tag
CacheDirLevels 2</Location>
CacheDirLengthProxyPass 1
CacheEnable disk /resources/ ajp://localhost:8309/ ttl=10 timeout=3600 retry=1
AddOutputFilterByType DEFLATE text/plain text/html text/css text/javascript application/x-javascript application/javascript application/json image/svg+xml
</VirtualHost> |
...
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
<ApplicationDefaults entityID="https://esup-sgc.univ-ville.fr" ...>
<Sessions ...>
<!--
<SSO entityID="https://idp.univ-ville.fr/idp/shibboleth">
SAML2 SAML1
</SSO>
-->
<SSO location="/"
discoveryProtocol="SAMLDS" discoveryURL="https://"
discovery.renater.fr/renater"> discoveryProtocol="SAMLDS" discoveryURL="https://discovery.renater.fr/renater">
SAML2 SAML1
SAML2 SAML1
</SSO> |
Concernant la gestion des sessions, obligez l'usage de https pour les cookies mais permettez un changement d'IP de l'utilisateur (certains fournisseurs d'accès internet bas coût ne fixe pas les IPs de leurs clients en mobile) : checkAddress et consistentAddress doivent être à false.
Exemple :
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
<Sessions lifetime="28800" timeout="3600" relayState="ss:mem" checkAddress="false" consistentAddress="false" handlerSSL="true" cookieProps="https" </SSO> redirectLimit="exact"> |
Penser à modifier le contact du support:
...