为啥不每次 Flask 启动时生成密钥?

Posted

技术标签:

【中文标题】为啥不每次 Flask 启动时生成密钥?【英文标题】:Why not generate the secret key every time Flask starts?为什么不每次 Flask 启动时生成密钥? 【发布时间】:2015-02-01 22:35:02 【问题描述】:

使用会话时,Flask 需要密钥。在我见过的每个示例中,密钥都是以某种方式生成的,然后存储在源代码或配置文件中。

永久存储它的原因是什么?为什么不简单地在应用程序启动时生成它?

app.secret_key = os.urandom(50)

【问题讨论】:

【参考方案1】:

密钥用于签署会话 cookie。如果您必须重新启动应用程序并重新生成密钥,则所有现有会话都将失效。这可能不是您想要的(或者至少,不是使会话无效的正确方法)。对于依赖密钥的其他任何东西都可以采用类似的情况,例如由 itsdangerous 生成的令牌以提供重置密码 url(例如)。

应用程序可能需要重新启动,因为崩溃,服务器重新启动,或者因为您正在推送错误修复或新功能,或者因为您使用的服务器产生新进程等。所以您可以'不要依赖服务器永远启动。

标准做法是向 repo 提交一些一次性密钥(以便开发机器有 一些东西),然后在部署时在本地配置中设置密钥。这样,密钥就不会泄露,也不需要重新生成。

还有运行依赖于应用程序上下文的辅助系统的情况,例如用于运行后台任务的 Celery,或应用程序的多个负载平衡实例。如果应用程序的每个运行实例具有不同的设置,在某些情况下它们可能无法正常协同工作。

【讨论】:

以上是关于为啥不每次 Flask 启动时生成密钥?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 SSL 握手会给出“无法生成 DH 密钥对”异常?

为啥相同的 HSM 密钥每次都验证到不同的以太坊地址?

为啥quartz的表每次都要全部删除然后再从新生成才能按照规定的时间来执行难呢

为啥我无法使用 PEM_read_RSAPublicKey 读取 openssl 生成的 RSA pub 密钥?

vue+flask前后端信息传输非对称加密

为啥新版 Google Play 管理中心网站不再使用“private_key.pepk”文件生成应用签名密钥?