Publié par
Il y a 8 années · 4 minutes · Java / JEE

Maven Definitive Guide FR – chiffrez vos mots de passe

maven-logo
Pour en avoir parlé fin septembre, vous savez peut-être que je participe à la traduction française du Maven Definitive Guide. Comme vous pouvez le constater, la traduction est maintenant bien avancée, nous lancerons d’ailleurs probablement très bientôt les demandes de relecture de la seconde et dernière partie (vous en serez informé sur ce blog).

Je profite de cette occasion pour vous en présenter un extrait en prenant l’exemple d’une fonctionnalité que je ne connaissais pas avant de m’y atteler : comment chiffrer vos mots de passe dans vos Settings Maven.

Si vous utilisez Maven pour déployer vos artefacts sur des dépôts distants ou tout autre service distant nécessitant l’utilisation de mots de passe, la meilleure solution est de stocker ces mots de passe dans vos Settings Maven. Sans un mécanisme pour chiffrer ces mots de passe, le fichier ~/.m2/settings.xml devient rapidement une faille de sécurité, car il contient les mots de passe d’accès à vos différents serveurs en clair. Pour éviter ce problème, Maven 2.1 a introduit une fonctionnalité qui permet de chiffrer vos mots de passe. Pour ce faire, vous devez commencer par créer un mot de passe maître et stocker celui-ci dans un fichier de security-settings.xml à l’emplacement ~/.m2/settings-security.xml. Vous pouvez ensuite utiliser ce dernier pour chiffrer vos autres mots de passe, ceux que vous deviez stocker en clair dans vos Settings Maven (~/.m2/settings.xml).

Pour illustrer cette fonctionnalité, regardons le processus utilisé par Maven pour récupérer le mot de passe non chiffré d’un serveur à partir des paramètres d’un utilisateur. Le schéma ci-dessous présente ce processus. Un utilisateur peut faire référence à un serveur en utilisant un identifiant dans le POM d’un projet, Maven recherche alors le serveur correspondant dans ses settings. Une fois trouvé, Maven utilisera le mot de passe associé à celui-ci. Le mot de passe est stocké en clair dans ~/.m2/settings.xml, il est donc facilement accessible à toute personne qui dispose des droits de lecture sur ce fichier.

Maintenant, regardons comment Maven utilise des mots de passe chiffrés. Le diagramme ci-dessous présente ce processus.

Pour configurer la fonctionnalité de chiffrage des mots de passe, créez le mot de passe maître en exécutant l’une des commandes suivantes :

shell> mvn -emp 
{rsB56BJcqoEHZqEZ0R1VR4TIspmODx1Ln8/PVvsgaGw=}

ou

shell> mvn --encrypt-master-password 
{rsB56BJcqoEHZqEZ0R1VR4TIspmODx1Ln8/PVvsgaGw=}

Maven affiche alors une copie de la version chiffrée du mot de passe sur la sortie stantard. Copiez celui-ci et collez-le dans le fichier ~/.m2/settings-security.xml comme le montre l’exemple suivant.


  {rsB56BJcqoEHZqEZ0R1VR4TIspmODx1Ln8/PVvsgaGw=}

Après avoir créé le mot de passe principal, vous pouvez commencer à chiffrer vos mots de passe pour les utiliser dans vos settings. Pour chiffrer un mot de passe à l’aide du mot de passe maître, utilisez l’une des commande suivante mvn -ep ou mvn --encrypt-password. Imaginons que vous disposez d’un gestionnaire de dépôt et que vous avez besoin d’un utilisateur « deployment » et d’un mot de passe « qualityFIRST » pour vous y connecter. Pour chiffrer ce mot de passe, utilisez la ligne de commande suivante :

shell> mvn -ep qualityFIRST
{uMrbEOEf/VQHnc0W2X49Qab75j9LSTwiM3mg2LCrOzI=}

Copiez ensuite le mot de passe chiffré affiché sur la sortie standard et collez-le dans vos settings Maven.


  
    
      nexus
      deployment
      {uMrbEOEf/VQHnc0W2X49Qab75j9LSTwiM3mg2LCrOzI=}
    
  
  ...

Lorsque vous exécutez un build Maven qui a besoin d’interagir avec le gestionnaire de repository, Maven récupérera le mot de passe principal à partir du fichier ~/.m2/settings-security.xml et utilisera celui-ci pour déchiffrer le mot de passe stocké dans votre fichier ~/.m2/settings.xml. Maven utilisera ce mot de passe déchiffré pour se connecter au serveur.

Quels sont les bénéfices d’un tel mécanisme ? Il vous permet d’éviter de stocker en clair vos mots de passe dans le fichier ~/.m2/settings.xml. Notez que cette fonctionnalité ne prévoit pas le chiffrage du mot de passe lors de l’envoi de celui-ci sur le serveur distant. Il est toujours possible, pour une personne mal intentionnée, de récupérer vos mots de passe en analysant les flux réseau.

Pour encore plus de sécurité, vous pouvez demander à vos développeurs de stocker le mot de passe maître chiffré sur un périphérique de stockage amovible comme un disque dur USB. En utilisant cette méthode, un développeur doit brancher son disque amovible sur sa station de travail lorsqu’il veut effectuer un déploiement ou une quelconque interaction avec un serveur distant. Pour cela, votre fichier ~/.m2/settings-security.xml doit contenir une référence vers l’emplacement réel de votre fichier settings-security.xml. Cette configuration passe par l’utilisation de la balise relocation.


  /Volumes/usb-key/settings-security.xml

Ainsi, le développeur peut stocker son fichier settings-security.xml sur son emplacement personnalisé /Volumes/usb-key/settings-security.xml et s’arranger pour que ce fichier ne soit disponible que s’il est assis devant sa station de travail.

Erwan Alliaume

Passionné par les technologies Java/JEE depuis sa sortie de l’EPITA, Erwan Alliaume est aujourd’hui consultant chez Xebia. Il intervient depuis 2 ans sur des missions de développement et d’architecture pour l’un des leaders mondiaux de la production et de la distribution de contenus multimédia. Expert technique polyvalent, Erwan a été amené très tôt à prendre des responsabilités sur des projets de taille significative. Il a notamment développé des compétences clé dans la mise en place de socle de développement, la métrologie et les audits de performance et de qualité.

Erwan participe également activement au blog Xebia ou il traite aussi bien de sujets d’actualités que de problématiques techniques.

One thought on “Maven Definitive Guide FR – chiffrez vos mots de passe”

  1. Publié par Mike, Il y a 8 années

    Très bon article, merci !

    C’est incommensurablement mieux qu’en clair, au moins du fait qu’en éditant un fichier settings à coté d’un collègue, je ne vais pas lui montrer mes mots de passe.
    Mais finalement, le contenu de settings-security.xml n’est jamais qu’une clé et si on ne peut pas mettre de passphrase, on ne fait que compliquer un peu le travail de l’apprenti « pirate ».

    On ne peut toujours pas faire en sorte que Maven demande une passphrase ?

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *