如何保护web应用程序的appsettings.json中用于加密敏感数据的加密密钥
我想保护我的web应用程序配置中的敏感数据。
在ASP.NET MVC4应用程序中,我们这样做:
web.config (或web.prod.config等),而是写入占位符变量。web.config中的变量。aspnet_regiis.exe加密敏感部分。现在我们使用的是ASP.NET核心,我们遵循的过程有点不同。
appsettings.json保存敏感数据的占位符变量,类似于web.config以前的工作方式。aspnet_regiis,我认为我需要:
( a)制作我自己的自定义工具来加密appsettings.json文件的部分。
( b)创建一个可以解密appsettings.json (全部/部分)的自定义配置提供程序我不明白的是如何保护用于(a)和(b)的加密密钥。旧方法利用服务器的机器密钥对文件进行加密。
我试图缓解的威胁是,有人能够访问服务器上的appsettings.json并从中读取敏感数据(例如,数据库密码等)。
此外,我还以其他方式减轻这一威胁和/或其他问题。
发布于 2017-12-07 10:04:41
如果您不“信任”服务器-您无法保护存储在此服务器中的“机密”。
解释:
不管您发明了什么“安全”(=非安全)方案--当应用程序启动时,必须能够将秘密“解密”成某种“可用的”形式。
这意味着,“解密”所需的所有“密钥”(证书等)必须存在于此服务器上,并可供应用程序访问(否则应用程序无法启动)。
这意味着一些访问服务器和应用程序的坏人也可以访问服务器和应用程序上的所有“密钥”,并“解密”您的秘密。可能是通过复制文件,可能是通过解压缩应用程序,也可能是通过丢弃应用程序内存--但它可以。
没有绝对的保护。
发布于 2018-02-15 05:26:57
您似乎对“方法”不感兴趣,但对推荐的ASP.NET核心支持方法感兴趣。虽然这里的其他答案提到Azure KeyVault是敏感信息的好存储,但它不是存储它的方法,而是实际存储的方式。ASP.NET核心支持overridable configuration的概念。也就是说,可以在配置系统中注册多个配置提供程序,以及它们在事务中的注册顺序。每个注册的一个覆盖来自以前的提供者的设置-当然那些它有。换句话说,如果您已经注册了标准的JSON配置提供程序,然后假设是一个数据库配置提供程序,那么这些设置(这两个提供程序都有)将得到后面定义的提供程序--数据库提供程序--定义的值。在你的情况下,我建议你做的是:
虽然这不是到当前流程的1:1映射,但它与ASP.NET核心原则是一致的。
您可以在: ASP.NET上阅读有关https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/index?tabs=basicconfiguration配置的更多信息。
在这里您可以了解Azure KeyVault配置提供程序:https://learn.microsoft.com/en-us/aspnet/core/security/key-vault-configuration?tabs=aspnetcore2x
如果基于证书的auth不是您的选择,请考虑将用于连接到Azure服务的ClientId和ClientSecret存储在环境变量中,并使用适当的配置提供程序(AddEnvironmentVariables()扩展方法将这样做)来访问这些变量。
这个设置将非常安全。祝好运!
发布于 2018-02-15 04:50:32
我正在将这一评论转化为一个答复:)
即使您没有在Azure上运行,我仍然建议使用Azure钥匙库来存储您的秘密。首先,它非常便宜(大约0.0159美元/万次操作),其次,它可以从任何地方访问,甚至在Azure之外。此外,Azure Key Vault中的秘密可以进行版本化,这是一个很好的特性,可以支持每个环境的多个版本(仅用于预制作,因为生产应该有自己的密钥库)。Key Vault NuGet包具有在.NET核心中检索和添加机密的操作。这里是指向文档的链接。
您可以拥有内存中的缓存,因此只有在应用程序开始时(或缓存过期时)才会对Key Vault进行REST调用(或Key Vault包方法调用),从而防止任何进一步的延迟。第三,这是微软推荐的方法。
希望这能有所帮助。
https://stackoverflow.com/questions/47687906
复制相似问题