加密并部署app.config
本文关键字:config app 部署 加密 | 更新日期: 2023-09-27 18:26:05
我阅读并测试了很多内容,以找到加密app.config
并将其部署到不同机器的最佳实践。通常,我希望保护来自第三方的连接字符串的内容,并将应用程序部署到不同的机器上。我将不手动配置每台机器。
我知道有几种方法,比如:
-
Aspnet_ Regis(RSAProtectedConfigurationProvider,DPAPIProtectedConfigurationProvider)绑定到机器、用户或自定义。RSA加密密钥。
-
绑定到机器或用户的CCD_ 2。
-
在第一次执行时对
app.config
进行加密。这是不安全的。
你推荐什么或什么是加密CCD_ 4并通过设置或使用copy&粘贴
步骤1创建RSA密钥对
aspnet_regiis -pc yourkey -exp
步骤2导出XML文件中的密钥
aspnet_regiis -px yourkey keyfile.xml -pri
对于每台机器
步骤3导入您的集装箱
aspnet_regiis -pi yourkey keyfile.xml (see step 2)
对于每台机器
步骤4编辑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协议)
- 服务返回连接字符串
- 应用程序在数据库连接
使用此解决方案,如果您有区域服务器或更多服务器,您可以选择用户连接的服务器
我希望对有所帮助
正如我在问题中已经提到的,有许多不同的方法可以加密配置文件。从更广泛的角度来看,我想描述一个额外的机会。具体的实施我就不多说了,更多的是概念。
使用msi安装程序中的自定义操作,您可以直接使用Windows Data Protection API(DPAPI)加密配置文件。为了确保第二个熵的安全,您可以使用模糊处理程序。因此,只有应用程序能够对配置文件进行加密。
优势
- 相当安全
- 无需机器配置
- 在安装过程中插入凭据
缺点
- 配置文件在安装程序中未加密。你必须保护它(权限)
请随时讨论并对此答案给出一些反馈。