[Java] Crypter le mot de passe dans les fichiers de configuration?


Answers

Oui, n'écrivez définitivement pas votre propre algorithme. Java a beaucoup d'API de cryptographie.

Si le système d'exploitation sur lequel vous installez a un magasin de clés, vous pouvez l'utiliser pour stocker vos clés de chiffrement dont vous aurez besoin pour chiffrer et déchiffrer les données sensibles dans votre configuration ou dans d'autres fichiers.

Question

J'ai un programme qui lit les informations du serveur à partir d'un fichier de configuration et voudrais crypter le mot de passe dans cette configuration qui peut être lu par mon programme et décrypté.

Exigences

  • Crypter le mot de passe en clair pour être stocké dans le fichier
  • Déchiffrer le mot de passe chiffré lu dans le fichier de mon programme

Des recommandations sur la façon dont j'irais faire ça? Je pensais écrire mon propre algorithme mais je pense que ce serait terriblement incertain.




Le gros point, et l'éléphant dans la pièce et tout ça, c'est que si votre application peut obtenir le mot de passe, alors un pirate ayant accès à la boîte peut aussi s'en emparer!

Le seul moyen de contourner ce problème est que l'application demande le «mot de passe principal» sur la console à l'aide de l'entrée standard, puis l'utilise pour déchiffrer les mots de passe stockés dans le fichier. Bien sûr, cela rend complètement impossible de faire démarrer l'application sans surveillance avec le système d'exploitation quand il démarre.

Cependant, même avec ce niveau d'ennui, si un pirate parvient à obtenir un accès root (ou même simplement un accès en tant qu'utilisateur exécutant votre application), il peut vider la mémoire et y trouver le mot de passe.

La chose à assurer, est de ne pas laisser toute la compagnie avoir accès au serveur de production (et donc aux mots de passe), et assurez-vous qu'il est impossible de casser cette boîte!




En fonction de la sécurité dont vous avez besoin pour les fichiers de configuration ou de la fiabilité de votre application, http://activemq.apache.org/encrypted-passwords.html peut être une bonne solution pour vous.

Si vous n'avez pas trop peur que le mot de passe soit décrypté, il peut être très simple à configurer en utilisant un bean pour stocker la clé du mot de passe. Cependant, si vous avez besoin de plus de sécurité, vous pouvez définir une variable d'environnement avec le secret et l'enlever après le lancement. Avec cela, vous devez vous inquiéter que l'application / le serveur tombe en panne et que l'application ne soit pas relancée automatiquement.




Je pense que la meilleure approche consiste à s'assurer que votre fichier de configuration (contenant votre mot de passe) est uniquement accessible à un compte d'utilisateur spécifique . Par exemple, vous pouvez avoir un utilisateur de l'application spécifique à l' appuser auquel seules les personnes de confiance ont le mot de passe (et auquel elles su ).

De cette façon, il n'y a pas de frais de cryptographie ennuyeux et vous avez toujours un mot de passe qui est sécurisé.

EDIT: Je suppose que vous n'exportez pas la configuration de votre application en dehors d'un environnement de confiance (ce qui, je ne suis pas sûr, aurait un sens, étant donné la question)