【发布时间】:2018-05-21 03:18:48
【问题描述】:
如何保护用于加密 Web 应用程序 appsettings.json 中敏感数据的加密密钥?
我想保护我的网络应用程序配置中的敏感数据。
在 ASP.NET MVC4 应用程序中,我们是这样做的:
- 敏感数据(例如连接字符串中的密码)不会直接添加到
web.config(或web.prod.config等),而是写入占位符变量。 - 在部署时,我们的部署服务 (Octopus) 将从其安全存储中检索敏感数据并覆盖
web.config中的变量。 - 然后,部署过程将使用
aspnet_regiis.exe加密 web.config 的敏感部分。
现在我们使用的是 ASP.NET Core,我们遵循的过程有点不同。
-
appsettings.json保存敏感数据的占位符变量, 类似于之前 web.config 的工作方式。 - 部署过程像以前一样用其安全存储中的敏感数据替换占位符。
-
我相信我需要:而不是使用
aspnet_regiis:a) 制作我自己的自定义工具来加密
appsettings.json文件的部分内容。b) 制作一个可以解密(全部/部分)
appsettings.json的自定义配置提供程序
我不明白如何保护用于 (a) 和 (b) 的加密密钥。旧方法利用服务器的机器密钥来加密文件。
我试图缓解的威胁是有人可以访问服务器上的 appsettings.json 并从中读取敏感数据(例如数据库密码等)
我也对减轻这种威胁和/或这种方法的其他问题的替代方法感兴趣。
【问题讨论】:
-
您是否在 Azure 上运行?这有一种安全的方式来存储应用程序外部的机密。
-
@JimW 不,我不在 Azure 上。
-
即使您没有在 Azure 上运行,我仍然建议使用 Azure Key Vault 来存储您的机密。对于初学者来说,它非常便宜(约 0.0159 美元 / 10 000 次操作),其次它可以从任何地方访问,甚至在 Azure 之外。您可以拥有内存缓存,因此仅在应用程序开始时(或缓存过期时)对 Key Vault 进行 REST 调用,从而防止任何进一步的延迟。第三,这是微软推荐的方法。
-
@ThePretendProgrammer 您的评论是迄今为止最好的答案,但我认为它需要在答案而不是评论中才能获得赏金。
标签: encryption asp.net-core connection-string