步骤 1 创建一个RSA密钥对
aspnet_regiis -pc yourkey -exp
步骤2 将您的密钥导出为 XML 文件
aspnet_regiis -px yourkey keyfile.xml -pri
对于每台机器
第三步 导入您的容器
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协议)
- 服务返回连接字符串
- 应用连接到数据库
通过这个解决方案,您可以选择用户连接哪个服务器,如果您有地区服务器或更多服务器的话。
希望有所帮助。
aspnet_regiis -px yourkey keyfile.xml -pri
即可。 - Andre Hofmeister