我们的网站使用“NT Authority \ Network Service”。
Response.Write(WindowsIdentity.GetCurrent().Name);
我们目前正在使用以下命令加密配置文件。
aspnet_regiis -pc "NetFrameworkConfigurationKey"
aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT Authority\Network Service"
aspnet_regiis.exe -pef "connectionStrings" "C:\WebAppLocation\Folder"
注意:我们没有使用“-exp”。当我们使用“-exp”时,它不会创建RSA密钥容器。
如您所见,我们使用默认密钥-NetFrameworkConfigurationKey。我们的网站有一个负载均衡器。 Webserver1(W1)和WebServer2(W2)可用。
如果我按照上面提到的命令,我们将在W1和W2上使用单独的键。然而,该网站使用这种方法。
这种方法是否足够? 是否有任何缺点或安全漏洞? 它会在任何情况下失败吗?
注意:我们的web.config中添加了机器密钥。两个配置都是一样的。但是,我们的configProtectedData不在Web.Config中。另外,我认为,NetFrameworkConfigurationKey在两个服务器中都会有所不同。
我已经在Web场景中阅读了以下用于加密的msdn aricle。 http://msdn.microsoft.com/en-us/library/ff650304.aspx
答案 0 :(得分:8)
我听起来并不像你已经完成了所有事情。首先,这里有两个问题:
machineKey
相同。这些是另外一个问题: machineKey与加密/解密您要保护的配置部分无关。
首先,aspnet_regiis -pc
命令用于创建新的RSA密钥容器,并且它失败的原因是您指定的容器名称已经存在,因为它是默认值。此容器中的密钥对不可导出,因此您需要创建一个新密钥容器并指定-exp
开关以表示密钥对是可导出的。
aspnet_regiis -pc "MyDeploymentKeyContainer" -exp
然后将密钥导出到文件,包括私钥:私钥用于解密配置部分,以便Web服务器需要它。
aspnet_regiis -px "MyDeploymentKeyContainer" deploykey.xml -pri
现在将配置部分添加到您的web.config并保存。
<configProtectedData>
<providers>
<add keyContainerName="MyDeploymentKeyContainer"
useMachineContainer="true"
description="Uses RsaCryptoServiceProvider to encrypt and decrypt"
name="DeploymentProvider"
type="System.Configuration.RsaProtectedConfigurationProvider,System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</configProtectedData>
然后加密指定提供者名称的web.config部分,如上所示(此处为“DeploymentProvider”)
aspnet_regiis -pef "connectionStrings" "C:\WebAppLocation\Folder" -prov "DeploymentProvider"
现在,您需要将应用程序部署到两个服务器,并导入先前导出到该文件的RSA密钥容器。复制文件并在每个服务器上运行:
aspnet_regiis -pi deploykey.xml
一旦完成,就从服务器上删除文件 - 你不希望它挂起来。最后,为运行您的Web应用程序的应用程序池的用户帐户授予对两个Web服务器上的密钥容器的访问权限。
aspnet_regiis -pa "MyDeploymentKeyContainer" SomeDomain\SomeAccount
答案 1 :(得分:0)
您所做的一切都很好,但我建议您将machinekey
放在machine.config
而不是web.config
。此值通常不会经常更改,并减少web.configs更改时意外更改的可能性。
这也将允许您扩展未来的应用程序,而不会破坏越来越多的web.configs。
答案 2 :(得分:0)
我已经通过以下方式解决了这个问题:
aspnet_regiis -pi "MyDeploymentKeyContainer" "c:\keys.xml"