25 novembre 2013

Partage sécurisé de fichiers

Lorsque l'on souhaite partager des fichiers avec des clients, se pose très vite la question des échanges sécurisés. Il y a plein de méthodes pour permettre cela, il existe même des sites qui proposent ce type de service, ou des Réseaux Privés Virtuels spécialisés (RPVA pour les avocats, OPALEXE pour les expertises judiciaires). Je trouve ces systèmes un peu lourds et chers pour l'usage que je souhaite en faire.

Je suis donc parti en quête d'une solution peu onéreuse, facile à mettre en place (pour moi) et à utiliser (pour mes clients), basée sur des technologies simples et efficaces. J'ai mis en place, pour l'instant, la solution que je vais vous présenter, et qui peut peut-être intéresser quelques uns d'entre vous, freelance ou pas.

Tout d'abord, je voudrais rappeler que je ne suis pas un spécialiste de la sécurité informatique, quoiqu'en pensent certains de mes lecteurs. Je suis un simple informaticien, qui se considère comme "généraliste" car curieux de tous les domaines et spécialisations informatiques. Merci donc aux spécialistes de la sécurité informatique d'être tolérants à mon égard.

Objectif: permettre à un client de mon entreprise de m'adresser un ou plusieurs documents de manière simple et suffisamment sécurisée. L'échange doit pouvoir avoir lieu dans les deux sens.

Contrainte: mes clients ne connaissent pas a priori l'informatique, même si certains peuvent être très à l'aise avec cet outil. Je dois donc m'adresser au moins technophile de mes clients: cela doit être facile à utiliser par Maître Michu et son assistant(e)...

Ma solution:
La contrainte posée écarte de fait l'échange d'emails chiffrés, que je trouve trop contraignant, trop complexe avec ses clefs privées/publiques.
Les différents outils proposés sur internet, du moins ceux que j'ai étudiés, m'ont paru compliqués à imposer: DropBox, SkyDrive, GoogleDrive ne s'installent pas sur tous les systèmes, demandent des droits administrateurs, etc.
L'interface qui me semble la plus universelle aujourd'hui est celle d'un navigateur internet. La solution doit reposer sur cette interface, avec aussi peu d'installation de plugins que possible.
Il existe plusieurs plates-formes web proposant le partage de documents. Mais toutes m'ont paru peu sures ou trop chères pour demander aux avocats avec lesquels je travaille d'y stocker des documents de travail confidentiels. La solution OPALEXE est sur-dimensionnée pour l'usage que je compte en faire (et pour mon chiffre d'affaires).

Plus je réfléchissais, et plus je comprenais qu'il fallait que les données restent chez moi, et que j'en maîtrise le plus possible la chaîne de responsabilité.

J'ai donc choisi de proposer un accès sécurisé à un serveur de stockage hébergé dans mon bureau et accessible à mes clients avocats via une interface web.

Je me suis tourné tout naturellement vers le système de stockage que je possède actuellement: un NAS Synology DS713+, mais je pense que ce qui va suivre doit pouvoir s'adapter facilement à un autre système de stockage, comme par exemple un NAS4Free. En tout cas, j'ai vérifié au boulot avec un NAS QNAP TS-559 Pro II, la procédure est très semblable.


Mise en place:
Etape 0: Choisir le bon protocole sur le système de stockage

L'HyperText Transfer Protocol Secure, plus connu sous l'abréviation HTTPS, est généralement utilisé pour sécuriser les transactions financières. C'est le petit cadenas rassurant que l'on trouve sur le navigateur lorsqu'on saisit dans un formulaire des informations qu'on ne voudrait pas voir diffusées à tous les vents.

Sur un NAS Synology, pour activer HTTPS, c'est assez simple, il suffit d'aller dans le panneau de configuration, Paramètres de DSM, onglet "Service HTTP" et de cocher "Activer la connexion HTTPS". J'en profite pour cocher également "Rediriger automatiquement les connexions HTTP vers le HTTPS". J'ai laissé les ports par défaut (http sur 5000 et https sur 5001). 

Etape 1: Rendre son système de stockage accessible depuis internet.

J'ai la chance, comme beaucoup maintenant, de disposer d'une adresse IP fixe proposée par mon fournisseur d'accès internet. Sinon, je pense que j'aurais du utiliser les services du type noip.

Il me suffit donc d'aller dans l'interface d'administration de ma box pour créer une redirection de port du type {IP FIXE BOX}:443 vers {IP LAN du NAS}:5001.

