_netrc / .netrc alternativa a cURL

He estado buscando en Git y cURL y he encontrado algunas references sobre .netrc, que pueden ayudar con http auth. El problema es que .netrc es tonto porque almacena las passwords en formatting de text plano, lo cual es un gran problema de security para la solución que estoy desarrollando.

¿Hay una alternativa al enfoque .netrc? ¿Es posible desarrollar un "backend de authentication" para cURL?

Actualización de abril de 2013, git 1.8.3 :

Se ha agregado una nueva cnetworkingencial de solo lectura (en contrib/ ) para interactuar con los files .netrc/.authinfo .

Esa secuencia de commands le permitiría usar files gpg encriptados de netrc , evitando el problema de tener sus cnetworkingenciales almacenadas en un file de text sin formatting.

Para habilitar esta cnetworkingencial de ayuda:

 git config cnetworkingential.helper '$shortname -f AUTHFILE1 -f AUTHFILE2' 

(Tenga en count que Git antepondrá " git-cnetworkingential- " al nombre del asistente y lo searchá en la ruta).

Vea un ejemplo completo en " ¿Hay alguna manera de saltear la escritura de contraseña al usar https:// github "?


Respuesta original (marzo de 2011)

La única alternativa (excepto no usarlo y pasar por ssh) sería:

  • encriptar ese file (por ejemplo, en Windows, con la utilidad ' crypt ')
  • descifrarlo justo antes de la llamada curl
  • luego encriptar de nuevo justo después de la llamada curl

Tenga en count que en Unix, ese file normalmente está en el modo 600, solo usted puede verlo.
En Windows ( _netrc ), ese file debe estar en su HOMEDIR , que no debe ser accesible (a través de la ACL de Windows) a ningún otro usuario.
Pero todavía no me gusta una contraseña en text plano …

Este hilo , por ejemplo, pasa por el mismo process (en Unix para gpg, pero aún ilustra la solución muy bien):

A continuación he incluido un script de muestra que implementa el uso de ' gpg ', que puede usarse para encriptar el contenido de un file. Está en script de shell, sin embargo, estoy seguro de que puedes adaptar el concepto a tu script de Perl.

Creo que para tus necesidades la idea básica es:

  1. crea un file de text sin formatting con tu contraseña (y otra información)
  2. encriptar usando gpg y almacenar el file encriptado; disponer del file de text sin formatting
  3. Dentro de la secuencia de commands de Perl, descifrar el file encryption en un file de text sin formatting
  4. leer los contenidos del file de text plano durante el time de ejecución de su script
  5. elimine el file de text sin formatting lo antes posible.

Aquí hay solo un ejemplo del funcionamiento de gpg:

 #!/bin/sh echo -n "Enter your password: " read pass FILE=~/mypassword echo $pass > $FILE gpg -c $FILE rm -f $FILE gpg $FILE.gpg MYPASSWORD=`cat $FILE` rm -f $FILE echo $MYPASSWORD