我们有一个与多个外部系统对话的J2EE应用程序。每个外部系统都希望我们的应用程序通过用户名/密码进行身份验证因此,每当我们与外部系统通信时,我们都需要发送用户名/密码。问题是存储这些密码。我们希望以安全的形式存储这些密码。显然我们不能使用MD5来散列密码,因为我们需要将密码发送到外部系统。所以我们需要加密密码。
此特定问题的最佳做法是什么?
答案 0 :(得分:1)
我不是专家,但我也有类似的要求。来自security.stackexchange.com的This article讨论了这个问题。接受的答案提供了替代方案简而言之,它们是:
答案 1 :(得分:1)
您可以考虑将密码存储在数据库中
使用AES-CBC,每个密码将使用相同的密钥进行加密但不同的IV,您还需要将每个密文的IV存储在数据库中,有些人建议将IV与密文分开存储。
加密/解密的唯一密钥可以存储在Web服务器的安全区域中。
此问题已在此处讨论过:Preferred recoverable method to store passwords in database
希望这对你有所帮助。
答案 2 :(得分:1)
您可以在存储和检索密码时使用gpg加密/解密。您可以将证书存储在您的服务器中(以及离线的备份副本)当然这意味着如果某人获得了您的服务器的特权访问权限,您的密码就会受到损害,但在这种情况下还有更多紧迫的事情需要担心。
答案 3 :(得分:0)
存储密码的最安全方法是避免在服务器上存储密码。而是保存密码验证程序,它可用于验证密码,但不能用于恢复密码。其中一个实施是Secure Remote Password protocol。在这个协议中:
由于密码未存储在服务器上且客户端始终未发送密码,因此无法将其窃取。