避免在 http_proxy 中使用纯文本密码

避免在 http_proxy 中使用纯文本密码

我位于公司防火墙后面,这给代理领域带来了很多麻烦。我发现有两种有效的主要方法:

  1. 使用 Cntlm 的代价是无法(从命令行)连接到 HTTPS 和外部 SSH 位置。 (Cntlm 允许您使用 PassNTLMv2 对您的用户名和密码进行哈希处理(从而避免纯文本)并设置http://localhost:3128/为您的代理,然后重定向到您的“真实”代理。正如我提到的,我无法使用此方法连接到 HTTPS 和外部 SSH。)
  2. 将我的用户名和密码以纯文本形式放入http_proxy变量中,代价是以纯文本形式显示我的用户名和密码。

显然,如果不考虑安全性,我会选择选项 2。

我找到了一些解决方案,在我的.babrunrc(我使用 Babun,它基本上是 Cygwin 加上一点额外的,同样可以在 a.bashrc.zshrc虽然)中这样做

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

这样我的密码就是至少编码。如果有人来到我的电脑并输入echo $http_proxy他们会看到我的密码,但我认为没有任何办法可以解决这个问题。

有没有其他方法可以解决这个问题?或者也许是一种加密字符串而不是编码的方法?如果没有办法解决的话,当我打开提示时,我不介意输入一些密码。

答案1

使用base64并没有什么用,只是简单的转换。使用与加密数据一起存储的密钥进行加密也是没有用的,因为它仍然只是一个简单的转换。如果您担心有人访问您的配置文件,那么您需要使用配置文件中没有的密钥进行加密,这意味着您在登录时必须输入密码。

不要自己创建,而是使用现有的加密机制。

在 Linux 上,如果您使用文件加密,请使用以下命令加密您的主目录加密文件系统,或者使用 Linux 的磁盘加密层(dm-crypt、命令)加密整个磁盘cryptsetup,或者使用以下命令创建一个小型的按文件加密的文件系统环境文件系统。在后一种情况下,有一个安装 encfs 文件系统的脚本,然后运行存储在其中的脚本。

在 Windows 上,将文件放在真密/维拉密码

或者,使用密码管理器(当然,设置主密码)。可以使用以下命令从命令行查询 Gnome 的密码管理器 (gnome-keyring)secret-tool公用事业。海马提供了一个方便的 GUI,用于探索和修改密钥环以及设置主密码。

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/"

这需要 D-Bus,通常在 Linux 下默认可用(大多数现代桌面环境都需要它),但需要在 Cygwin 下手动启动(我不知道具体如何)。

1或以其他方式提供秘密材料,例如存储在智能卡上的材料。

答案2

我找到了一个解决方案:添加openssl enc -aes-128-cbc -a -d到混合中。然而,正如文中提到的接受的答案,这个选项可能不是很安全。

首先,将用户名密码组合(或等效的 Base64 编码)放入此处,

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

它将提示输入密码两次。该密码是您每次http_proxy设置时都必须输入的密码。

然后,在.babunrc(或无论你把它放在哪里),

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

如果输入是 base64 编码的,您将需要这样:

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

如果<output from above command>有一条新线,\n将适用。

相关内容