存储Web服务密码的最佳实践

4
场景:
一个网页应用程序(RoR 3.2)需要与远程 Web 服务(使用 Savon gem 的 SOAP 协议)进行通信。
Web 服务要求用户名和密码。
通信使用 SOAP,通过 VPN 进行流量传输(SOAP 没有 SSL)。
我需要存储远程 Web 服务管理员提供给我的密码。
Web 服务管理员要求我以安全的方式存储密码。
当我的 Web 服务器调用 Web 服务时,我需要使用明文原始密码。
Bcrypt 是存储密码最好的方法,但它是“单向”的。
我不能发送加密的密码,我需要一种方法来解密它,以便能够将其发送到 Web 服务中。
这似乎是一个"鸡生蛋蛋生鸡"的问题。
是否有一种安全地存储密码并能够解密以供自动化服务使用的方法?
有什么提示吗?

远程服务是否使用OAuth?那是你最好的选择。如果没有,可以看看这个问题:https://dev59.com/cFzUa4cB1Zd3GeqP8fkc - mccannf
很遗憾没有OAuth。我考虑使用SSH密钥来加密密码,并使用Devise的哈希密码作为密钥口令。我借鉴了ZenTourist(http://distributed-frostbite.blogspot.it/2010/06/file-encryption-in-ruby-with-openssl.html)使用SSH密钥的想法。 - kranz
2个回答

1
如果需要将加密信息作为明文发送,可以考虑使用强可逆密码,这可能是Web服务管理员的意思。
您可以在加密之前添加其他信息作为盐(使用任何您熟知且可以应用算法的内容,例如姓名),然后使用(例如)AES加密来加密。
然后,您可以将加密密码存储在您选择的位置。

是的,这就是我要尝试的方法(几乎与我之前发布的链接中建议的方法相同);一旦我找到正确的解决方案,我会发布它。 - kranz

0

谢谢您的建议,但我已经超越了这些解决方案。我必须签署文件,确认别人给我的密码已经被安全地存储。因此,不能使用明文、安全性靠混淆或在配置文件中使用环境变量。不将其放入版本控制系统中是非常非常非常基本的步骤...就像告诉外科医生他需要戴手套一样... - kranz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接