...
Nous vous invitons par exemple à visionner la dernière présentation actuellement en date : la présentation "ESUP-SGC, Système de Gestion de Cartes sur-mesure pour l'ESR" proposée aux JRES proposée aux JRES 2019 à Dijon → → Vidéo / Diaporama / Article.
Nous hésitons à passer sur ESUP-SGC ...
...
En conclusion, gardez à l'esprit qu'en tant que communauté et développeurs d'ESUP-SGC, nous n'avons aucun intérêt à vous convaincre de passer à ESUP-SGC si vous n'avez tout simplement pas l'envie, la motivation, la volonté d'adhérer à ce projet ; on serait très embêtés (en plus d'être étonnés tout de même ) qu'ESUP-SGC vous donne moins de satisfaction que votre ancienne solution !
De quel matériel ai-je besoin ?
En plus des applications web à installer sur un serveur, il vous faut pour éditer des cartes :
- des cartes Mifare DesfireEV1 ou EV2
- un PC sous linux ou windows (l'encodeur ne fonctionne actuellement pas sous MAC OS)
- une imprimante à carte plastique ps/pcl (exemples : evolis primacy, zebra zxp7, fargo, ...)
- une webcam
- un lecteur de carte pc/sc (exemple : Identiv UTrust 3700 F)
L'impression des cartes nécessite de faire deux passages de carte ?
Avant la version 2 d'esup-sgc, et contrairement aux autres Systèmes de Gestion de Cartes, ESUP-SGC ne permettait effectivement pas d'imprimer et encoder la carte en 1 seul passage dans une imprimante à cartes disposant d'un lecteur/encodeur NFC.
Dans ESUP-SGC, et avec le fonctionnement historique issu de sa version 1, une carte est d'abord imprimée par une imprimante à carte, puis celle-ci est encodée dans un second temps (voir à ce propos la vidéo ESUP-SGC - demande de carte, impression, encodage et activation).
C'est un choix qui avait été fait dès l'étude préliminaire, en toute conscience, avant même la conception du SGC.
A ce sujet, voir le document "ESUP-SGC : UN SGC LIBRE", Juin 2017.
Pour les établissements utilisant des SGC propriétaires, la mise en oeuvre des API propriétaires des imprimantes à cartes peut en effet poser quelques problèmes : instabilité des drivers, imprimante spécifique imposée, code/librairie non évolutif lié à un environnement logiciel donné, nombre de pannes/erreurs potentielles élevée, nombre de rejets élevé, code fermé, coûts plus élevés, maintenance plus compliquée, temps de mise en oeuvre et de manutention plus important à l'usage. Pour les SGC propriétaires du marché, ces difficultés de mise en oeuvre peuvent en partie être traitées par les prestataires/éditeurs au travers de différentes prestations : achat d'imprimantes spécifiques au travers du prestataire (vente liée), contrat de maintenance matérielle, contrat de maintenance logicielle, formation d'installation, dépannage ponctuelle, montée de version logicielle, migration de codes sur une nouvelle version d'imprimantes, etc. Ces prestations font partie intégrante du modèle économique et ne posent de fait pas de problème aux éditeurs. Pour un SGC libre, la situation est toute autre ; pour que le modèle de développement et de mutualisation autour du logiciel libre tienne, on minimise au maximum les problèmes côté des établissements pour faire en sorte que leurs installations fonctionnent avec un minimum de support (stabilité, autonomie, indépendance notamment matérielle), il en découle un certain nombre de choix très pragmatiques, notamment celui de fonctionner au maximum sur des standards. Ainsi pour l'impression des cartes on proposait par défaut de se baser uniquement sur ps/pcl et pour l'encodage on utilise pc/sc ; ce qui impliquait d'imprimer et d'encoder la carte en 2 actions bien distinctes.
Sur le papier, cette spécificité peut paraître moins intéressante que l'impression+encodage en 1 passe.
Aussi, pour les établissements qui éditent une quantité conséquente de cartes à imprimer/encoder tous les ans (l'Université de Rouen Normandie qui a développé ESUP-SGC accueille 35.000 étudiants), en plus d'utiliser des imprimantes à cartes performantes pour l'impression (le fait de n'être pas lié à une API propriétaire spécifique permet de choisir l'imprimante que vous souhaitez), on peut proposer d'utiliser une imprimante (avec lecteur nfc permettant l'encodage) pour procéder à l'encodage dans un second temps en utilisant les possibilités de chargement et d'encodage de l'imprimante par lot.
Actuellement on propose un tel "robot d'encodage" via un code spécifique à l'imprimante zxp3 de zebra. Dans le cadre de l'utilisation d'un autre type d'imprimante pour mettre en place cet encodage par lot, il faudra(it) porter le code sur l'API propriétaire spécifique à l'image que ce qui a été fait pour la zxp3 : https://github.com/EsupPortail/esup-sgc-client/tree/univ-rouen-robot-zxp3
Cependant, et depuis la version 2.0 d'esup-sgc financée en partie via l'Appel À Projets Services Numériques Aux Étudiants ESUP-SGC 2022/2023, esup-sgc est également capable d'éditer une carte en un seul passage !
La réponse à cettequestion est donc maintenant non : à l'instar des SGC du marché, esup-sgc vous permet aujourd'hui d'éditer les cartes en imprimant et encodant dans le même temps chaque carte et c'est maintenant cette possibilité que l'on met en avant, notre implémentation sur les métériels evolis comme zebra étant parfaitement stable et efficace.
esup-sgc garde néanmoins la possibilité d'éditer les cartes en 2 temps et conserve cette spécificité de pouvoir être indépendant de tout matériel car utilisable avec n'importe quelle imprimante du marché (matériel passé ou à venir).
Voir à ce propos ESUP-SGC-Client et édition des cartes
Est-ce qu'ESUP-SGC est pensé pour être "multi-établissements" ?
Oui, une page dédiée à cette question est proposée sur ce WIKI.
Dans le cadre de l'usage de plusieurs SGC pour un même projet de cartes (multi-instances pour du multi-établissements), est il possible de paramétrer un générateur d'identifiants de carte pour le contrôle d'accès pour que chaque instance ait une plage (range) dédiée ?
Oui, cette possibilité est à configurer via cardIdService comme décrit sur ce même wiki ici.
Est-ce qu'ESUP-SGC est configurable pour s'adapter à mon établissement ? Combien et quels établissements l'utilisent actuellement ?
ESUP-SGC a été développé et imaginé dès le départ pour être déployé dans les différents établissements de la COMUE Normandie Université.
Ainsi, depuis 2018, des instances d'esup-sgc sont en production dans des écoles privées, publiques, des universités de petite et grande taille, une COMUE : la Normandie compte ainsi plusieurs instances d'ESUP-SGC en production depuis 2018 pour des établissements gérant leur SI avec les produits de l'AMUE, de Cocktail ou autre. L'instance de la COMUE est multi-tenants, et l'ensemble correspond à un projet multi-établissements ; voir la page wiki esup-sgc Multi Etablissements.
Depuis 2018, d'autres établissements ont adopté esup-sgc, notamment grâce à l'Appel À Projets Services Numériques Aux Étudiants ESUP-SGC 2022/2023.
En 2024, on compte ainsi près de 20 établissements qui utilisent ESUP-SGC en production.
De quel matériel ai-je besoin ?
En plus des applications web à installer sur un serveur, il vous faut pour éditer des cartes :
- des cartes Mifare Desfire (EV1, EV2, EV3, ... actuellement les établissements utilisent tous des EV3)
- un PC sous linux ou windows ou un MAC OS
- une imprimante à carte plastique ps/pcl (exemples : evolis primacy, zebra zxp7, fargo, ...)
- une webcam
- un lecteur de carte pc/sc (exemple : Identiv UTrust 3700 F)
L'impression des cartes nécessite de faire deux passages de carte ?
Avant la version 2 d'esup-sgc, et contrairement aux autres Systèmes de Gestion de Cartes, ESUP-SGC ne permettait effectivement pas d'imprimer et encoder la carte en 1 seul passage dans une imprimante à cartes disposant d'un lecteur/encodeur NFC.
Dans ESUP-SGC, et avec le fonctionnement historique issu de sa version 1, une carte est d'abord imprimée par une imprimante à carte, puis celle-ci est encodée dans un second temps (voir à ce propos la vidéo ESUP-SGC - demande de carte, impression, encodage et activation).
C'est un choix qui avait été fait dès l'étude préliminaire, en toute conscience, avant même la conception du SGC.
A ce sujet, voir le document "ESUP-SGC : UN SGC LIBRE", Juin 2017.
Pour les établissements utilisant des SGC propriétaires, la mise en oeuvre des API propriétaires des imprimantes à cartes peut en effet poser quelques problèmes : instabilité des drivers, imprimante spécifique imposée, code/librairie non évolutif lié à un environnement logiciel donné, nombre de pannes/erreurs potentielles élevée, nombre de rejets élevé, code fermé, coûts plus élevés, maintenance plus compliquée, temps de mise en oeuvre et de manutention plus important à l'usage. Pour les SGC propriétaires du marché, ces difficultés de mise en oeuvre peuvent en partie être traitées par les prestataires/éditeurs au travers de différentes prestations : achat d'imprimantes spécifiques au travers du prestataire (vente liée), contrat de maintenance matérielle, contrat de maintenance logicielle, formation d'installation, dépannage ponctuelle, montée de version logicielle, migration de codes sur une nouvelle version d'imprimantes, etc. Ces prestations font partie intégrante du modèle économique et ne posent de fait pas de problème aux éditeurs. Pour un SGC libre, la situation est toute autre ; pour que le modèle de développement et de mutualisation autour du logiciel libre tienne, on minimise au maximum les problèmes côté des établissements pour faire en sorte que leurs installations fonctionnent avec un minimum de support (stabilité, autonomie, indépendance notamment matérielle), il en découle un certain nombre de choix très pragmatiques, notamment celui de fonctionner au maximum sur des standards. Ainsi pour l'impression des cartes on proposait par défaut de se baser uniquement sur ps/pcl et pour l'encodage on utilise pc/sc ; ce qui impliquait d'imprimer et d'encoder la carte en 2 actions bien distinctes.
Sur le papier, cette spécificité peut paraître moins intéressante que l'impression+encodage en 1 passe.
Aussi, pour les établissements qui éditent une quantité conséquente de cartes à imprimer/encoder tous les ans (l'Université de Rouen Normandie qui a développé ESUP-SGC accueille 35.000 étudiants), en plus d'utiliser des imprimantes à cartes performantes pour l'impression (le fait de n'être pas lié à une API propriétaire spécifique permet de choisir l'imprimante que vous souhaitez), on peut proposer d'utiliser une imprimante (avec lecteur nfc permettant l'encodage) pour procéder à l'encodage dans un second temps en utilisant les possibilités de chargement et d'encodage de l'imprimante par lot.
Actuellement on propose un tel "robot d'encodage" via un code spécifique à l'imprimante zxp3 de zebra. Dans le cadre de l'utilisation d'un autre type d'imprimante pour mettre en place cet encodage par lot, il faudra(it) porter le code sur l'API propriétaire spécifique à l'image que ce qui a été fait pour la zxp3 : https://github.com/EsupPortail/esup-sgc-client/tree/univ-rouen-robot-zxp3
Cependant, et depuis la version 2.0 d'esup-sgc financée en partie via l'Appel À Projets Services Numériques Aux Étudiants ESUP-SGC 2022/2023, esup-sgc est également capable d'éditer une carte en un seul passage !
La réponse à cettequestion est donc maintenant non : à l'instar des SGC du marché, esup-sgc vous permet aujourd'hui d'éditer les cartes en imprimant et encodant dans le même temps chaque carte et c'est maintenant cette possibilité que l'on met en avant, notre implémentation sur les métériels evolis comme zebra étant parfaitement stable et efficace.
esup-sgc garde néanmoins la possibilité d'éditer les cartes en 2 temps et conserve cette spécificité de pouvoir être indépendant de tout matériel car utilisable avec n'importe quelle imprimante du marché (matériel passé ou à venir).
Voir à ce propos ESUP-SGC-Client et édition des cartes
Est-ce qu'ESUP-SGC est pensé pour être "multi-établissements" ?
Oui, une page dédiée à cette question est proposée sur ce WIKI.
Dans le cadre de l'usage de plusieurs SGC pour un même projet de cartes (multi-instances pour du multi-établissements), est il possible de paramétrer un générateur d'identifiants de carte pour le contrôle d'accès pour que chaque instance ait une plage (range) dédiée ?
Oui, cette possibilité est à configurer via cardIdService comme décrit sur ce même wiki ici.
Est-ce qu'ESUP-SGC a été pensé pour respecter Est-ce qu'ESUP-SGC a été pensé pour respecter le RGPD ?
Oui, une page dédiée à cette question est proposée sur ce WIKI.
...
Pris en compte uniquement si PRINTER_ROLE_CONFIG (dans admin < configurations) est cochée :
- seuls les managers (ROLE_SUPER_MANAGER ou ROLE_MANAGER_XYZ) ayant en plus le ROLE_PRINTER (édition en 2 passes) peuvent imprimer une carte.
A noter que pour l'édition en 1 passe, l'affectation des managers à une imprimante via eppn ou groupe suffit.
ROLE_LIVREUR
La vue "Manager" est disponible en lecture seule mais ne donne accès à aucune fiche en consultation (si il n'y a pas en plus ).
...
Est-ce que ESUP-SGC support l'impression du verso en plus du recto de la carte ?
Nous n'avons pas travaillé sur ce sujet actuellement, aussi l'édition en 2 passes n'a pas été testé en ce sens, et encore moins l'édition en 1 passe qui demanderait pour un tel support une adaptation des développements.
En l'état, la réponse est donc qe non, ESUP-SGC ne supporte pas l'impression recto/verso des cartes, il ne propose d'imprimer que le recto de la carteOui, à partir de la version 2.3.0 (en cours de finalisation pour été 2024) esup-sgc supporte l'édition de cartes en recto-verso, ce à la fois lors de l'édition en 1 temps (recommandé) que l'édition en 2 temps.
Comment faire une demande de carte en utilisant le webservice proposé par ESUP-SGC ?
...
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
accessRestrictionWSRestApi=hasIpAddress('127.0.0.1') or hasIpAddress('192.168.1.39') or hasIpAddress('192.168.22.0/24') |
Comment passer la carte d'un état à un autre via web-service ?
Le passage d'un état à un autre d'une carte peut se faire via l'appel à un webservice. Cet appel ressemble à ceci :
Lors de cet appel au WebService, les paramètres possibles correspondent en réalité à l'ensemble des attributs d'une Carte au sens Java. On peut déduire ces paramètres du code Java lui-même donné ici : https://github.com/EsupPortail/esup-sgc/blob/master/src/main/java/org/esupportail/sgc/domain/Card.java
Exemple d'appel WEB-Service spécifiant le CSN et le numéro de contrôle d'accès dans le cadre où on souhaiterait 'importer' des cartes éditées par une autre solution :
| Bloc de code | ||||
|---|---|---|---|---|
| Bloc de code | ||||
| ||||
curl -F "desfireIds[access-control]=12340000000125" -F "csn=0479CDE56F1490" -d "etat=REQUEST_CHECKED -F "eppn=toto@univ-ville.fr" -F "difPhotoTransient=true" -F "crousTransient=true" -F "europeanTransient=true" -F "PhotoFile.file=@/tmp/toto.jpeg" https://esup-sgc.univ-ville.fr/wsrest/api/setCardEtat/1818864 |
Où 1818864 est l'id de la carte. Cet appel retourne true ou false suivant que la commande a réussi ou échoué.
Notez qu'on peut donc ici spécifier l'etat dans lequel on souhaiterait voir la carte éditée (-F "etat=ENCODED" par exemple) mais suivre le cycle de vie de la carte peut cependant être préférable pour pouvoir
bénéficier des appels de fonctions entre les transitions de la carte (positionnement des rectos imprimés, envoi d'email, activation de la carte) : d'autant qu'une fois la demande créee, on peut aussi passer les changements d'états par WS également.
Comment passer la carte d'un état à un autre via web-service ?
Le passage d'un état à un autre d'une carte peut se faire via l'appel à un webservice. Cet appel ressemble à ceci :
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
curl -d "etat=REQUEST_CHECKED" https://esup-sgc.univ-ville.fr/wsrest/api/setCardEtat/1818864 |
Où 1818864 est l'id de la carte. Cet appel retourne true ou false suivant que la commande a réussi ou échoué.
Ainsi, si on veut par exemple demander une carte par web-service et valider aussitôt cette demande, il faudra appeler le web service Ainsi, si on veut par exemple demander une carte par web-service et valider aussitôt cette demande, il faudra appeler le web service de la question précédente suivie de celui-ci.
...
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import requests
api_url = "https://esup-sgc.univ-ville.fr/wsrest/api"
response = requests.post(api_url, data={"eppn":"toto@univ-ville.fr"}, files={"PhotoFile.file":("photo-toto.png", open("/tmp/photo-toto.png","rb"), "image/png")})
card_id = response.text
response = requests.post("%s/setCardEtat/%s" % (api_url, card_id), data={"etat":"REQUEST_CHECKED"})
print(response.text) |
...
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import requests api_url = "https://esup-sgc.univ-ville.fr/wsrest/api" response = requests.post(api_url, data={"eppn":"toto@univ-ville.fr"}, files={"PhotoFile.file":("photo-toto.png", open("/tmp/photo-toto.png","rb"), "image/png")}) card_id = response.text requests.post("%s/setCardEtat/%s" % (api_url, card_id), data={"etat":"REQUEST_CHECKED"}) requests.post("%s/setCardEtat/%s" % (api_url, card_id), data={"etat":"IN_PRINT", "printerEppn":"dsiprint@univ-ville.fr"}) |
...
- à enrôler la carte, c'est à dire à enregistrer en base de données d'esup-sgc le CSN de la carte physique qu'on lie donc à la carte en base de données (qui n'était au départ qu'une demande de carte).
- et éventuellement à personnaliser la carte électronique en spécifiant des clefs, des applications et fichiers Desfire, pour
Dans un usage standard, il n'y a donc pas lieu de positionner le CSN de la carte par Web Service : c'est le rôle d'esup-sgc, esup-sgc-client et esup-nfc-tag lors de l'édition de la carte.
...
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
curl -d "etat=ENCODED" -d "csn=061D72BB3E7280" https://esup-sgc.univ-ville.fr/wsrest/api/setCardEtat/205 |
De quelles données utilisateur issues du SI esup-sgc a besoin ?
Notez qu'on peut également positionner ce CSN et tout autre attribut de la carte dès la création de la carte par Web-Service - voir à ce propos la question ci-avant "Comment faire une demande de carte en utilisant le webservice proposé par ESUP-SGC ?".
De quelles données utilisateur issues du SI esup-sgc a besoin ?
ESUP-SGC a besoin de récupérer un certain nombre de champs/donnnées utilisateurs depuis le SI, il lui faut par exemple le nom et prénom pour l'imprimer sur la carte.
...
- à chaque authentification de l'utilisateur et lors de la demande d'une carte
- lorsqu'un un gestionnaire clique sur le bouton "synchroniser" sur la fiche de l'utilisateur
- régulièrement en fonction de la configuration de votre fichier applicationTasksContext.xml
- si un appel web service ( type curl https://esup-sgc.univ-ville.fr/wsrest/api/sync?eppn=toto@univ-ville.fr ) est lancé - ce dernier moyen avancé peut vous permettre d'obtenir quelque chose de quasi synchrone en plaçant par exemple cette commande dans un trigger de votre base métier SI.
...
Pour les obtenir, et en tant que membre de la DSI (ou référent technique dans votre établissement) vous pouvez contacter departementcontacter sdn-vem@cnousventes@cnous.fr en fr en mettant également en copie Vincentcopie Vincent.Bonamy@univ-rouen.fr
Si vous êtes dans cette démarche, abonnez-vous également en premier lieu à la liste privée esup-sgc-devel.
...
Lorsque vous commanderez votre pré-encodées avec l'application Desfire, pensez à demander de positionner une master-key spécifique sur l'ensemble de vos cartes pour avoir la maîtrise de celle-ci !
(voir à ce propos la q/r "Comment avoir la master-key sur des cartes pré-encodées CROUS ?")
Quelles informations sont échangées entre ESUP-SGC et l'API CROUS ?
ESUP-SGC échange avec l'API CROUS
Utilisation de cartes pré-encodées - ajout du fichier CSV par Web Service
Dans des usages très particuliers, vous pouvez utilsier l'API REST pour importer le CSV issu de la DLL CROUS, et fourni par votre prestataire lors de la livraison de vos cartes (pré)encodées ainsi par exemple :
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
curl --form "file=@/tmp/le-csv.txt" https://esup-sgc.univ-ville.fr/wsrest/api/addCrousCsvFile |
Quelles informations sont échangées entre ESUP-SGC et l'API CROUS ?
ESUP-SGC échange avec l'API CROUS
- des données sur l'ayant droit (right holder) - cf RightHolder.java :
identifier, des données sur l'ayant droit (right holder) - cf RightHolder.java :
identifier, firstName, lastName, email, dueDate, idCompanyRate, idRate, birthDate, ine, rneOrgCode, accountStatus, blockingStatus - des données sur les cartes (smart card) - cf CrousSmartCard.java ; ces données correspondent aux données de sortie de la DLL CNOUS utilisée pour (pré)encoder les cartes avec l'application desfire crous/izly :
idTransmitter, idMapping, idZdc, zdcCreationDate, pixSs, pixNn, appl, uid, rid
(uid et rid sont tous deux valués avec le CSN)
...
L'URL en restrictedPhoto permet côté esup-sgc de prendre en compte l'acceptation par l'étudiant de la diffusion de sa photo, suivant l'usage et les spécificités rgpd, l'établissement peut aussi ne pas prendre en compte cela en mettant simplement en url
https://esup-sgc.mon-univ.fr/wsrest/photo/%s/photo
A noter que %s est remplacé par l'eppn de l'étudiant récupéré du ldap (le ldap doit donc proposer cet attribut).
Côté esup-sgc, le contrôle d'accès au web-service des photos se fait via la propriété de accessRestrictionWSRestPhoto de security.properties où on propose par défaut de lister les IPs via des expressions type hasIpAddress('127.0.0.1') or hasIpAddress('0:0:0:0:0:0:0:1') or ...
Il faut donc y ajouter ici l'IP du serveur où est installé esup-mdw ; notez qu'esup-mdw récupère véritablement les photos pour les présenter à l'utilisateur, la sécurité d'accès des photos est donc vis-à-vis de l'utilisateur opéré directement par esup-mdw.
Comment récupérer les photos par script ?
...
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
wget 'http://localhost:8080/wsrest/photo/joe@univ-ville.fr/restrictedPhoto?cardEtat=ENABLED' |
Comment récupérer par script / API / SQL les données et cartes d'un ou plusieurs utilisateurs ?
Esup-sgc propose une API permettant de récupérer les données et carte d'un ou plusieurs utilisateurs.
Pour pouvoir l' utiliser ce web service, l'IP du client doit être référencé dans accessRestrictionWSRestApi, fichier security.properties
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
wget 'http://localhost:8080/wsrest/api/get?eppn=toto@univ-ville.fr&eppn=titi@univ-ville.fr' |
Quelle version de Java puis-je utiliser ?
Initialement, le projet fonctionnait de part et d'autre avec le JDK 8 d'Oracle.
Puis, suite au changement de license d'Oracle, à l'abandon prochain de Java Web Start, on a fait évoluer esup-sgc et esup-nfc-tag.
Désormais on propose
La récupération du CSN de la carte active peut se faire ainsi par exemple :
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
curl -s 'http://localhost:8080/wsrest/api/get?eppn=toto@univ-ville.fr' | jq '.[] | select(.eppn == "toto@univ-ville.fr") | .cards[] | select(.etat == "ENABLED") | .csn' |
Notez qu'on peut aussi facilement récupérer ces mêmes données via une simple requête SQL dont la base de données est simple et stable :
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
select csn from card where eppn='toto@univ-ville.fr' and etat='ENABLED'; |
Quelle version de Java puis-je utiliser ?
Initialement, le projet fonctionnait de part et d'autre avec le JDK 8 d'Oracle.
Puis, suite au changement de license d'Oracle, à l'abandon prochain de Java Web Start, on a fait évoluer esup-sgc et esup-nfc-tag.
Désormais on propose
- côté serveur, pour esup-sgc et esup-nfc-tag, vous pouvez utiliser openjdk 17 ou openjdk 11 (fourni par votre distribution) ; la version 8 est encore également supportée.
- côté client,
- pour esup-sgc-client, esup-nfc-tag-desktop, esup-nfc-keyboard, vous pouvez utiliser openjdk11 avec openjfx11, c'est ce
- côté serveur, pour esup-sgc et esup-nfc-tag, vous pouvez utiliser openjdk 17 ou openjdk 11 (fourni par votre distribution) ; la version 8 est encore également supportée.
- côté client,
- pour esup-sgc-client, esup-nfc-tag-desktop, esup-nfc-keyboard, vous pouvez utiliser openjdk11 avec openjfx11, c'est ce que vous propose et embarque l'installateur windows que vous pouvez générer depuis https://esup-sgc-client-web-installer.univ-rouen.fr/
- si vous utilisez la version 'robot' d'esup-sgc-client utilisant une zxp3 pour encoder en série les cartes, cf la documentation à ce sujet vous devez rester sur une version 8 du JDK disposant de JFX (JavaFX) sur windows (le sdk zebra ne supportant pas les versions java ultérieurs), vous pouvez alors vous tourner sur la version de la communauté zulu du jdk+jfx en version 8 ; cf la documentation à ce sujet donc à nouveau.
...
Quelles optimisations serveur sont possibles ?
Octobre 2021Mars 2024, le le esup-sgc de l'Université de Rouen Normandie gère 100.000 cartes pour plus de 5080.000 utilisateurs (étudiants de l'année n et , n-1, ... personnels, invités ...).
L'ensemble des briques serveur esup-sgc (esup-sgc, esup-nfc-tag, apache en frontal et base de données Postgresql) tourne sur une seule VM qui dispose de 2 4 CPUS et 8 12 GB de RAM.
La base de données prend un peu moins de 40GB sur disque.25GB sur disque.
Le serveur est une debian bookworm avec openjdk 17, postgresql 15 et apache 2.4 (avec mpm_event) de cette distribution.
Le service est stable et peu gourmand ; complexifier l'architecture en installant des mécansimes mécanismes logiciels de failover ou load-balancing n'est pas conseillé.
1 2 GB de RAM alloué au tomcat d'esup-sgc (-Xms1024M -Xmx1024MXmx2048M) est suffisant.
L'AJP est utilisé entre le tomcat et le apache avec un proxypass ainsi fait :
ProxyPass / ajp://localhost:8009/ ttl=10 timeout=3600 retry=1
...
Un munin avec les plugins suivants peut également être utile par exemple :
cpu df_inode http_loadtime irqstats memory open_files postgres_autovacuum postgres_connections_ALL processes swap uptime df diskstats interrupts load netstat open_inodes postgres_checkpoints postgres_size_ALL proc_pri threads users
On conseille de paramétrer du cache http/apache et la compression côté des frontaux.
Côté PostgreSQL, on conseille de procéder à quelques paramétrages élémentaires permettant de mettre à profit les capacités matérielles du serveur.
Une mesure de performance de l'instance d'esup-sgc est de regarder le temps de récupération(et rendu) de la page "manager" lors d'une recherche ou non affichant 10 cartes simplement.
Sous chrome, via l'outil d'inspection / réseau, la page en elle-même est rendue en moins de 200ms quelque soit la recherche effectuée, chaque photo de carte (non mise en cache) moins de 15ms ; l'ensemble s'affiche en moins de 800ms.
Les synchronisations des utilisateurs s'opèrent grâce à de très nombreuses requêtes ldap/sql Les synchronisations des utilisateurs s'opèrent grâce à de très nombreuses requêtes ldap/sql sur les LDAP et bases de données SQL du SI.
Ces requêtes sont issues des configurations données dans applicationContext-services.xml.
Aussi les ldap et bases de données doivent présenter des index permettant de répondre au mieux à ces requêtes (l'eppn est généralement utilisé comme clef).
ESUP-NFC-TAG
Je n'ai pas de groupes dans ldap, est-ce que je peux plutôt utiliser des filtres pour affecter les rôles dans l'application ESUP-NFC-TAG ?
Même si l'usage de groupes ldap, notamment via l'usage de Grouper, est conseillé (c'est ce que propose la configuration par défaut et c'est ce qui est utilisé dans la VM de démonstration), il est effectivement possible d'utiliser en lieu et place des filtres ldap.
Pour ce faire, dans applicationContext-security.xml on modifiera
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
<beans:bean id="groupService" class="org.esupportail.nfctag.security.LdapGroupService">
<beans:property name="ldapTemplate" ref="ldapTemplate"/>
<beans:property name="groupSearchBase" value="ou=groups" />
<beans:property name="groupSearchFilter" value="member={0}"/>
<beans:property name="memberSearchBase" value="ou=people"/>
<beans:property name="memberSearchFilter" value="memberOf={0}"/>
</beans:bean> |
par quelque chose du type :
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
<beans:bean id="groupService" class="org.esupportail.nfctag.security.LdapFilterGroupService">
<beans:property name="ldapTemplate" ref="ldapTemplate"/>
<beans:property name="ldapFiltersGroups">
<util:map>
<beans:entry key="eduPersonPrincipalName=joe@univ-ville.fr" value="esup-nfc-admins"/>
<beans:entry key="eduPersonPrincipalName=jack@univ-ville.fr" value="esup-nfc-supervisors"/>
</util:map>
</beans:property>
</beans:bean> |
C'est ensuite ces noms de groupes ainsi déifinis ('esup-sgc-admins', 'esup-nfc-supervisors') qui peuvent être utilisés au niveau du bean nfcMappingGroupesRoles pour définir les rôles de chacun :
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
<util:map id="nfcMappingGroupesRoles">
<beans:entry key="esup-nfc-admins" value="ROLE_ADMIN" />
<beans:entry key="esup-nfc-supervisors" value="ROLE_SUPERVISOR" />
</util:map> |
Nous souhaitons mettre en place l'encodage des cartes pour du contrôle d'accès basé sur Desfire
ESUP-SGC et ESUP-NFC-TAG permettent cette mise en oeuvre de l'encodage Desfire pour des usages très sécurisés comme le contrôle d'accès.
C'est la partie la plus délicate de l'installation d'une telle plateforme dans un établissement ou un groupement d'établissements : Desfire est assez éloignée de nos coeurs de métiers dans nos SI !
Pour une telle mise en oeuvre, nous vous conseilleurs de prendre connaissance et lire attentivement les documentations suivantes sur les espaces ESUP-SGC / ESUP-NFC-TAG :
- Tags NFC - getting started
- Contrôle d'accès à l'Université de Rouen Normandie
- Configuration Desfire avancée
- Configuration spécifique COMUE Normandie Université
Avant toute chose cependant, assurez-vous d'être en possession de la "master key" de vos cartes !
Sans cette clef, vous n'aurez pas la possibilité d'ajouter des "applications Mifare Desfire" sur vos cartes.
J'ai besoin de connaître la master key de ma carte ?
La "master key" de la carte Mifare Desfire est une clef (DES ou AES) qui permet d'ajouter des "applications Desfire" pour du contrôle d'accès ou tout autre type d'usage.
Ces applications Desfire peuvent être positionnées par esup-nfc-tag si vous avez en votre possession la master key de la carte.
Pour plus d'information sur NFC et Mifare Desfire, vous pouvez consulter la page wiki Tags NFC - getting started.
Vous avez donc besoin de connaitre effectivement la master key de votre carte uniquement si vous souhaitez ajouter des applications Mifare Desfire dans vos cartes.
Cependant nous vous conseillons fortement d'avoir la main sur vos propres cartes, c'est à dire de faire en sorte d'avoir en votre possession la master key de vos cartes.
Quelle est la master key de ma carte ?
Les cartes Mifare Desfire vierges ont une master key en DES à 0, sa représentation en hexa est 0000000000000000.
Dès qu'on encode une carte, il est d'usage de prendre la main sur la carte et de modifier cette master-key par défaut par une clef différente, usuellement en AES (car plus sécurisé).
Si vos cartes sont pré-encodées ou ont été encodées par un sous-traitant, demandez leur de positionner une master-key unique pour l'ensemble de vos cartes (et d'en avoir connaissance).
Comment avoir la master-key sur des cartes pré-encodées CROUS ?
On conseille de faire pré-encoder vos cartes avec l'application CROUS/IZLY, cela vous évite de manipuler des clefs sam, dll windows, etc.
Au moment du pré-encodage, pour des questions de sécurité, une master-key est positionnée par l'entreprise qui encode vos cartes.
Par défaut cette master-key est diversifiée, non unique pour l'ensemble de vos cartes, et fonction de la clef SAM crous ; en d'autres termes cette master key vous est inconnue et vous ne pouvez pas alors ajouter de nouvelles applications avec votre esup-sgc / esup-nfc-tag.
Aussi, on vous recommande fortement de demander à positionner une master-key sur vos cartes. Pour ce faire, vous devez transmettre cette clef en suivant la procédure "MasterKeyGenerator : Génération & communication de clés" mise au point par le CROUS : téléchargement ici.
Cette procédure, accompagnée d'un programme java (jar) vous permet d'obtenir votre master-key à positionner et 3 fichiers supplémentaires, qui assemblés, permettent au prestataire de positionner la master-key sur vos cartes (sans pour autant en avoir connaissance).
Ces 3 fichiers doivent être envoyés par mail chiffrés (c'est le prestataire qui vous donne les 3 mails et 3 clefs de chiffrement respectives à utiliser pour ce faire).
Quels types de cartes ESUP-NFC-TAG est-il capable d'encoder ?
ESUP-NFC-TAG propose l'encodage (et décodage/lecture sécurisée) des cartes Mifare Desfire ; c'est à dire les cartes actuellement les plus utilisées dans nos établissements car considérées comme les plus sécurisées et permettant ainsi de proposer en confiance un moyen de paiement et de contrôle d'accès.
De fait ESUP-NFC-TAG supporte à la fois les cartes Mifare Desfire EV1, Mifare Desfire EV2, Mifare Desfilre EV3.
Mifare Desfire EV3 étant la dernière en date actuellement (NDR : au 11/03/2022), ce sont ces cartes qui sont achetées et utilisées par les établissements actuellement (via notamment le marché cartes multiservices porté par le CNOUS et le CNCEU).
Peut-on utiliser esup-nfc-tag pour modifier la master key d'une carte
Dans certains cas (par exemple l'utilisation de carte vièrge dans le cadre du SGC) il peut être nécessaire de positionner une cle master sur une carte avant de pouvoir l'encoder normalament (ceci sans passer par les différents contrôles proposés par esup-nfc-tag). En effet esup-nfc-tag propose, dans son fonctionnement le plus courant, de contrôler l'existence de la carte puis de vérifier sa validité dans le système d'information (tagIdCheck et validateTag).
L'idée ici est de shunter ces deux étapes en utilisant les implémentations Dummy proposées dans esup-nfc-tag-server. Ces implémentations valident systématiquement les tags en retournant "true" quelle que soit la carte badgée.
Il est donc possible de créer un bean AppliExtApi reprenant l'implémantation AppliExtDummy en précisant un nom de salle (location) personnalisé.
De plus il faut déclarer un DesfireWriteConfig et un DesfireTag qui décrivent les actions à opérer sur la carte.
Dans ce cas il faut donc ajouter la configuration suivante:
La récupération et le calcul des UserInfoServices d'un utilisateur depuis le SI prend environ 3ms : ce temps de calcul est consultable dans l'IHM via le menu Admin < UserInfos.
Concernant le calcul des groupes et rôles, l'IHM via le menu Admin < GroupsRoles donne 122ms pour la récupération des groupes d'un user ou encore 326ms pour lé décompte des membres des différents groupes.
La synchronisation totale régulière des 80.000 utilisateurs (cf ResynchronisationService en level info dans les logs) se fait en 33min, avec seuls 300 environs notés comme ayant "du" être mis à jour.
Notez que cette synchronisation n'est pas parallélisée : nous avons préféré ici la faire fonctionner sur un seul thread ce qui permet de garantir une non sur-sollicitation des ressources système du esup-sgc mais aussi du reste du SI (ldap, bd sql, ...) en estimant ici qu'il n'y avait pas lieu de minimiser le temps d'exécution de la synchronisation totale.
La synchronsisation totale régulière des groupes en base (LdapGroup2UserRoleService en level debug dans les logs) prend 0.5sec.
L'usage CPU du esup-sgc est finalement très modéré, des pics d'usage sont simplement présents lors des synchronisations totales et du backup (pg_dump) de la base :
Côté apache, les requêtes en long polling utilisées par esup-sgc et esup-nfc-tag sont bien présentes :
Accélération temporaire pour optimiser des procédures de modifications en masse.
Les modifications en base de données esup-sgc des données sur les cartes et les utilisateurs sont sujet à une indexation plein texte continue qui sont consommateurs de ressources.
Sur un usage courant et quotidien d'esup-sgc, même avec des centaines de milliers de cartes et utilisateurs, cette (ré)indexation à chaque modification d'une entrée de carte et/ou utilisateur n'est pas pénalisante, mais elle peut le devenir si vous intervenez en masse sur l'ensemble de la base de données.
Ainsi par exemple, la procédure d'upgrade de la base de données esup-sgc lors de montée de version majeure intègre de facto la désactivation des triggers permettant l'indexation plein texte continue des cartes/utilisateurs, la réindexation totale plein texte et la réactivation des triggers.
Si vous devez intervenir sur la base de données en masse et que vous avez des dizaines de milliers d'entrées de cartes et utilisateurs, nous vous conseillons d'en faire de même ainsi.
Dans psql pour désactiver les triggers :
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
esupsgc=# alter table user_account disable trigger tsvectorupdateuser;
esupsgc=# alter table card disable trigger tsvectorupdate; |
Vous pouvez alors effectuer vos modifications.
Ensuite, vous pouvez réindexer l'ensemble et réactiver les triggers, dans psql toujours :
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
esupsgc=# UPDATE card SET textsearchable_index_col = setweight(to_tsvector('simple', coalesce(card.eppn,'')), 'B')
|| setweight(to_tsvector('simple', replace(coalesce(user_account.name,''),'-',' ')), 'A')
|| setweight(to_tsvector('simple', replace(coalesce(user_account.firstname,''),'-',' ')), 'B')
|| setweight(to_tsvector('simple', coalesce(user_account.email,'')), 'B')
|| setweight(to_tsvector('simple', replace(coalesce(user_account.supann_emp_id,''),'-',' ')), 'B')
|| setweight(to_tsvector('simple', replace(coalesce(user_account.supann_etu_id,''),'-',' ')), 'B')
|| setweight(to_tsvector('simple', replace(coalesce(user_account.supann_entite_affectation_principale,''),'-',' ')), 'C')
|| setweight(to_tsvector('simple', replace(coalesce(card.csn,''),'-',' ')), 'C')
|| setweight(to_tsvector('simple', replace(coalesce(card.full_text,''),'-',' ')), 'D')
|| setweight(to_tsvector('simple', replace(coalesce(user_account.full_text,''),'-',' ')), 'D')
FROM user_account where card.eppn=user_account.eppn;
esupsgc=# alter table user_account enable trigger tsvectorupdateuser;
esupsgc=# alter table card enable trigger tsvectorupdate; |
ESUP-NFC-TAG
Je n'ai pas de groupes dans ldap, est-ce que je peux plutôt utiliser des filtres pour affecter les rôles dans l'application ESUP-NFC-TAG ?
Même si l'usage de groupes ldap, notamment via l'usage de Grouper, est conseillé (c'est ce que propose la configuration par défaut et c'est ce qui est utilisé dans la VM de démonstration), il est effectivement possible d'utiliser en lieu et place des filtres ldap.
Pour ce faire, dans applicationContext-security.xml on modifiera applicationContext-desfire.xml (pour modifier la master key par defaut par une clé AES)
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
<bean <beans:bean id="desfireChangeMasterKeyTagEsupSgcgroupService" class="org.esupportail.nfctag.beanssecurity.DesfireTag" p:formatBeforeWrite="false" p:keyStart="0000000000000000" p:keyTypeStart="DES" p:keyFinish="12345678901234567890123456789012" p:keyTypeFinish="AES" p:keyVersionFinish="01"> </bean> <bean id="desfireAuthConfigChangeKeyMasterEsupSgc" class="org.esupportail.nfctag.service.api.impl.DesfireWriteConfig"> <property name="desfireTag" ref="desfireChangeMasterKeyTagEsupSgc" /> <property name="description" value="Changement de la Master Key"/> </bean>LdapGroupService"> <beans:property name="ldapTemplate" ref="ldapTemplate"/> <beans:property name="groupSearchBase" value="ou=groups" /> <beans:property name="groupSearchFilter" value="member={0}"/> <beans:property name="memberSearchBase" value="ou=people"/> <beans:property name="memberSearchFilter" value="memberOf={0}"/> </beans:bean> |
par quelque chose du type : applicationContext-custom.xml (ajout d'une application dummy dediée)
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
<bean <beans:bean id="dummyChangeMasterKeyExtApigroupService" class="org.esupportail.nfctag.service.api.impl.AppliExtDummysecurity.LdapFilterGroupService"> <property <beans:property name="descriptionldapTemplate" valueref="Changement Master KeyldapTemplate"/> <property <beans:property name="locationsNamesldapFiltersGroups"> <util:list>map> <value>Change Master Key</value> </util:list> </property> </bean> |
Puis il faut créer une application esup-nfc-tag au niveau de l'IHM en utilisant les paramètres suivants :
- Nom : Change Master Key
- Configuration NFC : Changement de la Master Key
- Application externe : Changement Master Key
Quelle est la différence entre Mifare Desfire EV1, Mifare Desfire EV2 ou encore Mifare Desfire EV3 ?
Ces 3 technologies correspondent à des évolutions de Mifare Desfire. En prime abord, il faut retenir que NXP assure une compatibilité descendante de ses cartes vis-à-vis des applicatifs compatibles Mifare Desfire : en bref et rapidement, un contrôle d'accès compatible et codé au départ pour prendre en charge le protocole Mifare Desfire EV1 pourra utiliser des cartes Mifare Desfire EV3.
Pus précisément, parlons par exemple de la différence entre EV1 et EV2 : Mifare Desfire EV2 fait suite à Mifare Desfire EV1.
EV2 est présentée comme plus sécurisée que EV1.
Il faut cependant distinguer la carte du protocole utilisé.
Aussi retenons que :
- EV2 est donc à la fois des cartes EV2 et un nouveau protocole EV2.
- Les cartes Desfire EV2 supportent le protocole EV1 et le protocole EV2.
- Les cartes Desfire EV1 ne supportent que le protocole EV1
- Le protocole EV2 est plus sécurisé (et plus complexe du coup) que le protocole EV1.
- Les nouvelles possibilités offertes par les cartes EV2 (application déléguée et libération de la mémoire)
- ne sont pas supportées par les cartes EV1
- mais peuvent être codées avec le protocole EV1.
- ESUP-SGC au travers d'ESUP-NFC-TAG utilise le protocole EV1 (et est donc compatible avec les cartes EV1 et EV2).
Codées avec ESUP-SGC / ESUP-NFC-TAG (via le protocole EV1), l'usage des cartes EV2 avec le protocole EV2 (par exemple au travers du contrôle d'accès) apporteraient de fait une plus grande sécurité que son usage au travers du protocole EV1.
Cf la documentation NXP https://www.nxp.com/docs/en/fact-sheet/MIFARE-DESFIRE-EV2-FS.pdf : "Proximity Check protects against relay attacks".
ESUP-SGC / ESUP-NFC-TAG, dans le cadre du projet de Carte Etudiante Européenne devrait également prochainement (en cours d'implémentation) supporter au niveau de l'encodage les nouvelles possibilités offertes par EV2, à savoir le support des applications déléguées et de la libération de la mémoire.
Concernant EV3 (et toutes autres versions qui pourraient suivre), la logique de rétrocompatibilité est la même.
Est-ce que ESUP-SGC peut coder la DEUInfo de la care étudiante européenne ?
Oui, esup-sgc peut être configuré pour coder l'application DEUInfo dans un carte Mifare Desfire.
La documentation pour ce faire est donnée ici : Carte étudiante européenne
Est-ce qu'on peut demander à un prestataire de se charger de coder la DEUInfo ?
Avant la version 2.0, l'implémentation d'esup-sgc faisait qu'on ne poiuvait pas déléguer cette partie à un prestataire.
La DEUInfo (Data European University Info) consiste notamment à coder l'ESCN (European Student Card Number) dans la carte.
Le QRCode utilisé par esup-sgc correspond à l'ESCN inclu dans une url en esc.gg
Le fonctionnement d'esup-sgc (lorsqu'il imprime et encode en 2 temps) rattache ce qui est imprimé à la partie électronique en utilisant le QR Code d'une part et le CSN d'autre part.
De fait l'association escn/csn ne peut pas se faire en dehors d'esup-sgc, et donc les établissements utilisant esup-sgc avec l'édition en 2 temps ne peuvent pas demander à un prestataire de pré-encoder la DEUInfo pour eux.
Avec l'édition en 1 temps disponible dans esup-sgc 2, cette limitation est cependant théoriquement levée.
<beans:entry key="eduPersonPrincipalName=joe@univ-ville.fr" value="esup-nfc-admins"/>
<beans:entry key="eduPersonPrincipalName=jack@univ-ville.fr" value="esup-nfc-supervisors"/>
</util:map>
</beans:property>
</beans:bean> |
C'est ensuite ces noms de groupes ainsi déifinis ('esup-sgc-admins', 'esup-nfc-supervisors') qui peuvent être utilisés au niveau du bean nfcMappingGroupesRoles pour définir les rôles de chacun :
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
<util:map id="nfcMappingGroupesRoles">
<beans:entry key="esup-nfc-admins" value="ROLE_ADMIN" />
<beans:entry key="esup-nfc-supervisors" value="ROLE_SUPERVISOR" />
</util:map> |
Nous souhaitons mettre en place l'encodage des cartes pour du contrôle d'accès basé sur Desfire
ESUP-SGC et ESUP-NFC-TAG permettent cette mise en oeuvre de l'encodage Desfire pour des usages très sécurisés comme le contrôle d'accès.
C'est la partie la plus délicate de l'installation d'une telle plateforme dans un établissement ou un groupement d'établissements : Desfire est assez éloignée de nos coeurs de métiers dans nos SI !
Pour une telle mise en oeuvre, nous vous conseilleurs de prendre connaissance et lire attentivement les documentations suivantes sur les espaces ESUP-SGC / ESUP-NFC-TAG :
- Tags NFC - getting started
- Contrôle d'accès à l'Université de Rouen Normandie
- Configuration Desfire avancée
- Configuration spécifique COMUE Normandie Université
Avant toute chose cependant, assurez-vous d'être en possession de la "master key" de vos cartes !
Sans cette clef, vous n'aurez pas la possibilité d'ajouter des "applications Mifare Desfire" sur vos cartes.
J'ai besoin de connaître la master key de ma carte ?
La "master key" de la carte Mifare Desfire est une clef (DES ou AES) qui permet d'ajouter des "applications Desfire" pour du contrôle d'accès ou tout autre type d'usage.
Ces applications Desfire peuvent être positionnées par esup-nfc-tag si vous avez en votre possession la master key de la carte.
Pour plus d'information sur NFC et Mifare Desfire, vous pouvez consulter la page wiki Tags NFC - getting started.
Vous avez donc besoin de connaitre effectivement la master key de votre carte uniquement si vous souhaitez ajouter des applications Mifare Desfire dans vos cartes.
Cependant nous vous conseillons fortement d'avoir la main sur vos propres cartes, c'est à dire de faire en sorte d'avoir en votre possession la master key de vos cartes.
Quelle est la master key de ma carte ?
Les cartes Mifare Desfire vierges ont une master key en DES à 0, sa représentation en hexa est 0000000000000000.
Dès qu'on encode une carte, il est d'usage de prendre la main sur la carte et de modifier cette master-key par défaut par une clef différente, usuellement en AES (car plus sécurisé).
Si vos cartes sont pré-encodées ou ont été encodées par un sous-traitant, demandez leur de positionner une master-key unique pour l'ensemble de vos cartes (et d'en avoir connaissance).
Comment avoir la master-key sur des cartes pré-encodées CROUS ?
On conseille de faire pré-encoder vos cartes avec l'application CROUS/IZLY, cela vous évite de manipuler des clefs sam, dll windows, etc.
Au moment du pré-encodage, pour des questions de sécurité, une master-key est positionnée par l'entreprise qui encode vos cartes.
Par défaut cette master-key est diversifiée, non unique pour l'ensemble de vos cartes, et fonction de la clef SAM crous ; en d'autres termes cette master key vous est inconnue et vous ne pouvez pas alors ajouter de nouvelles applications avec votre esup-sgc / esup-nfc-tag.
Aussi, on vous recommande fortement de demander à positionner une master-key sur vos cartes. Pour ce faire, vous devez transmettre cette clef en suivant la procédure "MasterKeyGenerator : Génération & communication de clés" mise au point par le CROUS : téléchargement ici.
Cette procédure, accompagnée d'un programme java (jar) vous permet d'obtenir votre master-key à positionner et 3 fichiers supplémentaires, qui assemblés, permettent au prestataire de positionner la master-key sur vos cartes (sans pour autant en avoir connaissance).
Ces 3 fichiers doivent être envoyés par mail chiffrés (c'est le prestataire qui vous donne les 3 mails et 3 clefs de chiffrement respectives à utiliser pour ce faire).
Quels types de cartes ESUP-NFC-TAG est-il capable d'encoder ?
ESUP-NFC-TAG propose l'encodage (et décodage/lecture sécurisée) des cartes Mifare Desfire ; c'est à dire les cartes actuellement les plus utilisées dans nos établissements car considérées comme les plus sécurisées et permettant ainsi de proposer en confiance un moyen de paiement et de contrôle d'accès.
De fait ESUP-NFC-TAG supporte à la fois les cartes Mifare Desfire EV1, Mifare Desfire EV2, Mifare Desfilre EV3.
Mifare Desfire EV3 étant la dernière en date actuellement (NDR : au 11/03/2022), ce sont ces cartes qui sont achetées et utilisées par les établissements actuellement (via notamment le marché cartes multiservices porté par le CNOUS et le CNCEU).
Peut-on utiliser esup-nfc-tag pour modifier la master key d'une carte
Dans certains cas (par exemple l'utilisation de carte vièrge dans le cadre du SGC) il peut être nécessaire de positionner une cle master sur une carte avant de pouvoir l'encoder normalament (ceci sans passer par les différents contrôles proposés par esup-nfc-tag). En effet esup-nfc-tag propose, dans son fonctionnement le plus courant, de contrôler l'existence de la carte puis de vérifier sa validité dans le système d'information (tagIdCheck et validateTag).
L'idée ici est de shunter ces deux étapes en utilisant les implémentations Dummy proposées dans esup-nfc-tag-server. Ces implémentations valident systématiquement les tags en retournant "true" quelle que soit la carte badgée.
Il est donc possible de créer un bean AppliExtApi reprenant l'implémantation AppliExtDummy en précisant un nom de salle (location) personnalisé.
De plus il faut déclarer un DesfireWriteConfig et un DesfireTag qui décrivent les actions à opérer sur la carte.
Dans ce cas il faut donc ajouter la configuration suivante:
applicationContext-desfire.xml (pour modifier la master key par defaut par une clé AES)
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
<bean id="desfireChangeMasterKeyTagEsupSgc" class="org.esupportail.nfctag.beans.DesfireTag" p:formatBeforeWrite="false" p:keyStart="0000000000000000" p:keyTypeStart="DES" p:keyFinish="12345678901234567890123456789012" p:keyTypeFinish="AES" p:keyVersionFinish="01">
</bean>
<bean id="desfireAuthConfigChangeKeyMasterEsupSgc" class="org.esupportail.nfctag.service.api.impl.DesfireWriteConfig">
<property name="desfireTag" ref="desfireChangeMasterKeyTagEsupSgc" />
<property name="description" value="Changement de la Master Key"/>
</bean> |
applicationContext-custom.xml (ajout d'une application dummy dediée)
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
<bean id="dummyChangeMasterKeyExtApi" class="org.esupportail.nfctag.service.api.impl.AppliExtDummy">
<property name="description" value="Changement Master Key"/>
<property name="locationsNames">
<util:list>
<value>Change Master Key</value>
</util:list>
</property>
</bean> |
Puis il faut créer une application esup-nfc-tag au niveau de l'IHM en utilisant les paramètres suivants :
- Nom : Change Master Key
- Configuration NFC : Changement de la Master Key
- Application externe : Changement Master Key
Quelle est la différence entre Mifare Desfire EV1, Mifare Desfire EV2 ou encore Mifare Desfire EV3 ?
Ces 3 technologies correspondent à des évolutions de Mifare Desfire. En prime abord, il faut retenir que NXP assure une compatibilité descendante de ses cartes vis-à-vis des applicatifs compatibles Mifare Desfire : en bref et rapidement, un contrôle d'accès compatible et codé au départ pour prendre en charge le protocole Mifare Desfire EV1 pourra utiliser des cartes Mifare Desfire EV3.
Pus précisément, parlons par exemple de la différence entre EV1 et EV2 : Mifare Desfire EV2 fait suite à Mifare Desfire EV1.
EV2 est présentée comme plus sécurisée que EV1.
Il faut cependant distinguer la carte du protocole utilisé.
Aussi retenons que :
- EV2 est donc à la fois des cartes EV2 et un nouveau protocole EV2.
- Les cartes Desfire EV2 supportent le protocole EV1 et le protocole EV2.
- Les cartes Desfire EV1 ne supportent que le protocole EV1
- Le protocole EV2 est plus sécurisé (et plus complexe du coup) que le protocole EV1.
- Les nouvelles possibilités offertes par les cartes EV2 (application déléguée et libération de la mémoire)
- ne sont pas supportées par les cartes EV1
- mais peuvent être codées avec le protocole EV1.
- ESUP-SGC au travers d'ESUP-NFC-TAG utilise le protocole EV1 (et est donc compatible avec les cartes EV1 et EV2).
Codées avec ESUP-SGC / ESUP-NFC-TAG (via le protocole EV1), l'usage des cartes EV2 avec le protocole EV2 (par exemple au travers du contrôle d'accès) apporteraient de fait une plus grande sécurité que son usage au travers du protocole EV1.
Cf la documentation NXP https://www.nxp.com/docs/en/fact-sheet/MIFARE-DESFIRE-EV2-FS.pdf : "Proximity Check protects against relay attacks".
ESUP-SGC / ESUP-NFC-TAG, dans le cadre du projet de Carte Etudiante Européenne devrait également prochainement (en cours d'implémentation) supporter au niveau de l'encodage les nouvelles possibilités offertes par EV2, à savoir le support des applications déléguées et de la libération de la mémoire.
Concernant EV3 (et toutes autres versions qui pourraient suivre), la logique de rétrocompatibilité est la même.
Peut-on utiliser l'application Desfire Crous/Izly via esup-nfc-tag et plus généralement dans nos services institutionnels comme le servie d'impression ou le contrôle d'accès ?
Si esup-nfc-tag (allié à esup-sgc) sait lancer la DLL CROUS/Izly pour écrire l'application crous/izly (on recommande cependant l'achat de cartes pré-encodées), esup-nfc-tag ne propose pas de lire l'application Desfire CROUS/Izly.
Il faut en fait considérer que l'application Desfire CROUS/Izly, même si elle est écrite sur vos cartes (et éventuellement par vous-même), ne vous appartient pas et ne devrait pas être utilisée en dehors du contexte précis pour lequel elle a été conçue (services du CROUS).
Cela exclut donc de fait l'usage de l'application Desfire CROUS/Izly au travers d'esup-nfc-tag, mais aussi au travers de votre service d'impression, de votre contrôle d'accès, etc.
Si vous souhaitez utiliser une application Desfire sur vos cartes pour le contrôle d'accès ou tout autre service, vous devez en écrire une (ou plusieurs) vous-même, qui vous appartient ; on vous y encourage, cela constitue en partie la raison d'être d'esup-nfc-tag allié à esup-sgc !
Est-ce que ESUP-SGC peut coder la DEUInfo de la care étudiante européenne ?
L'application DEUInfo dans une carte Mifare Desfire était une fonctionnalité proposée par la Carte Étudiante Européenne jusqu'en Novembre 2024 et esup-sgc pouvait effectivement l'encoder (cf la page wiki archivée à ce sujet : Carte étudiante européenne - Archivé).
Elle a depuis été abandonnée - voir la documentation à jour à propose de la Carte étudiante européenne.
Comment renseigner l'application Desfire ID AID pour la mise en place d'une application Desfire de contrôle d'accès ?
Techniquement, il est possible de choisir soi-même un AID quelconque qui sera l'identificant de votre application de contrôle d'accès. Vous positionnerez alors les fichiers et clefs dans cette application.
Cependant, il est d'usage de s'adresser à NXP pour obtenir un AID qui vous soit propre. Cette procédure est gratuite et la société NXP s'assure ainsi de distribuer un AID unique et réservé pour l'usage de chacun. Pour ce faire, il faut remplir l'annexe A du document AN10787.pdf et l'envoyer à NXP via support.docstore@nxp.com.
Plus d'information à ce propos sur le document AN11909.pdf : How to create an Installation IDentifier (IID)
Le retour Contrôle d'accès à l'Université de Rouen Normandie dans ce même wiki vous donnera aussi des explications et cas d'usage sur l'encodage d'une application Desfire de contrôle d'accès dans le contexte d'esup-sgc/esup-nfc-tag.
Est-ce qu'esup-sgc peut positionner des DAM keys sur les cartes supportant Mifare DesFire EV2 ?
...
Implémenter l'émulation Desfire (sur Android comme sur iOS) fait donc face à plusieurs problèmes : contraintes imposées par Apple/Google, problèmes de conformité (les cartes Mifare Desfire sont certifiées par l'ANSSI), de sécurité, de légalité (vis-à-vis de NXP).
En lien direct avec Google, NXP proposerait une émulation Desfire sur Android (via Google Pay) au travers de la solution MIFARE 2GO ; cette solution permet déjà d'utiliser son Android pour utiliser les transports public dans quelques villes (San Francisco, Whashington, Melbourne ...).
L'usage du protocole ISO/IEC 7816-4
Si l'émulation complète de Mifare Desfire est délicate, l'implémentation de commandes ISO/IEC 7816-4 semble plus à portée et plus en cohérence avec les possibilités d'HCE proposé par Android.
Aussi on peut imaginer proposer des services accessibles à l'utilisateur au travers d'une application Android émulant une "carte", notamment si on opère à la fois l'application cliente (Android) et serveur (lecteur NFC rattaché au service).
En ce sens l'émulation de la mise à disposition du fichier ESCN de la DEUInfo en ISO/IEC 7816-4 pourrait par exemple être envisagé (non étudié ni implémenté(Android) et serveur (lecteur NFC rattaché au service).
Au vu de ces considérations techniques, il parait donc préférable de recentrer le problème sur le besoin (fonctionnel) de départ et donc de reformuler par exemple la question en : comment peut-on se passer de la carte ?
...
Les SGC du marché proposent usuellement une édition comprenant l'impression et l'encodage de la carte en 1 seul passage dans une imprimante (faisant office également d'encodeur).
Cf la Q/R "L'impression des cartes nécessite de faire deux passages de carte ?", cela est possible en utilisant les APIs d'un modèle d'imprimante à carte spécifique (avec encodeur intégré). Dans les faits, outre les problèmes de maintenance (logiciel testé/validé uniquement pour une version/type d'OS, ... parfois plus maintenu, ...), les établissements utilisant ce type de Système de Gestion de Cartes constatent des taux d'échec/perte de cartes importants lors de l'édition (jusqu'à 30% de perte pour certains).
Avec esup-sgc / esup-nfc-tag (qui ne fait que du standard / basique lors de l'édition des cartes : impression ps/pcsl et encodage nfc/pcsc) le taux de perte attendu est proche de 0, tant sur l'impression que sur l'encodage.
(Notons que l'usage d'une ZXP3 pour encoder en masse les cartes, malgré l'usage de l'API propriétaire Zebra [usage la plus modérée possible cependant], se révèle également très fiable via ESUP-SGC).
Depuis la version 2 d'esup-sgc, esup-sgc permet également d'imprimer et encoder en 1 seul passage.
Après une rentrée utilisant exclusivement l'édition en 1 temps à l'Université de Rouen Normandie (10.000 cartes éditées) nous pouvons affirmer que nos implémentations et les imprimantes que nous avons pu choisir se révèlent être aussi stables dans cette configuration d'édition en 1 temps que lors de l'édition en 2 temps !
Il faut garder à l'esprit que cette stabilité dépend notamment des lecteurs NFC embarqués, des SDK, des drivers fonction des systèmes d'exploitation, et de leur bonne installation ... cf plus bas.
De notre point de vue, si, avec esup-sgc, vous constatez un taux de perte de l'ordre de 5% par exemple, ce n'est pas normal ; celui-ci doit être proche de 0.
Problème d'impression
que sur l'encodage.
(Notons que l'usage d'une ZXP3 pour encoder en masse les cartes, malgré l'usage de l'API propriétaire Zebra [usage la plus modérée possible cependant], se révèle également très fiable via ESUP-SGC).
Depuis la version 2 d'esup-sgc, esup-sgc permet également d'imprimer et encoder en 1 seul passage.
Après une rentrée utilisant exclusivement l'édition en 1 temps à l'Université de Rouen Normandie (10.000 cartes éditées) nous pouvons affirmer que nos implémentations et les imprimantes que nous avons pu choisir se révèlent être aussi stables dans cette configuration d'édition en 1 temps que lors de l'édition en 2 temps !
Il faut garder à l'esprit que cette stabilité dépend notamment des lecteurs NFC embarqués, des SDK, des drivers fonction des systèmes d'exploitation, et de leur bonne installation ... cf plus bas.
De notre point de vue, si, avec esup-sgc, vous constatez un taux de perte de l'ordre de 5% par exemple, ce n'est pas normal ; celui-ci doit être proche de 0.
Problème d'impression
Si le problème se pose au niveau de l'impression, l'imprimante ou les rubans sont sans doute en cause (ou/et les drivers et configurations associées).
Suivant les modèles d'imprimantes, les utilitaires associés peuvent être à l’origine d’interférences avec ESUP-SGC-CLIENT s’ils génèrent de nombreuses notifications ou prennent temporairement le contrôle de l’imprimante en pleine session d'impression des cartes.
On notera notamment, que pour le modèle Evolis Primacy2, il est fortement recommandé d’installer le logiciel Evolis Print Center 2 en mode « minimal » :
ce mode permet de bénéficier des fonctionnalités utiles de l’outil, comme le processus de nettoyage automatique de l’imprimante, la gestion des consommables et la mise à jour du firmware, tout en réduisant considérablement les interactions et notifications intempestives susceptibles de perturber ou bloquer les impressions déclenchées par le client ESUP-SGC. Pour cela, lors de l’installation du Print Center 2, sélectionner le mode de fonctionnement « minimal » dans les options de configurationSi le problème se pose au niveau de l'impression, l'imprimante ou les rubans sont sans doute en cause (ou/et drivers et configurations associées).
Problème d'encodage
Si le problème se pose lors de l'encodage, ça peut être un problème humain (encodage avorté en 'arrachant' la carte du lecteur NFC alors qu'elle est en train d'être encodée ; on retrouve alors l'erreur 0x4d3).
...