Apiuncrypt décrypter les résultats de laboratoire Apicrypt depuis un serveur de mail unix

Fonctionnement

Le laboratoire avec qui on traite crypte les résultats de laboratoires avec des clés personnelles, les envoie à Apirypt (notre tiers de confiance) qui les décrypte, les recrypte avec nos clés avant de nous les envoyer (sur une BAL dédiée à ça).

Apicrypt propose facilement deux solutions:

  • on utilise ou paramètre un client mail (dans ce cas c'est manuel)
  • on ajoute leur "proxy" mail dans le lan. là c'est surtout adapté quand on a plusieurs services et plusieurs boites aux lettres pour les résultats de laboratoire.

La première solution est chiante car manuelle. Le seconde fait ajouter un élément dans le réseau pour pas grand chose.

Mais comme ils distribuent l'appli codée en C [1] qui peut décrypter depuis un système UNIX, profitons en.

Mon serveur de mails marche au format maildir, ça me permet de séparer simplement les mails.

Vous verrez, à une étape, le message transite en clair sur le serveur où se trouve l'application de dossier de soins. Je précise que le serveur de mails est sur la passerelle et que cette étape se fait via la carte réseau dans le lan, dans une DMZ. De plus physiquement les deux machines sont branchées sur le même switch, ce qui rendra difficile un sniffage tant que le cache d'adresses mac du répartiteur n'est pas en faute.

Monter le dossier dans lequel seront déposés les résultats de laboratoire.

Editer le fichier /etc/fstab et y ajouter la ligne suivante:

//IP-du-serveur/applic$  /media/applic cifs user,rw,username=USERNAME,password=PASSWORD,gid=1000,uid=1000,iocharset=utf8 0 0

J'utilise un compte qui a des droits minimums

Créer le point de montage

  1. mkdir /media/applic

Et monter le dossier

  1. mount /media/applic

A ce stade là, le serveur mail sait communiquer avec son voisin, pour accéder au partage réseau applic$, on en aura besoin pour déposer les résultats de laboratoire. (il savait déja le faire mais pour le partage intranet).

Installer l'appli apiuncrypt

créer les dossier nécessaires.
  1. mkdir /home/virtual/apicrypt

Le dossier home/virtual contient les "maildir" (traduction: les mails sous formes des fichiers des utilisateurs) Si c'est le dossier de "virtual" c'est parceque les utilisateurs ne sont pas (plus) des comptes unix, mais des enregistrements dans une base de données, et donc des utilisateurs virtuels. Je m'égare.... ça m'arrange de tout mettre là, car le script je vais le faire marcher par le compte système unix vmail. C'est lui qui a les droits sur les mails (hormis root) et ça m'arrange de tout lui regrouper dans son home.

je me place dans le dossier, je télécharge l'appli qui décrypte les mails, et je crée le dossier pour les clés de décriptage.

  1. cd /home/virtual/apicrypt
  2. wget http://www.apicrypt.org/page5/files/linux/apiuncrypt.tgz
  3. tar -xvf apiuncrypt.tgz
  4. mkdir Clefs

Déposer les clefs de décryptage (le master et la clé personnelle) de l'année en cours UNIQUEMENT dans le dossier Clefs (attention il est sensible à la casse le C est en majuscule).

rendre les droits à vmail

  1. chown -R vmail:vmail /home/virtual/

MAJ 21/06/2011 Pour un serveur à architecture 64 bits (testé sur une débian 6)

L'association apycript n'ayant pas mis à jour la librairie depuis 2006, forcément ça ne passe plus. Il va falloir installer la libstdc++-libc6.2-2.so.3 ... qui n'est trouvable qu'en i386.

  1. wget http://ubuntu.mirror.cambrium.nl/ubuntu//pool/universe/g/gcc-2.95/libstdc++2.10-glibc2.2_2.95.4-24_i386.deb
  2. dpkg -i --force-architecture libstdc++2.10-glibc2.2_2.95.4-24_i386.deb
  3. ln -s /usr/lib/libstdc++-libc6.2-2.so.3 /usr/lib/libstdc++libc6.1-1.so.2

Fin de la partie spécifique serveur 64 bits...

Le script qui lancera le décryptage des mails. et pousse les fichiers textes décryptés dans le répertoire où le logiciel de dossier de soins va les chercher.

Pour le moment c'est un script shell enregistré en tache cron, exécuté par le compte vmail. Je le remplacerai par des regles "mailfilter" ou procmailrc dès que je saurai le faire (plus propre).

je l'ai mis là: /home/virtual/apicrypt/Uncryptbal.sh et voici ma composition:

  1. ##!/bin/sh
  2. #by Gnieark http://blog-du-grouik.tinad.fr
  3. #version 0 fevrier 2010
  4. # Le contenu de ce code est distribué en licence Cecill V2,
  5. #qui dit grossomodo que c'est libre de droits, sauf la marque de paternité du code (pour ma gloire),
  6. #mais aussi que je ne suis pas responsable si ce code fait une connerie . Vous disposez de la source, donc pouvez le vérifier et le modifier,
  7. #je vous le met à disposition gratuitement. Il est de votre responsabilité de tester préalablement tous les cas de figures, avant sa mise en production.
  8. #la license est disponible là: http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt
  9. #
  10. #Liste les fichiers "mails d'un repertoire", décrypte le corps via la moulinette apycript et les envoie dans le dossier pour l'application de dossier de soins.
  11. #
  12. #variables chemins
  13. repertoireorigine="/home/virtual/DOSSIER DE L'ADRESSE MAIL DEDIEE AU LABO/new"
  14. repertoiredestination="/media/applic/soins/resultatslabo/Data/Reception/A classer/"
  15. cheminapiuncrypt="/home/virtual/apicrypt/apiuncrypt"
  16. chemincles="/home/virtual/apicrypt/"
  17. fichierlog="/home/virtual/apicrypt/log.txt"
  18. fichiertemp="/home/virtual/apicrypt/temp.txt"
  19. #variable d'erreur (déclenchera une alerte à la fin du script)
  20. erreur=0
  21.  
  22. #log:
  23. echo "$(date) Début du script décriptage de la bal pour les résultats laboratoire ">>$fichierlog
  24.  
  25.  
  26. #supprmmer le fichier temporaire s'il existe
  27. if [ -e "$fichiertemp" ];
  28. then
  29. rm $fichiertemp
  30. echo "$(date) Le fichier temp.txt existait, suppression">> $fichierlog
  31. else
  32. echo "$(date) Le fichier temp.txt n'existait pas (normal)">> $fichierlog
  33. fi
  34. #lister les fichiers dans le repertoire
  35. find $repertoireorigine -type f > $fichiertemp
  36.  
  37. while read line; do
  38.  
  39. $cheminapiuncrypt -s $line -k $chemincles
  40.  
  41. #vérifier si le fichier.txt a ete créé
  42. if [ -e "$line.txt" ];
  43. then
  44. echo "$(date) Le fichier $line.txt décrypté a été créé">> $fichierlog
  45. #on envoit le fichier dans son repertoire de destination
  46.  
  47. mv "$line.txt" "$repertoiredestination"
  48. fichier = basename $line.txt
  49.  
  50. #vérifier si le tranfert s'effectue
  51. if [ -e "$repertoiredestination$fichier" ];
  52. then
  53. #c'est ok
  54. rm $line
  55. echo "$(date) -OK-le fichier $line transfert ok">> $fichierlog
  56. else
  57.  
  58.  
  59. #probleme
  60. echo "$(date) -WARNING- le fichier $line.txt transfert échoué">> $fichierlog
  61. erreur=2
  62. fi
  63.  
  64. else
  65. echo "($date) -WARNING- le fichier $line n'a pas été décrypté"
  66. erreur=1
  67. fi
  68. done < $fichiertemp
  69.  
  70. if [ $erreur = 1 ];
  71. then
  72. echo "Erreur de type 1 sur l'interface laboratoire. Un des fichiers n'a pas pu être décrypté (Il est probable qu'il sagisse d'un spam ou d'un mail \"parasite\" Le message d'origine n'a pas été supprimé" > $fichiertemp
  73. mail -s "Erreur sur l'interface de laboratoire" "MAILS DES DESTINATAIRES DES ALERTES" < $fichiertemp
  74. fi
  75.  
  76. if [ $erreur = 2 ];
  77. then
  78. echo "Erreur de type 2 sur l'interface laboratoire. Le transfert d'un des fichiers décryptés n'a pas été effectué, vérifiez que $repertoiredestination est une ressource disponible" > $fichiertemp
  79. mail -s "Erreur sur l'interface de laboratoire" "MAILS DES DESTINATAIRES DES ALERTES" < $fichiertemp
  80. fi
  81.  
  82. echo "$(date) Fin du script décriptage de la bal pour les résultats laboratoire ">>$fichierlog

Il est un chouilla long, parcequ'il vérifie à plusieurs endroits si les étapes se sont bien déroulées et envoie un mail d'alerte en cas d'erreur. De plus les actions du script sont logguées.

Créer la crontab pour que le script soit exécuté automatiquement

  1. crontab -e

Aouter la ligne suivante:

  1. */5 * * * * su -c '/home/virtual/apicrypt/Uncryptbal.sh' vmail

Mise à jour des clés.

Il suffira de les déposer das le dossier prévu. et supprimer les anciennes (sinon ça marche pas)

Notes

[1] le serveur est sous debian lenny, mais pour les quelques essais sous ubuntu, j'ai eu des problèmes de dépendances ne se trouvant plus dans les paquets de la distribution

Commentaires

1. Le mardi, octobre 4 2011, 17:03 par K

Le tiers de confiance déchiffre et chiffre les données. Ce n'est plus un tiers de confiance, c'est un homme du milieu. J'espère qu'il ne vend pas les données votre tiers de confiance !

2. Le dimanche, octobre 9 2011, 14:34 par gnieark

C'est exact. le terme tiers de confiance n'est pas adapté.

Il est quand même lié contractuellement avec nous. Sur le territoire français (donc pas de problème s'il y a besoin de décharger notre responsabilité sur lui en cas de faute de sa part).

3. Le samedi, février 4 2012, 23:55 par krislec

Apparemment, la librairie libstdc++-libc6.2-2.so.3 a disparue !
Comment faire pour la remplacer ?

4. Le dimanche, février 5 2012, 00:07 par krislec

Je viens de trouver...Désolé:

# go to where the libstdc* libraries are located
cd /usr/lib
# locate them
ls -la libstdc*

# now write down the filename of the library that corresponds
# to libstdc++5, ie the oldest version

# make the symbolic link; replace <lib>
# with the name you wrote down above
sudo ln -s -T <lib> libstdc++-libc6.2-2.so.3

Source: http://ubuntuforums.org/showthread....

5. Le dimanche, février 5 2012, 20:11 par gnieark

j'avais galéré aussi sur une débian 64 bits... forcé l'utilisation d'une vieille libc 32 bits. faudra vraiment que je prenne le temps de faire la demande auprès d'apicrypt qu'ils recompilent leur utilitaire dans un truc plus récent.

6. Le mardi, février 7 2012, 23:00 par krislec

Ben en fait, j'ai pas trouvé aussi bien que çà, puisse que l'erreur persiste !
Du coup j'ai envoyé un mail à apicrypt...

pourtant je ne suis pas en 64bit

server@debian:~$ uname -a
Linux debian 2.6.32-5-686 #1 SMP Mon Jan 16 16:04:25 UTC 2012 i686 GNU/Li

(en fait debian 6.0.4 virtualisé par Virtulbox 4.1.8 sous Lion 10.7.3)

7. Le mercredi, février 8 2012, 23:57 par krislec

L'excellent support d'Apicrypt (Anthony, encore merci à lui!) vient de me fournir les bons binaires... Mais je n'arrive toujours pas à décoder mes mails, faute de savoir comment et dans quel format récupérer les mails. J'ai bien utilisé fetchmail +/- procmail mais je patauge...
Si intéressé par ces binaires... je crois que vous avez mon mail ?...

8. Le jeudi, février 9 2012, 21:20 par gnieark

plop

Oui, on va continuer cette discussion par e-mail ou par téléphone si vous voulez bien. C'est pas évident de faire des tests car il faut pour ça détourner quelques résultats e-mails cryptés.

Autre point, faut que je regarde car je n'utilise pas exactement le script tel qu'il est écrit là pour compenser un défaut de notre logiciel de dossier de soins.

9. Le jeudi, février 9 2012, 21:25 par gnieark

PS: vous souhaitez injecter les résultats de labo dans un progiciel de dossier de soins?

10. Le jeudi, février 9 2012, 21:30 par gnieark

PS2... il peut y avoir un bug au niveau du décryptage si les marqueurs de début et de fin de la zone cryptée (de tête c'est une série d'étoiles ******) sont remises dans l'entete de l'email. j'avais eu ce problème avec amavis

11. Le jeudi, février 9 2012, 22:27 par krislec

Je développe un peu à mes heures... très modestement, on va dire...

12. Le samedi, février 11 2012, 17:07 par krislec

J'attends toujours votre mail...
Si intéressé...
...

13. Le mercredi, avril 2 2014, 18:37 par jerome

Salut!

Merci pour le coup de main via Twitter la semaine dernière!

Je galère toujours pour faire fonctionner apiuncrypt sur Ubuntu 13.10

J'essaie de déchiffrer des messages reçus sur kmail.

./apiuncrypt -s apitest -k ~/Clefs

ne retourne rien! Aucun nouveau fichier n'est créé, le fichier source reste inchangé.
L'app apiuncrypt, appelée seule
./apiuncrypt
retourne:
Apicrypt : decryptage de documents texte de type corps email
(c)2005 APICEM v1.0
usage : apiuncrypt -s fichiersource [-k cheminclefs]

Le dossier Clefs contient:
Apicem.111.pem Apicem.112.pem Exxx.VXXX.114 Exxx.VXXX.a.114.key Master.114

Du coup je vois pas trop d'où ça peut venir à part de l'application qui ne fonctionne pas sous Ubuntu 13.10

Voici les librairies installées:

xxx@xxx:~$ ls -alh /usr/lib/libstdc*
-rw-r--r-- 1 root root 1,3M nov. 19 2005 /usr/lib/libstdc++-3-libc6.2-2-2.10.0.so
lrwxrwxrwx 1 root root 40 mars 10 14:25 /usr/lib/libstdc++-libc6.1-1.so.2 -> /usr/lib/libstdc++-3-libc6.2-2-2.10.0.so
lrwxrwxrwx 1 root root 33 mars 26 04:38 /usr/lib/libstdc++libc6.1-1.so.2 -> /usr/lib/libstdc++-libc6.2-2.so.3
lrwxrwxrwx 1 root root 31 nov. 19 2005 /usr/lib/libstdc++-libc6.2-2.so.3 -> libstdc++-3-libc6.2-2-2.10.0.so

Si tu as une idée, je suis preneur!

J'ai contacté l'APICEM la semaine dernière par mail mais évidemment aucune réponse ni rappel. Je leur demandais si c'était possible de recompiler leur appli au moins une fois tous les 9 ans... ou de mettre le code source à disposition de la communauté du logiciel libre. Je les appellerai demain. En 2014 le bon vieux coup de fil reste une valeur sûre dans l'informatique médicale... :)

Merci!

14. Le mercredi, avril 2 2014, 18:52 par jérôme

Je viens d'appeler le support technique d'Apicrypt et je suis tombé sur un technicien très sympathique, Benjamin, qui m'a confirmé que des binaires compilés récemment existent (2012 ou 2013). Le problème est que la version en ligne sur cette page: http://www.apicrypt.org/index.php?p... est celle de 2005.
J'espère qu'ils mettront en ligne une version récente, en téléchargement libre, comme pour les version Windows et Mac...

15. Le mercredi, avril 2 2014, 19:11 par gnieark

Hello Jerôme.
de tête, pas vu de tels binaires sur le CD apicrypt. En effet ce serait cool qu'ils fournissent des plus récents.

Comme je te le disais par mail ou via twitter, (jsais plus), J'utilise toujours les vieux binaires, mais plus exactement les scripts que j'avais décrit dans ce billet. Il faut que je le remette à jour, car c'est beaucoup plus fiable actuellement.

Il faut que je prenne le temps de mettre à jour ce billet.

Page top