使用加密密码运行CURL时发现问题

时间:2017-01-03 16:49:28

标签: curl encryption openssl base64

我正在尝试使用加密密码

运行以下CURL命令

curl --digest -L -D - http://localhost:9991/management --header“Content-Type:application / json”-d'{“operation”:“composite”,“address”:[],“steps” “:[{”operation“:”add“,”address“:{”deployment“:”testtde.war“},”content“:[{”url“:”file:/ home / ec2-user / test1。 war“}]},{”operation“:”deploy“,”address“:{”deployment“:”testtde.war“}}],”json.pretty“:1}' - u admin:$ 1 $ xyz $ 9 uJTsPowG.xkq8xKpVBrP。

我已使用以下两种方法加密密码

  1. openssl passwd -1 -salt xyz Test12$ Test12 $是我要加密的密码
  2. echo Test12$ | base64
  3. 但它不起作用,如果我提供普通密码,它可以正常工作但是从上面两种方法产生的加密密码不知何故不起作用。

    我在Linux机器上运行它,

    任何帮助?

1 个答案:

答案 0 :(得分:0)

我不知道您正在与哪个应用程序通信,但这是有道理的。

OpenSSL passwd命令散列输入,它不加密。这看起来似乎是一种迂腐的差异,但它对于理解这里发生的事情以及为什么这一点非常重要。 加密可逆保护操作,需要特殊的秘密材料知识(即密钥)(可逆地保护数据而不需要密钥称为编码,并包括Base64,十六进制等)。最后,散列不可逆保护操作,不需要秘密数据。散列的要点是使用确定性算法来获取一些输入数据并将其转换为输出数据,从中极难(读取:在数学上不太可能)以确定原始输入。

为什么这用于密码存储而不是加密?因为要加密和解密原始密码,您需要加密密钥。如果恶意实体获得对此加密密钥的访问权限,则他们可以访问所有原始密码。同样,如果他们可以暴力破解其中一个密码并恢复该密钥,他们就会获得所有密码。通过散列原始密码,泄露/被盗"哈希"不要公开原始的原始密码,并且应用程序可以在提供登录时评估原始密码,而不存储原始密码(因为哈希函数是确定性的,并且将始终为相同的输入返回相同的输出)。

具体来说,passwd -1告诉OpenSSL使用"基于MD5的BSD密码算法1"。虽然这不是一个非常强大的散列算法,但由于其早期使用,它很常见。您的第二次尝试只是Base64编码原始密码。

现在,当您发送原始密码时它起作用的原因,但两个转换都不是如下 - 应用程序将执行将原始(原始)密码转换为散列形式所需的任何散列操作。如果您尝试以此散列形式提供密码,则无法验证,因为H(x) != H(H(x)) - 散列的散列不等于原始散列(对于任何非平凡和精心设计的散列)功能)。您需要将原始密码发送到应用程序才能成功进行身份验证(您还可以研究"客户端散列"但它几乎总是与服务器端散列一起用于资源平衡,而不是一个替代品)。

我的意思是你正在努力保护"您通过网络连接将密码发送到应用程序时的密码,以防止窃听。这样做的方法是为应用程序启用HTTPS(最好使用TLSv1.1 +),以便使用临时会话密钥对客户端和服务器之间的所有通信进行加密(在受保护的握手过程中通过客户端和服务器进行协商加密)服务器证书中包含的公钥)。然后,当您发送凭据时,它们只能由保存相应私钥的服务器恢复。

TL; DR 在通过cURL发送之前不要操纵您的密码;请改用TLS。