4

我们有使用“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 Farm 场景中的加密的 msdn 文章。 http://msdn.microsoft.com/en-us/library/ff650304.aspx

4

3 回答 3

10

我听起来不像你做的一切都是正确的。首先,这里有两个问题:

  1. 确保machineKey两个 Web 服务器上的相同。
  2. 确保将相同的 RSA 私钥安装在两台服务器上的密钥容器中,以便每台服务器都可以解密加密的配置。

这些是单独的问题: 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
于 2011-11-03T18:59:01.903 回答
0

您所做的一切都很好,但我也建议machinekeymachine.configweb.config. 此值通常不会经常更改,并且可以减少 web.configs 更改时意外更改的可能性。

这也将允许您扩展未来的应用程序,而不会破坏越来越多的 web.configs。

于 2011-11-03T17:05:38.403 回答
0

我已经通过这种方式解决了这个问题:

aspnet_regiis -pi "MyDeploymentKeyContainer" "c:\keys.xml"
于 2019-02-09T19:07:33.790 回答