通过HTTPS发送的密码加密

时间:2019-02-27 08:17:36

标签: web-services encryption https passwords plaintext

美好的一天,

我对数据库/应用程序/连接安全性非常陌生,希望对项目有所帮助。

让我解释一下我的环境:

  • 我的用户名A和密码A被保存在本地计算机上的数据库(A)中。
  • 密码A是使用一种带有Salt A的哈希算法存储的。
  • 我正在通过HTTPS SOAP调用向远程安装的Web服务发送证书(用户名A和密码A)。
  • Apon收到Web服务的用户名A和密码A,将这些凭据验证到位于Web服务位置本地的数据库(B)中的表中。

我的问题: :如果有人可以访问数据库A并提取哈希密码,则他们可以使用SOAP请求来连接到Web服务。这意味着我的安全性为空且为空。

我必须寻求可能的解决方案:

解决方案1:在将密码A发送到Web服务之前,我将其解密并通过Secured HTTPS连接以纯文本形式发送。然后,Web服务将在再次验证存储在数据库B中的哈希时再次对其进行加密。

解决方案2:在将密码A发送到Web服务之前,我对现有哈希进行了第二次加密。到达Web服务时,将其解密以显示哈希,然后对数据库B进行验证。

我的问题 :是以上两种解决方案中的一种,最佳实践。如果没有,那么对于这种情况,什么是最佳的主动解决方案。

亲切问候

2 个答案:

答案 0 :(得分:3)

只需注意几句话

  • 哈希(单向,不可逆)和加密(可逆)之间存在差异。您无法解密哈希值。
  • 我假设您使用的是服务凭据,而不是用户的身份凭据

在这里,我假设您正在谈论

  

解决方案2:在将密码A发送到Web服务之前,我对现有哈希进行了第二次加密。到达Web服务时,将其解密以显示哈希,然后对数据库B进行验证。

散列有效地变成了密码,它没有为解决方案增加任何安全性

  

解决方案1:在将密码A发送到Web服务之前,我先对其进行解密,然后通过安全HTTPS连接以纯文本形式发送它。

有几种使用简单凭证(即WS-UsernameToken)对SOAP WS客户端进行身份验证的标准。有效地,客户端使用HTTPS来简单地发送其用户名和密码,以处理通道安全性。

  

我的问题:如果有人可以访问数据库A并提取哈希密码,那么他们可以使用SOAP请求来连接到Web服务

一个密码被散列,您将不能解密它,但是您也不能使用散列值作为密码。否则,您将获得“解决方案2”,并且您正在使用哈希作为密码。

实际上,这通常是一个问题。您可以搜索其他问题,例如如何在本地存储服务凭证。整个问题是-您需要存储凭据。以我的经验来看,您至少可以做的更好一些,例如对服务密码进行加密,以使它们不会简单地存储在数据库或配置文件中。最后,客户端应用程序需要在某处使用加密密钥来解密凭据。密钥也需要保护。

如果要处理用户凭证(用户身份),请不要在客户端完全存储用户密码,还有其他方法可以授权用户操作(访问令牌,jwt令牌等)。

答案 1 :(得分:0)

如果您使用的是基于XML的SOAP,则可以使用WS-Security加密密码并签署请求数据,从而确保密码的完整性和安全性,并通过https发送数据。

要存储密码,您应该使用不可逆的加密哈希,例如sha2,在服务器上,您将解密密码,创建sha2哈希并将其与数据库中的密码匹配