首页 文章

加密并部署app.config

提问于
浏览
20

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

我知道有几种方式:

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

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

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

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

2 回答

  • 11

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

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

    Advantage

    • 相当安全 .

    • 无需配置机器 .

    • 在安装过程中插入凭据 .

    Disadvantage

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

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

  • 3

    Step 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服务的服务上使用连接的信息用户身份验证后 .

    因此,步骤越多越少

    • 验证用户

    • 需要服务时的连接信息,用户名作为参数(HTTPS协议)

    • 服务返回连接字符串

    • 应用程序在DB连接

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

    我希望能有所帮助

相关问题