Éviter le mot de passe en text clair dans http_proxy

Je suis derrière un pare-feu d'entreprise, qui apporte beaucoup de problèmes dans le domaine des procurations. Il y a deux approches principales que j'ai trouvé pour fonctionner:

  1. Utilisez Cntlm au prix de ne pas pouvoir vous connecter (de la command line) aux locations HTTPS et SSH externes. (Cntlm vous permet de hacher votre nom d'user et mot de passe en utilisant PassNTLMv2 (évitant ainsi le text brut) et de définir http://localhost:3128/ comme votre proxy qui redirige ensuite vers votre "vrai" proxy Comme je l'ai mentionné, je ne peux pas me connecter à HTTPS et SSH externe en utilisant cette méthode.)
  2. Mettez mon nom d'user et mot de passe en text brut dans la variable http_proxy au prix d' avoir mon nom d'user et mot de passe en text brut.

De toute évidence, si la security n'était pas une préoccupation, je ferais juste avec l'option 2.

J'ai trouvé quelque peu une solution, en faisant cela dans mon .babrunrc (j'utilise Babun, c'est essentiellement Cygwin avec un peu plus, la même chose pourrait être dans un .bashrc ou .zshrc cependant)

 export http_proxy="http://`echo "Y21hbjpwYXNzd29yZA==" | base64 -d`@20.20.20.20:20/" 

De cette façon, mon mot de passe est au less codé. Si quelqu'un venait à mon ordinateur et tapait echo $http_proxy il verrait mon mot de passe, mais je ne pense pas qu'il y ait moyen de contourner cela.

Y a-t-il d'autres approches à cela? Ou peut-être un moyen de chiffrer la string par opposition à l'encoder? Je ne me dérangerait pas de taper un mot de passe lorsque j'ouvre une invite s'il n'y avait pas moyen de contourner.

Utiliser base64 est inutile, c'est juste une simple transformation. L'utilisation du chiffrement avec une key stockée à côté des données cryptées est également inutile car elle n'est encore qu'une simple transformation. Si vous craignez que quelqu'un n'accède à vos files de configuration, vous devez crypter avec une key qui ne figure pas dans vos files de configuration, ce qui signifie que vous devrez taper un mot de passe¹ lorsque vous vous connecterez.

Plutôt que de créer les vôtres, utilisez un mécanisme de encryption existant.

Sous Linux, si vous utilisez le chiffrement de files, cryptez votre directory personnel avec eCryptfs ou cryptez le disque entier avec la couche de encryption de disque de Linux (dm-crypt, cryptsetup ) ou créez un petit système de files crypté par file avec encfs . Dans ce dernier cas, utilisez un script qui monte le système de files encfs, puis exécute un script stocké là.

Sous Windows, placez le file sur un TrueCrypt / VeraCrypt .

Sinon, utilisez un gestionnaire de passwords (définissez un mot de passe principal, bien sûr). Le gestionnaire de passwords de gnome (gnome-keyring) peut être interrogé à partir de la command line avec l'utilitaire secret-tool . Seahorse fournit une interface graphique pratique pour explorer et modifier le trousseau de keys et définir un mot de passe principal.

 secret-tool store --label='Corporate web proxy password' purpose http_proxy location work.example.com export http_proxy="http://cman:$(secret-tool lookup purpose http_proxy location work.example.com)@192.0.2.3/" 

Ce D-Bus requirejs, normalement disponible par défaut sous Linux (la plupart des environnements de bureau modernes le nécessitent), doit être démarré manuellement sous Cygwin (je ne sais pas exactement comment).

¹ ou fournir de toute autre manière des informations secrètes, par exemple stockées sur une carte à puce.

J'ai trouvé une solution: append openssl enc -aes-128-cbc -a -d au mixage.

Tout d'abord, mettez le nom d'user mot de passe combo (ou l'équivalent codé en base64) ici,

 echo "<put it here>" | openssl enc -aes-128-cbc -a 

Il vous requestra un mot de passe deux fois. Ce mot de passe est le mot de passe que vous devrez entrer chaque fois que http_proxy est défini.

Ensuite, dans .babunrc (ou où vous le mettez),

 export http_proxy="http://`echo "<output from above command>" | openssl enc -aes-128-cbc -a -d`@20.20.20.20:20/" 

Si l'input était codée en base64, vous en aurez besoin à la place:

 export http_proxy="http://`echo "<output from above command>" | openssl enc -aes-128-cbc -a -d | base64 -d`@20.20.20.20:20/" 

Si la <output from above command> avait une nouvelle ligne, \n fonctionnera pour elle.