【问题标题】:Encrypt and deploy app.config加密和部署 app.config
【发布时间】:2014-12-05 07:36:00
【问题描述】:

我阅读并测试了很多,以找到将app.config 加密和部署到不同机器的最佳实践。一般来说,我想从第三方保护连接字符串的内容并将应用程序部署到不同的机器上。我将不会手动配置每台机器。

我知道有几种方法,例如:

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

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

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

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

【问题讨论】:

    标签: c# .net encryption connection-string


    【解决方案1】:

    第 1 步创建 RSA 密钥对

    aspnet_regiis -pc yourkey -exp
    

    Step2 导出你输入的 XML 文件

    aspnet_regiis -px yourkey keyfile.xml -pri
    

    每台机器

    第三步导入你的容器

    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/批处理文件中

    另一种通过代码加密连接字符串部分的方法是

     var connectionStrings = ConfigurationManager.GetSection("connectionStrings") 
     if(!section.SectionInformation.IsProtected)
         connectionStrings.SectionInformation.ProtectSection("YourProvider");
    

    在连接和客户端/服务器场景中,我建议您在广泛的网络中采用的解决方案不是在 app.config 中分发连接字符串,而是在可以是 Web 服务或用户认证后的 RESTful 服务。

    因此,更多或更少

    1. 验证用户身份
    2. 需要在服务中使用用户名作为参数的连接信息(HTTPS 协议)
    3. 服务返回连接字符串
    4. 在 DB 上连接的应用程序

    使用此解决方案,如果您有区域服务器或更多服务器,您可以选择用户连接的服务器

    希望对你有帮助

    【讨论】:

    • 我是否对每台机器使用相同的 RSA 密钥对?每个将执行应用程序的域用户都需要密钥权限吗?
    • 是的,您必须在所有机器上使用相同的密钥,并将权限授予唯一的应用程序池用户,即应用程序的网络服务或应用程序池身份
    • 我认为这对于服务器场来说是一个很好的解决方案。但是,如果您想向超过 1000 台机器和用户提供您的应用程序怎么办?
    • 你的场景是内网还是外网?对于用户授权,您可以使用组,此外管理员组中的所有用户都已获得授权。
    • 一般情况下,内网需要。该解决方案工作正常,但我会再等一会儿。也许有一个无需配置客户端机器的解决方案。不过,非常感谢!我认为您也必须在第 2 步中导出私钥。它适用于 aspnet_regiis -px yourkey keyfile.xml -pri
    【解决方案2】:

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

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

    优势

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

    缺点

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

    请随时讨论并对此答案提供一些反馈。

    【讨论】:

      猜你喜欢
      • 2011-02-10
      • 1970-01-01
      • 2018-03-16
      • 2011-05-02
      • 1970-01-01
      • 2010-10-14
      • 1970-01-01
      • 2010-10-13
      • 2012-03-13
      相关资源
      最近更新 更多