Arborescence des pages

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.

...

ESUP-SGC inclut également son propre client pour l’encodage des cartes (esup-sgc-client) qui est en fait également client d'esup-nfc-tag-server.

L’encodage via esup-sgc-client se passe de cette manière :

  • Edition en 2 temps : 
    • lecture du QR code présent sur la carte (identifiant l’individu à encoder) ; la carte ayant été imprimée depuis l'interface web d'esup-sgc via un navigateur web

    • association de la carte avec l’individu dans le SGC

    • encodage des différentes applications DESFIRE telles que décrites dans le fichier de configuration d'ESUP-NFC-TAG-SERVER

    • ... et optionnellement (on recommande plutôt d'acheter des cartes pré-encodés IZLY)  encodage de l’application IZLY (CROUS) via ESUP-NFC-TAG-SERVER en utilisant la clé SAM du CNOUS et des DLL Windows

 

 

  • Edition en 1 temps : 
    • sélection de la carte à imprimer et encoder depuis l'interface web d'esup-sgc via un navigateur web
    • impression de la carte

    • association de la carte avec l’individu dans le SGC et encodage des différentes applications DESFIRE telles que décrites dans le fichier de configuration d'ESUP-NFC-TAG-SERVER

    • ... et optionnellement (on recommande plutôt d'acheter des cartes pré-encodés IZLY)  encodage de l’application IZLY (CROUS) via ESUP-NFC-TAG-SERVER en utilisant la clé SAM du CNOUS et des DLL Windows




Schéma d’architecture de la solution

...

  • Java : nous recommandons l'usage d'openjdk 

    • pour la partie serveur les versions 8 ou 11 ou 17 (généralement présentes dans les distributions) conviennent)

    • pour la partie cliente vous pouvez utiliser openjdk et openjfx en version 11 ou 1217.

  • Maven (dernière version 3.0.x) : http://mavenle 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 .5 ou 9 (Tomcat 10 n'est pas supporté) : https://tomcat.apache.org/download-8090.cgi

  • Apache + libapache2-mod-shib2

  • Git

...

  • Serveur : 2 CPU, RAM > 2 Go, Disque > 20 Go

  • Cartes Mifare Desfire EV1 ou EV2

  • Edition 2 temps : 
    • Un lecteur RFID USB Compatible PC/SC pour encodage

    • Une webcam 
    • Une imprimante à carte.
  • Edition 1 temps : Cartes Mifare Desfire EV1 ou EV2
    • Une imprimante à carte
    .
    • evolis (primacy) / zebra (zc300) avec lecteur NFC

A cela, un Smartphone Android > 5 avec lecteur NFC peut également s'avérer utile par exemple. 


Installation des pré-requis

...

Bloc de code
languagebash
themeRDark
apt-get install wget apache2 libapache2-mod-shib2shib git
apt-get install postgresql postgresql-contrib

...

Installer les deux instances de Tomcat. L'une sera utilisée pour ESUP-SGC, l'autre pour ESUP-NFC-TAG. 


Bloc de code
languagebash
themeRDark
cd /opt/
wget httphttps://dlcdn.apache.crihan.fr/dist/org/tomcat/tomcat-89/v8v9.50.2458/bin/apache-tomcat-89.50.2458.tar.gz
tar xzvf apache-tomcat-89.50.2458.tar.gz
mv apache-tomcat-89.50.2458 apache-tomcat-89.50.2458-esup-nfc-tag

tar xzvf apache-tomcat-89.50.2458.tar.gz
mv apache-tomcat-89.50.2458 apache-tomcat-89.50.2458-esup-sgc

ln -s apache-tomcat-89.50.2458-esup-nfc-tag tomcat-esup-nfc-tag
ln -s apache-tomcat-89.50.2458-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-89.50.2458-esup-sgc/
chown -R esup:esup /opt/apache-tomcat-89.50.2458-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.

...

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
languagebash
themeRDark
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

 



Pour Esup-NFC-TAG:

 


Bloc de code
languagebash
themeRDark
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=/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

...

Bloc de code
languagexml
themeRDark
<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"/>


Idem pour l'instance d'Esup-NFC-TAG qui utilisera les ports 8305 et 8309.

Bloc de code
languagexml
themeRDark
<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
  • Le tomcatAuthentication à false est indispensable pour que l'authentification shibboleth via le frontal apache et mod_shib fonctionne.
  • L'attribut asyncTimeout est donné en milli-secondes (1200000 pour 20 minutes) - esup-sgc et esup-nfc-tag utilisent la technique de long polling lors du badgeage de cartes ; c'est aussi ce qui explique le fait que l'on mette un timeout de 3600 secondes au niveau des ProxyPass Apache (les timeout des ProxyPass Apache doivent être plus grands que les asyncTimeout des tomcat).

...


Configuration d'Apache

Activer les modules suivants:

Bloc de code
languagebash
themeRDark
a2enmod rewrite
a2enmod ssl
a2enmod proxy_ajp
a2enmod proxy_http
a2enmod shib2shib


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
languagexml
themeRDark
<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>
    <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
        ShibRequestSetting requireSession 1
        require shib-session
        ShibUseHeaders On
        ShibRequestSetting applicationId default
    </Location>
   <Location "/resources">
        Require all granted
        ShibRequireSession Off
   </Location>
   <Location "/wsrest">
       Require all granted
       ShibRequireSession Off
   </Location>
   <Location "/payboxcallback">
       Require all granted
       ShibRequireSession Off
   </Location>

   ProxyPass / ajp://localhost:8209/ ttl=10 timeout=3600 retry=1

   <LocationMatch "^/(resources|webjars)">
      ExpiresActive On
      ExpiresByType text/css "access plus 1 hour"
      ExpiresByTypeAddOutputFilterByType DEFLATE text/plain text/html text/css text/javascript "access plus 1 hour"
      ExpiresByType application/javascript "access plus 1 hour"
      ExpiresByType image/gif "access plus 1 hour"
      ExpiresByType image/png "access plus 1 hour"
      ExpiresByType image/jpg "access plus 1 hour"
      ExpiresByType image/jpeg "access plus 1 hour"
      ExpiresByType application/x-shockwave-flash "access plus 1 hour"
      ExpiresByType image/x-icon  "access plus 1 hour"
   </LocationMatch>

   CacheRoot /var/cache/httpd/esup-sgc
   CacheDirLevels 2
   CacheDirLength 1
   CacheEnable disk /resources

   AddOutputFilterByType DEFLATE text/plain text/html text/css text/javascript application/x-javascript application/javascript application/json image/svg+xml


</VirtualHost>

 

Idem pour le VirtualHost esup-nfc-tag.univ-ville.fr dans /etc/apache2/sites-available/esup-nfc-tag.univ-ville.fr.conf

...

languagexml
themeRDark

...

application/x-javascript application/javascript application/json image/svg+xml


</VirtualHost>


Idem pour le VirtualHost esup-nfc-tag.univ-ville.fr

...

dans /etc/

...

apache2/sites-available/esup-nfc-tag.univ-ville.fr.conf

Bloc de code
languagexml
themeRDark
<VirtualHost *:80>/chain.pem

    ProxyPass /Shibboleth.sso !
    ProxyPass /secure !
    ScriptAlias /secure /var/www/printenv.pl
    ShibCompatValidUser Off
    <Location /Shibboleth.sso>
    ServerName esup-nfc-tag.univ-ville.fr
    SetHandler shibServerAdmin webmaster@univ-ville.fr
    DocumentRoot /var/www/html
   AuthType None
ErrorLog  ${APACHE_LOG_DIR}/error_esup-nfc-tag.log
    CustomLog  Require all granted
    </Location>
    <Location /shibboleth-sp>${APACHE_LOG_DIR}/access_esup-nfc-tag.log combined
    RewriteEngine On
    RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
    RewriteRule .* - [F]
 AuthType None
  RewriteRule ^/(.*)$   https://esup-nfc-tag.univ-ville.fr/$1  Require all granted
 [L,R]
</VirtualHost>

<VirtualHost *:443>
     </Location>ServerName esup-nfc-tag.univ-ville.fr
    AliasServerAdmin /shibboleth-sp/main.css /usr/share/shibboleth/main.csswebmaster@univ-ville.fr
    <LocationDocumentRoot /var/www/secure>html
    ErrorLog  ${APACHE_LOG_DIR}/error_esup-nfc-tag.log
  AuthType shibboleth
 CustomLog ${APACHE_LOG_DIR}/access_esup-nfc-tag.log combined
    SSLEngine ShibRequestSetting requireSession 1on
    SSLCertificateFile    require shib-session/etc/letsencrypt/live/esup-nfc-tag.univ-ville.fr/cert.pem
        ShibUseHeaders OnSSLCertificateKeyFile /etc/letsencrypt/live/esup-nfc-tag.univ-ville.fr/privkey.pem
    SSLCertificateChainFile    ShibRequestSetting applicationId /etc/letsencrypt/live/esup-nfc-tag.univ-ville.fr/chain.pem

    ProxyPass </Location>Shibboleth.sso !
    <LocationProxyPass /manager>secure !
    ScriptAlias    AuthType shibboleth/secure /var/www/printenv.pl
    ShibCompatValidUser Off
   ShibRequestSetting requireSession 1<Location /Shibboleth.sso>
        requireSetHandler shib-session
        ShibUseHeadersAuthType OnNone
        ShibRequestSettingRequire applicationId esup-nfc-tagall granted
    </Location>
    <Location /admin>shibboleth-sp>
        AuthType shibbolethNone
        ShibRequestSettingRequire requireSessionall 1granted
        require shib-session</Location>
        ShibUseHeaders On
        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>
    <Location /manager>
    ProxyPass / ajp://localhost:8309/ ttl=10 timeout=3600 retry=1


 AuthType shibboleth
        ShibRequestSetting <Location "/resources">requireSession 1
        ExpiresActiverequire On
shib-session
        ShibUseHeaders On
     ExpiresByType text/css "access plusShibRequestSetting 1 hour"applicationId esup-nfc-tag
    </Location>
    ExpiresByType<Location text/javascriptadmin>
 "access plus 1 hour"
    AuthType shibboleth
   ExpiresByType application/javascript "access plus 1 hour"
ShibRequestSetting requireSession 1
      ExpiresByType image/gif "access plus 1 hour"require shib-session
        ExpiresByType image/png "access plus 1 hour"ShibUseHeaders On
        ExpiresByTypeShibRequestSetting image/jpg "access plus 1 hour"applicationId esup-nfc-tag
    </Location>
    ExpiresByType<Location image/jpeg "access plus 1 hour"
  nfc>
        AuthType shibboleth
      ExpiresByType application/x-shockwave-flash "access plus 1 hour" ShibRequestSetting requireSession 1
        ExpiresByTyperequire image/x-iconshib-session
      "access plus 1ShibUseHeaders hour"On
    </Location>

    ShibRequestSetting CacheRoot /var/cache/httpd/applicationId esup-nfc-tag
    CacheDirLevels 2</Location>

    CacheDirLength 1
 ProxyPass /  CacheEnable disk /resourcesajp://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>

...


A noter que l'applicationId du ShibRequestSetting diffère selon les VirtualHosts.
De plus, dans cet exemple, chaque VirtualHost dispose de son propre certificat. Il est tout à fait possible d'utiliser le même sous-réserve que les noms des deux VirtualHosts y soient indiqués (SAN).

...

Bloc de code
languagexml
themeRDark
    <RequestMapper type="Native">
        <RequestMap applicationId="default">
            <Host name="esup-nfc-tag.univ-ville.fr" applicationId="esup-nfc-tag" authType="shibboleth" requireSession="false"/>
            <Host name="esup-sgc.univ-ville.fr" applicationId="esup-sgc" authType="shibboleth" requireSession="false"/>
        </RequestMap>
    </RequestMapper>

...


Configurer la balise SSO pour utiliser le WAYF de Renater (ou un Idp par défaut sinon, cf variante en commentaires) :

Bloc de code
languagexml
themeRDark
    <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">                                                                                                                         
              SAML2 SAML1                                                                                                                                                                                          
            </SSO>

 


Penser à modifier le contact du support:

Bloc de code
languagexml
themeRDark
<Errors supportContact="sysadmin@univ-ville.fr"

 


Votre fournisseur de Metadata Renater (ou directement l'IDP - variante donnée en commentaires ; si vous n'utilisez pas la fédération Renater ...) - notez ici l'usage du "Whitelist" sur la fédération Renater :
Attention si vous avez un sp en version 3, uri="https://xx" est ignoré et il faut mettre url= !!! L'erreur étant peu évidente à comprendre, c'est 1/2 journée perdue

Bloc de code
languagexml
themeRDark
    <!--    
	<MetadataProvider type="XML" validate="true"
              url="https://idp.univ-ville.fr/idp/shibboleth"
              backingFilePath="idp.univ-ville.fr-metadata.xml">
        </MetadataProvider>
	-->
 <MetadataProvider type="XML" url="https://metadata.federation.renater.fr/renater/main/main-idps-renater-metadata.xml" backingFilePath="/etc/shibboleth/metadatas/main-idps-renater-metadata.xml" reloadInte\
rvalreloadInterval="7200">
               <MetadataFilter type="RequireValidUntil" maxValidityInterval="2419200"/>
	       <MetadataFilter type="Signature" certificate="renater-metadata-signing-cert-2016.pem"/>
	       <MetadataFilter type="Whitelist">
                 <Include>urn:mace:cru.fr:federation:univ-rouen.fr</Include>
                 <Include>https://shibboleth.insa-rouen.fr/idp/shibboleth</Include>
		</MetadataFilter>
 </MetadataProvider>

...


Et enfin, avant la fermeture de la balise ApplicationDefaults, rajoutez un ApplicationOverride. Dans notre cas, le VirtualHost esup-sgc.univ-ville.fr utilisera le default, on utilisera un id spécifique pour esup-nfc-tag:

Bloc de code
languagexml
themeRDark
        <ApplicationOverride id="esup-nfc-tag" entityID="https://esup-nfc-tag.univ-ville.fr/shibboleth"/>

 


Les Metadata doivent à présent être téléchargeables à ces adresses:

...

Bloc de code
themeRDark
/opt/tomcat-esup-sgc/logs/catalina.out {
        copytruncate
        daily
        missingok
        rotate 30
        compress
        delaycompress
}
/opt/tomcat-esup-nfc-tag/logs/catalina.out {
        copytruncate
        daily
        missingok
        rotate 30
        compress
        delaycompress
}

 


Sous Debian, il est également possible d'éditer le fichier /var/lib/logrotate/status pour déterminer plus précisément la date de rotation (ceci est utile dans le cas d'une utilisation de lvm2 par exemple).

...

Pour enrôler et éventuellement encoder vos cartes vous avez également besoin d'un client esup-sgc-client : voir la documentation Clients ESUP-SGC-CLIENT v2.0[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

Pour plus d'informations sur les différentes possibilités d'édition, voir la page ESUP-SGC-Client et édition des cartes

Éléments optionnels

Vous pouvez également mettre en place les applications Esup-nfc-tag-desktop et Esup-nfc-tag-droid :

...