加密并部署app.config
我阅读并测试了很多,以找到加密和部署app.config
到不同机器的最佳实践。 通常,我希望保护来自第三方的连接字符串的内容,并将应用程序部署到不同的计算机。 我不会手动配置每台机器。
我知道有几种方式:
-
Aspnet_Regiis(RSAProtectedConfigurationProvider,DPAPIProtectedConfigurationProvider)绑定到计算机,用户或自定义。 RSA加密密钥。
-
绑定到计算机或用户的
System.Security.Cryptography.ProtectedData
。 -
在第一次执行时加密
app.config
。 哪个不安全。
你有什么建议或加密app.config
并通过设置或复制和粘贴将应用程序提供给不同的机器的最佳做法是什么?
步骤1创建RSA密钥对
aspnet_regiis -pc yourkey -exp
Step2在XML文件中导出密钥
aspnet_regiis -px yourkey keyfile.xml -pri
为每台机器
Step3导入容器
aspnet_regiis -pi yourkey keyfile.xml (see step 2)
为每台机器
Step4编辑machine.config(规范路径C:\ Windows \ Microsoft.NET \ Framework [64 | 32] \ v [Version] \ Config)
在下面的元素中添加configProtectedData部分并设置defaultProvider =“YourProvider”
然后你可以在一台机器上加密并粘贴到其他机器中,记住必须给用户提供权限
aspnet_regiis -pa yourkey [DOMAIN\USER]
管理员组已获得授权。
欲了解更多信息,请访问http://msdn.microsoft.com/en-us/library/yxw286t2(v=vs.90).aspx
当然,您可以将这些步骤放入PowerShell /批处理文件中
另一种通过代码加密connectionStrings部分的方法是
var connectionStrings = ConfigurationManager.GetSection("connectionStrings") if(!section.SectionInformation.IsProtected) connectionStrings.SectionInformation.ProtectSection("YourProvider");
在连接和客户端/服务器场景中,我建议您在广泛的网络中采用的解决方案不是在app.config中分发连接字符串,而是要求在可以是Web服务或RESTful服务的服务上使用连接的信息用户身份validation后。
因此,步骤越多越少
- validation用户
- 服务时需要连接信息,用户名作为参数(HTTPS协议)
- 服务返回连接字符串
- 应用它在DB连接
使用此解决方案,如果您有区域服务器或更多服务器,则可以选择用户连接的服务器
我希望能有所帮助
正如我在问题中已经提到的,加密配置文件有许多不同的方法。 从广泛的角度来看,我想描述一个额外的机会。 我不会描述具体的实施,更多的是概念。
通过msi安装程序中的自定义操作,您可以使用Windows Data Protection API(DPAPI)直接加密配置文件。 为了保护第二个熵,您可以使用混淆器。 因此,只有应用程序才能加密配置文件。
优点
- 相当安全。
- 无需机器配置。
- 在安装过程中插入凭据。
坏处
- 配置文件未在设置中加密。 你必须保护它(权限)。
请随意讨论并给出一些反馈。