...
Le consortium ESUP-Portail gère un nombre de plus en plus important de documents qui doivent être signés par ESUP-Portail et souvent par un établissement membre également.
Ces documents concernent ainsi correspondent à des adhésions, des conventions, des devis, facturations etc.
L'instance esup-signature d'ESUP-Portail a vocation à faciliter facilite la dématérialisation et le flux de gestion de ces documents, notamment vis-à-vis de ces signatures.
Ainsi l'instance esup-signature d'ESUP-Portail doit permettre permet à son/sa président(e) ou un de ses représentants par délégation de signer des documents qui engagent ESUP-Portail.
Cette même instance doit permet aussi permettre de faire signer un partenaire ou d'utiliser un document déjà signé pour qu'il soit sur-signé par ESUP-Portail.
Dans le cas où le document est signé numériquement (et ne correspond pas une 'simple' signature calligraphique / apposition d'image) via une autre instance d'esup-signature ou tout autre outil, l'instance d'esup-signature d'ESUP-Portail doit permettre de conserver conserve les signatures numériques déjà présentées. Si les documents signés via ESUP-Portail de manière dématérialisée ne nécessitent pas l'usage d'une signature qualifiée (type RGS**) de personnes *physiques*, on souhaite préserver préserve ainsi toute signature de ce type qui aurait pu être utilisée en amont de la signature ESUP-Portail par un de nos partenaires.
...
En résumé, d'un point de vue pratique, ces considérations nous ont amené à mettre en place une l'instance esup-signature d'ESUP-Portail proposant propose ces caractéristiques :
- Authentification authentification shibboleth avec des rôles affectées affectés en fonction des de l'attribut eduPersonPrincipalName (eppn) sans lien direct avec un annuaire LDAP ;
- Un un usage systématique d'un certificat cachet serveur RGS** tel que le supporte esup-signature.
Installation matérielle
L'instance esup-signature d'ESUP-Portail est installée et gérée par l'Université de Rouen Normandie ; elle correspond à une Machine Virtuelle opérée par la solution VMware vSphere de l'université.
Le certificat cachet serveur propre à l'esup-signature d'ESUP-Portail a été acquis auprès de certinomis par le consortium lui-même, un membre de l'université de Rouen en est le mandataire et le responsable technique serveur.
Ce certificat cachet serveur se matérialise par :
- une carte à puce SIM "Gemalto IDPrime 940C"
- intégrée dans un lecteur USB de carte à puce "Feitian SCR301"
- lui-même branché dans un hub USB réseau "Digi AnywhereUSB® 8 Plus" racké dans une baie du data center de l'université de Rouen
- et monté par linux en périphérique USB via "AnywhereUSB Manager" sur la machine virtuelle dédiée à l'instance d'esup-signature d'ESUP-Portail
Configurations logicielles
Esup-signature supporte les certificats cachets (seal) soit :
- en passant par OpenSC, qui détermine alors le driver libre à utiliser en fonction de la clef ;
- cette possibilité a l'avantage d'utiliser des logiciels libres directement disponibles via le sysème de paquets de votre distribution (opensc)
- cela présuppose cependant qu'un driver libre supporte effectivement la clef proposée ; si les certificats idprime-940 sont supportés en opensc 0.23.0, les idprime-940c ne le sont que sur la toute dernière 0.24.0 sortie en déc. 2023 et non encore disponible à cette date par exemple ; plus d'informations sur la page OpenSC sur ce même wiki.
- en passant directement par le driver / librairie propriétaire
- cette option a l'avantage d'utiliser le driver officiel livré par l'entreprise vendant le support matériel du cachet ; le support est donc normalement garanti (normalement sur tous les OS dont linux si vous installez esup-signature sur un serveur linux ; fortement recommandé)
- cela a aussi l'avantage de proposer un process de signature plus rapide (constatation à l'usage)
→ si nous avons bien validé le fonctionnement de notre cachet idprime-940c avec le driver libre proposé dans opensc 0.24.0, nous avons opté malgré tout pour l'usage du driver propriétaire.Au 27/11/2023 l'OpenSC utilisée sur la VM correspond à la branche suivante https://github.com/vbonamy/OpenSC/tree/gemalto-idprime-940c ; la future 0.24.0 devant permettre le support de cette carte SIM "Gemalto IDPrime 940C"
Le service https://esup-signature.esup-portail.org est déclaré dans la fédération ESR portée par Renater : https://registry.federation.renater.fr/entities/view/2294
L'usage de la signature par certificat cachet serveur est systématique : le cachet serveur pemert permet la réalisation de cachets systématiques côté serveur en masse sans requérir d'à une installation et ou configuration supplémentaire pour les clients signataires.
La demande d'une signature par le/la président(e) d'ESUP-Signature (ou délégataire) est possible à toute personne authentifiée (fédération ESR).
L'initiation d'un circuit autre est disponible pour certains membres d'ESUP-Portail (authentifiés et identifiés via la fédération ESR à nouveau).
Fichier application.yml
Le fichier de configuration de cette instance d'esup-signature est ainsi le suivant (à quelques paramètres/passwords de sécurité près) :
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
global: root-url: https://esup-signature.esup-portail.org domain: esup-portail.org nexu-url: http://localhost:9795 nexu-version: 1.22, 1.23 ou Esup-DSS-Client 1.0 hide-wizard: true hide-auto-sign: true hide-send-sign-request: true hide-wizard-except-roles: hide-auto-sign-except-roles: hide-send-sign-except-roles: enable-su: false enable-splash: true application-email: no-reply@esup-portail.org hours-before-refresh-notif: 24 share-mode: 1 pdf-only: true seal-certificat-pin: ****** # usage du driver propriétaire et pas d'OpenSC # seal-certificat-type: OPENSC seal-certificat-type: PKCS11 seal-certificat-driver: /usr/lib/pkcs11/libIDPrimePKCS11.so infinite-scrolling: true return-to-home-after-sign: false naming-template: "[title]" signed-suffix: "_signed" trash-keep-delay: 15 disable-cert-storage: true export-attachements: false authorized-sign-types: certsign tomcat: ajp: port: 8009 info: app: name: esup-signature description: Instance de production tags: environment: PROD management: health: ldap: enabled: false endpoints: jmx: exposure: include: '*' web: exposure: include: '*' endpoint: health: show-details: ALWAYS spring: session: jdbc: initialize-schema: ALWAYS datasource: driver-class-name: org.postgresql.Driver url: jdbc:postgresql://localhost:5432/esupsignature password: ************* username: esupsignature jdbc-url: ${spring.datasource.url} hikari: auto-commit: false tomcat: validation-query: SELECT 1; jpa: hibernate: ddl-auto: update properties: hibernate: jdbc: lob: non_contextual_creation: true show-sql: false open-in-view: false mail: host: smtp.univ-rouen.fr messages: basename: i18n/messages encoding: UTF-8 fallback-to-system-locale: false data: ldap: repositories: enabled: false thymeleaf: cache: true encoding: UTF-8 mode: HTML servlet: produce-partial-output-while-processing: false web: resources: cache: cachecontrol: max-age: 1d cache-public: true static-locations: classpath:/static mail: from: no-reply@esup-portail.org sms: enable-sms : false dss: cache-data-source-driver-class-name: org.hsqldb.jdbc.JDBCDriver cache-data-source-url: jdbc:hsqldb:mem:cachedb cache-password: cache-username: sa default-validation-policy: policy/constraint.xml server-signing-keystore-filename: validate_service.p12 server-signing-keystore-password: password server-signing-keystore-type: PKCS12 tsp-server: http://tsa.belgium.be/connect lotl-country-code: EU lotl-url: https://ec.europa.eu/tools/lotl/eu-lotl.xml oj-url: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=uriserv:OJ.C_.2019.276.01.0001.01.ENG fs: vfs-test-uri: /tmp pdf: convert-to-pdf-a: true pdf-a-level: 2 path-to-g-s: /usr/bin/gs path-to-fonts : /usr/share/fonts pdf-to-image-dpi: 72 security: shib: idp-url: https://idp.univ-rouen.fr principal-request-header: REMOTE_USER title: Fédération d'identité RENATER / Shibboleth domains-white-list-url: https://eduspot.renater.fr/eduspot/whitelist-eduspot.txt web: group-to-role-filter-pattern: for.esup-signature.role.(\w*) mapping-groups-roles: for.esup-signature.admin: ROLE_ADMIN for.esup-signature.user: ROLE_USER for.esup-signature.create-sign-req: ROLE_CREATE_SIGNREQUEST for.esup-signature.esup-coord: ROLE_CREATE_AUTOSIGN for.esup-signature.seal: ROLE_SEAL ws-access-authorize-ips: 127.0.0.1 group-mapping-spel: for.esup-signature.admin: "#eppn == '*****@univ-rouen.fr' or #eppn == '*****@univ-rouen.fr'" for.esup-signature.user: "true" for.esup-signature.seal: "true" for.esup-signature.create-sign-req: "#eppn == '****@univ-rouen.fr' or #eppn == '****@univ-rouen.fr' or #eppn == '*****@univ-lyon3.fr' or #eppn == '*****@uphf.fr' or #eppn == '****@univ-lorraine.fr' or #eppn == '****@toulouse-inp.fr'" for.esup-signature.esup-coord: "#eppn == '****@univ-rouen.fr' or #eppn == '***@univ-rouen.fr' or #eppn == '****@univ-lyon3.fr' or #eppn == '****@toulouse-inp.fr'" server: servlet: session: tracking-modes: COOKIE error: include-stacktrace: always port: 8080 tomcat: mbeanregistry: enabled: true remoteip: remote-ip-header: X-Forwarded-For basedir: ./temp max-swallow-size: -1 sign: aes-key : "0000000000000000" cades-digest-algorithm: SHA256 cades-signature-level: CAdES_BASELINE_LT container-type: ASiC_E default-signature-form: XAdES pades-digest-algorithm: SHA256 pades-signature-level: PAdES_BASELINE_LT password-timeout: 60000 signature-packaging: ENVELOPED xades-digest-algorithm: SHA256 xades-signature-level: XAdES_BASELINE_LT logging: file: name: /var/log/esup-signature/esup-signature.log pattern: console: "%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID:- }){magenta} %clr(%X{userId:-system}){cyan} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wEx" file: "%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID:- }){magenta} %clr(%X{userId:-system}){cyan} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wEx" level: root: warn org.esupportail.esupsignature: info org.verapdf: error org.apache.pdfbox: error eu.europa.esig.dss: error org.springframework.web.filter.CommonsRequestLoggingFilter: error springdoc: api-docs: enabled: true path: /api-docs swagger-ui: enabled: true supported-submit-methods: [] path: /swagger-ui.html packages-to-scan: org.esupportail.esupsignature.web.ws show-actuator: true |