如何在客户端和服务器之间安全地共享密码?



通常在用户登录时,将用户详细信息发送到服务器以验证用户。在飞行过程中如何以最好的方式保护这些凭证?

主要问题:

  1. 我知道密码是多次散列的,以保证它们的安全。此外,TLS还维护了运行中的安全性,但这是保证交易细节安全的唯一方法吗?还是网站添加了自己的安全层?
  2. 在我们的例子中,我们想要发送一个密码到后端,在那里将调用第三方应用程序的另一个API(使用密码授予)。我们不能散列密码,我们将在后端需要它。TLS是否足以在飞行中保护它?
  3. 我们还计划在客户端通过RSA(公钥)实现和保护密码,并在后端解锁密码以供使用。我们应该考虑RSA吗?
  1. 我知道密码是多次散列的,保持它们的安全。此外,TLS还维护了运行中的安全性,但这是保证交易细节安全的唯一方法吗?还是网站添加了自己的安全层?

很少有在TLS之上分层更多加密的情况是有益的。你的案子似乎不适合他们。所以TLS就足够了。TLS已经在传输过程中提供了加密。RSA也会这么做。纵深防御意味着将不同的安全机制层层叠加。
您可以在客户端创建一个中间密码来散列密码,但是考虑到您的2。问题,这不是你能做的。

  1. 在我们的例子中,我们想要发送一个密码到后端,在那里将调用第三方应用程序的另一个API(使用密码授予)。我们不能散列密码,我们将在后端需要它。TLS是否足以在飞行中保护它?

可以,但是让客户端(您的服务器)验证证书链,并且不接受协议降级。

  1. 我们还计划在客户端通过RSA(公钥)实现和保护密码,并在后端解锁以供使用。我们应该考虑RSA吗?

不,只需使用TLS 1.2或更高版本的有效服务器证书,并让客户端验证证书链(浏览器自动为您完成)。

请记住,TLS需要一个信任根。大多数客户端库以及许多浏览器都使用操作系统的可信根存储。服务器提供的证书链应该以可信根存储库中的一个证书结束。
您可以使用自签名证书,但是客户机需要锁定该自签名证书的公钥。

最新更新