Je teste avec mon téléphone portable et vérifie que l'URL https://IpFixe fonctionne bien et affiche le portail d'accès aux fichiers de mon NAS. A ce stade, j'ai un message d'avertissement de mon navigateur qui m'indique que ce site n'est pas sur. Sous Firefox, c'est assez flippant: "Cette connexion n'est pas certifiée" avec un bouton "Sortir d'ici !".

De quoi faire fuir tout(e) secrétaire d'un cabinet d'avocat. Voyons comment éviter cela.

Etape 2: Remplacer l'adresse IP par un nom de domaine.

Je gère tous mes noms de domaine chez Gandi depuis de nombreuses années. J'aime bien leur état d'esprit et leurs prix sont tout à fait corrects.

Je me rends donc dans l'interface d'administration Gandi du nom de domaine que j'ai choisi pour mon activité d'expertise privée. J'ajoute dans les informations DNS un champ "A" avec l'adresse IP FIXE BOX fournie par mon FAI et le petit nom que je souhaite lui donner. Dans mon cas, j'ai choisi "cabinet.shrdlu.fr".

Je vérifie que le serveur est accessible cette fois avec l'URL https://cabinet.shrdlu.fr

Ça marche, mais la connexion n'est toujours pas certifiée...

Etape 3: Certifier la connexion internet.

C'est la partie la plus technique. Mais elle s'avère simple grâce à tous les HOWTO disponibles sur internet. J'ai choisi de suivre celui-là (en anglais).

Je résume les commandes ici:

Sur le NAS Synology:
cd /usr/syno
mkdir ssl
cd ssl
wget http://123adm.free.fr/home/pages/documents/syno-cert_fichiers/openssl.cnf
cd
openssl genrsa -des3 -out cabinet.key 2048
openssl rsa -in cabinet.key -out cabinet.nopass.key
openssl req -nodes -new -key cabinet.key -out cabinet.csr
Sur l'interface Gandi de création d'un certificat (gratuit quand on dispose d'un nom de domaine chez eux):
- copier/coller le contenu du fichier cabinet.csr
- demander la génération du certificat
- récupérer le certificat et le coller dans un fichier cabinet.certif
- récupérer le certificat intermédiaire et le coller dans un fichier cabinet.interm

Sur le NAS Synology:
Dans "Panneau de configuration/Paramètres de DSM/Certificat", cliquer sur "importer le certificat", et fournir les fichiers suivants:
- clé privée: cabinet.nopass.key
- certificat: cabinet.certif
- certificat intermédiaire: cabinet.interm

Rebootez votre NAS et, là, miracle, l'URL:
https://cabinet.shrdlu.fr
est accessible par tous les navigateurs sans avertissement de sécurité.

Etape 4: Créer un compte client.

Les échanges avec Maître Michu se passent toujours par email. Cela commence par une prise de contact avec explications du contexte du dossier. Je demande ensuite, pour établir mon devis, un exemplaire du (pré)rapport d'expertise que j'ai à analyser. Je propose alors que ce document soit déposé électroniquement de manière sécurisée sur le serveur de stockage mis en place.

Je crée donc un compte sur mon NAS Synology, avec mot de passe adhoc, et j'adresse les informations de connexion par téléphone. J'en profite pour assister le secrétariat lors de la première connexion et lui faire faire quelques pas avec l'interface particulière du système d'accès aux fichiers Synology.

Les lecteurs intéressés par une démo proche du résultat que j'obtiens peuvent aller sur cette page. Attention, il faut penser à désactiver provisoirement AdBlock pour faire fonctionner l'accès à "File Station".

L'échange de fichiers entre le NAS distant et le poste de travail est très simple puisque l'application "File Station" interfère via Java avec le système d'exploitation.

Le client peut me transférer toutes les pièces du dossier qu'il souhaite me soumettre. Je peux également lui déposer des documents qu'il récupérera par le même moyen.

Inconvénients:

- Je suis conscient que la procédure n'est pas si "simple" que cela pour le client. C'est un point à améliorer. Cela devrait être aussi simple que d'envoyer un email.

- La bonne intégration avec le système d'exploitation du client nécessite la présence de Java (et la réponse à des messages d'alerte potentiellement anxiogènes). Les tests effectués auprès de plusieurs cabinets d'avocat ont montré qu'au moins une fois Java n'était pas installé. C'est un problème.

