Nous avons mis en place un cachet établissement RGS** afin de sceller automatiquement nos documents en fin de circuit de signature. Pour cela, nous utilisons un certificat fourni par Certinomis, stocké sur une clé cryptographique Gemalto IDPrime 940c.
Sources et Retex
Nous nous sommes principalement appuyés sur les documentations et retours d’expérience suivants :
Pré-requis
paquets nécessaires :
- usbip
matériel utilisé :
- Clé Gemalto IDPrime 940c
- Raspberry pi 4 modèle B 4GB + Alimentation usbc 15W (kubii.com)
- Support de serveur en rack U1 pour Raspberry Pi (kubii.com)
OS : Debian 13 pour ARM
Architecture
- Serveur USB (Raspberry Pi)
héberge physiquement la clé et l’exporte via USB/IP. - Client (serveur Esup-Signature)
importe le périphérique USB distant pour l’utiliser localement.
Installation et configuration coté serveur (raspberry pi)
Le paquet usbip permet de configurer le module usbip inclus dans le noyau linux.
apt install usbip modprobe usbip-core modpreobe usbip-host
Pour charger automatiquement les modules au démarrage du système, créer le fichier /etc/modules-load.d/usbip.conf et inclure le nom des modules (un par ligne)
Identification du périphérique USB
Identifier le numéro de bus sur lequel est connecté le périphérique :
usbip list -l
Exemple de sortie :
- busid 1-1.2 (413c:2107) Dell Computer Corp. : KB212-B Quiet Key Keyboard (413c:2107) - busid 1-1.3 (096e:0503) Feitian Technologies, Inc. : SCR301 (096e:0503)
Dans cet exemple, le lecteur de carte est connecté sur le busid 1-1.3.
Export manuel du périphérique
usbipd
usbip bind --busid=1-1.3
Le périphérique devient alors accessible à distance.
Par défaut, usbipd écoute sur le port TCP 3240.
Automatisation avec systemd
Pour automatiser l’export, créer un service systemd :
[Unit] Description=export signature cachet sur IP After=network-online.target [Service] Type=simple User=root ExecStart=/sbin/usbipd ExecStartPost=/sbin/usbip bind --busid=1-1.3 ExecStop=/sbin/usbip unbind --busid=1-1.3 Restart=no [Install] WantedBy=multi-user.target
Évidemment, si l'on connecte la clé sur une autre port, le busid ne sera plus le même.
Par défaut, usbipd utilise le port 3240.
Installation et configuration coté client (esup-signature)
apt install usbip modprobe usbip-core modprobe vhci-hcd
Pour charger automatiquement les modules au démarrage du système, créer le fichier /etc/modules-load.d/usbip.conf et inclure le nom des modules (un par ligne)
Périphériques USB distants :
Pour afficher les périphériques exportés par le serveur :
usbip list -r <IPduServeur>
pour attacher un périphérique usb distant :
usbip attach -r <IPduServeur> -b 1-1.3
Options :
- -r : adresse du serveur USB/IP
- -b : busid du périphérique distant
Le périphérique apparaît alors comme un périphérique USB local sur le serveur client.
Automatisation avec systemd
[Unit] Description=import usb sur IP After=network-online.target [Service] Type=oneshot User=root ExecStart=/usr/sbin/usbip attach -r IPduServeur -b 1-1.3 ExecStop=/sbin/usbip detach -p 0 Restart=no RemainAfterExit=yes [Install] WantedBy=multi-user.target
Gestion de plusieurs périphériques
Il est possible d’exporter plusieurs périphériques USB.
Dans ce cas :
- créer un service systemd par périphérique
- utiliser le busid correspondant
Il faut également définir le démarrage de usbipd dans un service dédié.