【问题标题】:Play Framework 2.1 Password Encryption [duplicate]Play Framework 2.1 密码加密 [重复]
【发布时间】:2015-08-18 03:26:57
【问题描述】:

我有一个与数据库通信的应用程序,我必须从我的application.conf 加载数据库连接的凭据。我想要我的凭据,至少是application.conf 文件中加密的密码。我找不到一些关于它如何与 Play 配合使用的好的文档。

我的意思是我可以使用任何加密库,加密密码,将其存储到application.conf 并在我连接到数据库时解密。我想知道的是一些关于它如何适合 Play 框架的建议。是否有一些内置插件或可以用于加密的东西?

【问题讨论】:

  • 有什么建议吗?

标签: database encryption playframework cryptography passwords


【解决方案1】:

您不需要在自己的系统中加密任何内容。只要确保您的服务器是安全的。

由于您需要让您的应用程序访问密码,因此有权访问您系统的攻击者无论如何都可以获取您的密码。

但是永远不要将您的密码检查到 git(或颠覆或其他)!

相反,你应该做的是:

  1. 将此行添加到您的application.conf

    include "secret.conf"
    
  2. 在您的 conf 文件夹中创建 secret.conf,并将您的所有凭据保存在此文件中。

  3. secret.conf 添加到您的.gitignore,这样它就不会进入您的Git。
  4. 在您的服务器上手动添加和更新secret.conf-文件。

如果您使用的是 Linux 系统,那么控制对 secret.conf 文件的读取访问也很聪明,就像 @Roman 所说:

确保只有运行 play 的用户有权读取该文件。

【讨论】:

  • 您也可以使用keywhiz 之类的东西来管理机密。如果你使用 Docker swarm,你可以使用内置的secret management,或者如果你使用 AWS,它们有 KeyManagement。您可以在Wikipedia 上找到更多密钥管理解决方案
【解决方案2】:

实际上,加密您的数据库凭据是没有用的。这样,您必须在某处存储密钥来解密凭据,这会导致完全相同的问题。 相反,您可以在生产服务器上存储application-prod.conf,您可以在其中覆盖application.conf 属性。确保只有运行 play 的用户有权读取该文件。

include "application"

db.default.password="yoursecret"

然后运行您的应用程序:

/path/to/yourapp/bin/yourapp -Dconfig.file=/path/to/application-prod.conf

使用相同的方法来保护应用程序机密。请参阅https://www.playframework.com/documentation/2.4.x/ApplicationSecrethttps://www.playframework.com/documentation/2.1.x/Configuration

【讨论】:

  • 关于读取权限的要点!
  • 根据 Play 文档,我们还有其他选项可以覆盖配置: * 运行 Play 时使用 JVM 选项:-Ddb.default.password=secret * 使用 application.conf 中的环境变量:db.default .password=${?DB_SECRET}
  • 或者我们可以使用 GlobalSettings 中的 onLoadConfig() 来修改加载后的配置(例如解密密码)。见stackoverflow.com/questions/16088411/…
猜你喜欢
  • 2013-03-30
  • 1970-01-01
  • 2015-11-12
  • 2012-07-21
  • 2011-05-06
  • 2018-08-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多