如何在客户端和服务器之间安全地共享密码?
How are passwords securely shared between the client and server?
通常当用户登录时,用户详细信息会发送到服务器以验证用户身份。这些凭证在飞行过程中如何得到最好的保护?
主要问题:
- 我知道密码经过多次哈希处理,以保证它们的安全。 TLS 还维护飞行中的安全性,但这是保证交易详细信息安全的唯一方法,还是网站会添加任何自己的安全层?
- 在我们的例子中,我们想要将密码发送到后端,其中另一个 API 将被调用(使用密码授予)第三方应用程序。我们无法对密码进行哈希处理,我们将在后端需要它。 TLS 是否足以在飞行中保护它?
- 我们还计划在客户端通过 RSA(public 密钥)实施和保护密码,并在后端解锁以供使用。我们应该考虑 RSA 吗?
- I understand the passwords are many times hashed, keeping them secure. Also TLS maintains the in-flight security, But is that the only way the transaction details are kept secure or do websites add any of their own layer of security?
在极少数情况下,在 TLS 之上分层更多加密是有益的。你的情况似乎不适合他们。所以 TLS 应该足够了。 TLS 已经提供传输中的加密。 RSA 也会这样做。纵深防御意味着将不同的安全机制相互叠加。
您可能会在客户端对密码进行哈希处理以创建一个中间密码,但考虑到您的 2. 问题,这不是您可以做的。
- In our case, we want to send a passcode to the backend, where another API will be called (that uses password grant) of a third party application. We cannot hash the password, we'll need it in the backend. Will TLS be sufficient for securing it in flight?
是,但让客户端(您的服务器)验证证书链并且不接受协议降级。
- We were also planing to implement and secure the passcode by RSA (public key) on the client side and unlock it on the backend for use. Should we consider RSA?
不,只需使用具有有效服务器证书的 TLS 1.2 或更高版本,并让客户端验证证书链(浏览器会自动为您完成)。
请记住,TLS 需要信任根。大多数客户端库以及许多浏览器都使用操作系统的受信任根存储。服务器提供的证书链应以受信任的根存储中的一个证书结尾。
您可以使用自签名证书,但客户端需要固定该自签名证书的 public 密钥。
通常当用户登录时,用户详细信息会发送到服务器以验证用户身份。这些凭证在飞行过程中如何得到最好的保护?
主要问题:
- 我知道密码经过多次哈希处理,以保证它们的安全。 TLS 还维护飞行中的安全性,但这是保证交易详细信息安全的唯一方法,还是网站会添加任何自己的安全层?
- 在我们的例子中,我们想要将密码发送到后端,其中另一个 API 将被调用(使用密码授予)第三方应用程序。我们无法对密码进行哈希处理,我们将在后端需要它。 TLS 是否足以在飞行中保护它?
- 我们还计划在客户端通过 RSA(public 密钥)实施和保护密码,并在后端解锁以供使用。我们应该考虑 RSA 吗?
- I understand the passwords are many times hashed, keeping them secure. Also TLS maintains the in-flight security, But is that the only way the transaction details are kept secure or do websites add any of their own layer of security?
在极少数情况下,在 TLS 之上分层更多加密是有益的。你的情况似乎不适合他们。所以 TLS 应该足够了。 TLS 已经提供传输中的加密。 RSA 也会这样做。纵深防御意味着将不同的安全机制相互叠加。
您可能会在客户端对密码进行哈希处理以创建一个中间密码,但考虑到您的 2. 问题,这不是您可以做的。
- In our case, we want to send a passcode to the backend, where another API will be called (that uses password grant) of a third party application. We cannot hash the password, we'll need it in the backend. Will TLS be sufficient for securing it in flight?
是,但让客户端(您的服务器)验证证书链并且不接受协议降级。
- We were also planing to implement and secure the passcode by RSA (public key) on the client side and unlock it on the backend for use. Should we consider RSA?
不,只需使用具有有效服务器证书的 TLS 1.2 或更高版本,并让客户端验证证书链(浏览器会自动为您完成)。
请记住,TLS 需要信任根。大多数客户端库以及许多浏览器都使用操作系统的受信任根存储。服务器提供的证书链应以受信任的根存储中的一个证书结尾。
您可以使用自签名证书,但客户端需要固定该自签名证书的 public 密钥。