Esup-Signature

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.

...

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