我阅读并测试了很多内容,以找到加密和部署app.config
到不同计算机的最佳做法。通常,我希望保护来自第三方的连接字符串的内容,并将应用程序部署到不同的计算机上。我将不手动配置每台机器。
我知道有几种方式:
Aspnet_Regiis(RSAProtectedConfigurationProvider, DPAPIProtectedConfigurationProvider)绑定到计算机,用户或自定义。 RSA加密密钥。
System.Security.Cryptography.ProtectedData
绑定到计算机或用户。
首次执行时加密app.config
。哪个不安全。
您有什么建议或加密app.config
以及通过设置或复制和粘贴将应用程序提供给不同计算机的最佳做法是什么?
答案 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 :(得分:3)
正如我在问题中已经提到的,加密配置文件有许多不同的方法。从广泛的角度来看,我想描述一个额外的机会。我不会描述具体的实现,更多的是概念。
使用msi安装程序中的自定义操作,您可以使用Windows Data Protection API(DPAPI)直接加密配置文件。为了保护第二个熵,您可以使用混淆器。因此,只有应用程序才能加密配置文件。
<强>优势强>
<强>缺点强>
请随意讨论并给出一些反馈。