Mais dans l'ensemble, pour l'instant, le système fonctionne bien avec les cabinets qui l'ont testé.

Bien entendu, je suis preneur de toutes suggestions de simplification, ou pour un retour d'expérience sur une solution différente. Les commentaires sont là pour cela ;-)

21 commentaires:

  1. Avez-vous essayer owncloud? C'est ce que j'utilise et tout est basé sur la navigateur comme le peut être le syno

    RépondreSupprimer
    Réponses
    1. Je parlais d'une instance owncloud à installer sur votre syno, cela ajoute juste la gestion des users et des fonctionnalités qui sont sympathiques

      Supprimer
    2. Dans owncloud il y a cloud, mais il y a own aussi, ce qui veut dire qu'on peut l'installer chez soi.

      Supprimer
    3. Je regarde ça dès que possible, merci !

      Supprimer
    4. Il est possible d'installer owncloud sur sa machine (http://owncloud.org/install/)

      Supprimer
    5. Bonjour,
      Je suis d'accord avec owncloud, je suis en cours de déploiement sur un serveur chez gandi, avec nginx et postgresql et les utilisateurs en sont très satisfait.

      Supprimer
  2. Il existe plusieurs systèmes simples pour ça, notamment en php :
    * http://projet.idleman.fr/dropcenter/
    * https://gitorious.org/jirafeau (peut-être trop simple, un seul utilisateur peut uploader)
    * http://seafile.com plus complet (un peu plus lourd que les précédents, mais raisonnable), possibilité d'utiliser un client pour synchroniser les fichiers, mais pas nécessaire (on peut aussi uploader depuis une interface web, avec gestion des comptes, partage de dossiers, etc.)

    RépondreSupprimer
    Réponses
    1. DropCenter semble pas mal, mais fonctionne dans un seul sens: comment un de mes clients peut-il récupérer un document que je dois lui transmettre?

      Seafile semble complet, mais demande une étude de ma part pour voir en quoi il est plus simple pour le client que ce que j'ai mis en place (je suppose que Java est inutile).

      Merci !

      Supprimer
    2. Seafile me semble en effet une très bonne alternative (je l'utilise depuis peu sur un serveur dédié, pour un usage personnel) :
      - relativement simple à installer côté système / administration.
      - les librairies stockées peuvent être cryptées par un mot de gpasse supplémentaire (en plus du compte de connexion).
      - accès client de trois manières : uniquement par l'interface web sur le serveur, via l'application smartphone, ou via le "client lourd" qui a in fine les mêmes fonctionnalités qu'un dropbox (synchronisation bidirectionnelle en automatique des répertoires partagés) (java n'est pas du tout nécessaire, en effet)
      - plutôt dans la catégorie "bonnes performances" (j'y synchronise entre autre plusieurs GO de données sous forme de documents numérisés en .pdf, c'est rapide tant côté sauvegardes que relectures)

      L'avantage de seafile me semble être aussi de "décorréler" le système de stockage des fonctions du NAS en se recentrant uniquement sur la fonction de partages de documents (système qui pourrait du coup un jour très bien être migré sur un autre environnement, un simple serveur linux par ex.)

      Certaines fonctionnalités additionnelles de Seafile peuvent être intéressantes aussi (mais sont p-e / sans doute toutes en parties couvertes par le synology) : historique des consultations et des ajouts de fichiers, restauration d'une version précédente d'un fichier, gestion de groupes, pages de wiki en ligne ... - celà dit je trouve que çà va parfois presque trop loin (wiki personnel...), et j'espère que seafile ne deviendrait pas une usine à gaz bardée de fonctionnalités dispensables pour bcp).

      Supprimer
  3. Bonjour,
    Pourquoi ne pas utiliser un serveur comme OwnCloud hébergé par vos soins ? L'échange peut être bidirectionnel, et vous pouvez même partager avec une tierce personne des documents si nécessaires.
    De plus, pas besoin de java pour le client, un browser suffit.

    RépondreSupprimer
    Réponses
    1. Je regarde ça dès que possible, cela semble intéressant.

      Supprimer
  4. Bonjour et bravo pour la qualité de ton blog que je suis depuis longtemps !
    Est ce que la solution lancée par Aaron Swartz ne répondrait pas pile au besoin en étant plus simple à mettre en place ?
    https://pressfreedomfoundation.org/securedrop

    RépondreSupprimer
    Réponses
    1. A priori non, car je n'ai pas besoin de l'aspect "anonyme" qui est central dans son projet. Et j'ai besoin de pouvoir échanger des fichiers dans les deux sens. Mais merci pour le lien ;-)

      Supprimer
  5. Bonjour Zythom,

    Sur certains environnements Cloud, il existe une option permettant le partage temporaire de fichier sans nécessité d'identification. Il suffit de partager le fichier, d'indiquer une adresse email. La personne reçoit un email avec le lien vers le fichier directement sans authentification, le lien est constitué d'une chaine de caractère obscurci. En fonction du boitier NAS et avec un peu de développement, il est possible de reproduire ce type de fonctionnalité.


    RépondreSupprimer
  6. Moi j'aime bien ajaxplorer, maintenant pydio : http://pyd.io/ et Mollify : http://www.mollify.org/

    Sinon, y'en a un paquet par là : http://alternativeto.net/software/ajaxplorer/

    RépondreSupprimer
  7. Mon point de vue est tout de même de quelqu'un qui a quitté le métier depuis plus de 5 ans, toutefois :
    J'écarterais java qui est une passoire en terme de sécurité.
    Ma première piste serai de communiquer par VPN, une fois enplace, c'est simple à utiliser et assez sûr.
    ici une solution par exemple :
    http://www.levpn.fr/souscrire/
    ou si vous prenez un boitier ils ont un dossier ici :
    http://www.journaldunet.com/solutions/0605/060511-panorama-routeurs-vpn-1.shtml

    Cordialement

    RépondreSupprimer
  8. Bonjour Zythom,

    bon article comme toujours :D et les commentaires sont de qualités of course :)
    juste une question globale : comment trouvez-vous le temps de faire tout ça?

    RépondreSupprimer
    Réponses
    1. Merci ;-)
      Pour libérer du temps, j'ai un truc: je regarde très peu la télévision. Ça aide. Par ailleurs, je me décris comme un fainéant qui culpabilise beaucoup, ce qui fait que je travaille tout le temps. Mais j'ai la chance extraordinaire d'adorer mon travail et mes différentes activités. Ça aide aussi. Et j'ai une famille très compréhensive. Ça aide beaucoup.

      Supprimer
  9. Bonjour Zythom,

    une autre solution serait l'outil d'archivage 7-Zip (http://7-zip.org/), qui possède des capacités de chiffrement en AES 256 si on utilise le format de fichier .7z

    Mais ceci laisse la porte ouverte à l'envoi de fichiers en clair par le 1er Maître Michu venu, ce qui explique sûrement que vous l'ayez écartée.

    Mais ponctuellement, ou entre personnes du métier, ça dépanne ;-)

    RépondreSupprimer
  10. Bonjour,
    sinon en mode très simple il y a aussi les outils tels que ceux nommés par Korben :
    http://korben.info/comment-chiffrer-des-fichiers-partir-de-votre-navigateur.html

    RépondreSupprimer
  11. Vous vous exposez peut etres a une attaque de type SSL-stripping. Cela exploite le fait que vous acceptez des connections non-SSL. La facon dont ca marche:

    Je fait un man-in-the-middle sur la connection de votre client.
    Votre client se connecte a http://super-secure-server.zythom.com
    J'intercepte la connection et me connecte moi meme a https://super-secure-server.zythom.com

    Et voila. Le client n'a pas un petit cadenat, mais va-t-il verifier quelque choice comme ca? Si vous coupez completement le http et n'acceptez que les connections https et envoyez des liens https://super-secure-server.zythom.com a vos client, l'attaque ne fonctionnera pas car c'est HTTPS des le debut de la session et il n'y a donc pas d'opportunite d'intercepter la connection.

    RépondreSupprimer

Lectrice, admiratrice, avocate, magistrate, programmeuse, dessinatrice, chère consœur, femmes de tous les pays, lecteur, j'ai toute confiance en vous pour prendre bien soin de vérifier que votre prose est compatible avec les normes orthographiques et grammaticales en vigueur. Et si vous pouviez éviter les propos insultants ou haineux, je vous en serais reconnaissant.
N'hésitez pas à respecter ces quelques règles qui peuvent même s'appliquer en dehors de ce blog.

Les commentaires sur ce blog sont modérés. Votre message apparaîtra sur le blog dès que le modérateur l'aura approuvé. Merci de votre patience.