加密并部署app.config

时间:2014-10-10 07:37:23

标签: c# .net encryption connection-string

我阅读并测试了很多内容,以找到加密和部署app.config到不同计算机的最佳做法。通常,我希望保护来自第三方的连接字符串的内容,并将应用程序部署到不同的计算机上。我将手动配置每台机器。

我知道有几种方式:

  • Aspnet_Regiis(RSAProtectedConfigurationProvider, DPAPIProtectedConfigurationProvider)绑定到计算机,用户或自定义。 RSA加密密钥。

  • System.Security.Cryptography.ProtectedData绑定到计算机或用户。

  • 首次执行时加密app.config。哪个不安全。

您有什么建议或加密app.config以及通过设置或复制和粘贴将应用程序提供给不同计算机的最佳做法是什么?

2 个答案:

答案 0 :(得分:11)

第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”

<add name="YourProvider"
                type="System.Configuration.RsaProtectedConfigurationProvider,System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
                description="Uses RsaCryptoServiceProvider to encrypt and decrypt for my infrastucture"

                keyContainerName="yourkey"

                cspProviderName=""
                useMachineContainer="true"
                useOAEP="false" />

然后你可以在一台机器上加密并粘贴到其他机器中,记住必须为用户提供

的权限
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服务。

因此,步骤越多越少

  1. 验证用户
  2. 服务时需要连接信息,用户名作为参数(HTTPS协议)
  3. 服务返回连接字符串
  4. App it connect at DB
  5. 使用此解决方案,您可以选择用户连接的服务器(如果您有区域服务器或更多服务器

    我希望有所帮助

答案 1 :(得分:3)

正如我在问题中已经提到的,加密配置文件有许多不同的方法。从广泛的角度来看,我想描述一个额外的机会。我不会描述具体的实现,更多的是概念。

使用msi安装程序中的自定义操作,您可以使用Windows Data Protection API(DPAPI)直接加密配置文件。为了保护第二个熵,您可以使用混淆器。因此,只有应用程序才能加密配置文件。

<强>优势

  • 非常安全。
  • 无需配置机器。
  • 在设置过程中插入凭据。

<强>缺点

  • 配置文件未在设置中加密。你必须保护它(权限)。

请随意讨论并给出一些反馈。