如何对应用程序保密?
Posted
技术标签:
【中文标题】如何对应用程序保密?【英文标题】:How to keep the app secret a secret? 【发布时间】:2012-01-30 23:10:17 【问题描述】:每个新的 Play 应用都会在其配置文件中生成一个新的应用机密。
application.secret=asdfadsfdasf
我正在开发一个将部署在 Heroku 上的开源应用程序。如何将应用程序保密(例如,不将其提交到源代码管理)?
应用机密到底用在了哪里?也许出于我有限的目的,我真的不必保守秘密?
【问题讨论】:
【参考方案1】:您可以将密钥外部化为环境变量。
在conf/application.conf
中直接替换
application.secret=abc123...
与
application.secret=$APP_SECRET
然后在 Heroku 中设置这个配置变量:
$ heroku config:add APP_SECRET=abc123...
现在您可以基于每个应用管理机密,避免将它们检入版本控制。
【讨论】:
如果您不打算使用 heroku 进行部署?有没有使用类似 jasypt 的选项【参考方案2】:看起来这个秘密很重要,但您可以为生产和开发生成新的秘密。因此,对于开发,您可以将其签入 SVN,然后生成一个不同的用于生产。
http://www.playframework.org/documentation/1.0/production
【讨论】:
但是我在 SVN(好吧,git)中的 application.conf 将被部署到生产环境中。换种说法,我想将我的 application.conf 置于源代码控制之下。我的生产部署将只是一个git push
到 Heroku。那么,我应该运行一个部署后脚本来更改应用程序密钥吗?但是......这个脚本是否存储在源代码管理下?部署到 Heroku 时有哪些实用的解决方案?
我想我不是在提倡简单地使用 git push,而是你需要一个脚本在推送到生产之前生成一个新的密钥,这样就不会被检查到源代码控制中。我不确定的问题是,如果您每次按下时都重新生成该密钥会产生问题吗?如果不是,那么在生产环境中存储秘密可能就不是那么重要了。
我认为更改应用程序密钥不是一个好主意。如果您在某些东西上签名(例如散列用户密码),您需要能够重复这个确切的签名,我相信这确实(应该)使用应用程序密码。以上是关于如何对应用程序保密?的主要内容,如果未能解决你的问题,请参考以下文章