您的位置:首页 > 其它

如何将加密的(web.config)文件部署到其他服务器上

2009-01-04 10:11 411 查看
受保护的配置提供了在使用 RsaProtectedConfigurationProvider 时创建、删除、导出和导入 RSA 密钥容器的能力。对于将同一个经过加密的 Web.config 文件部署到数台服务器上的网络场,这会非常有用。在这种情况下,还必须将相同的 RSA 密钥容器部署到这些服务器上。为了实现此目的,需要为应用程序创建一个 RSA 密钥容器,将它导出到 XML 文件,然后在每台需要对加密的 Web.config 文件进行解密的服务器上导入该文件。
在承载多个 ASP.NET 应用程序的单台 Web 服务器上,创建 RSA 密钥容器也非常有用。通过为一个客户的每个或每组应用程序都创建一个 RSA 密钥容器,可以确保一个应用程序的 RSA 密钥容器不能用来对另一个应用程序的 Web.config 文件进行解密,从而提高应用程序的敏感配置信息的安全性。

创建 RSA 密钥容器

若要创建 RSA 密钥容器,请使用 ASP.NET IIS 注册工具 (Aspnet_regiis.exe) 及 –pc 开关。必须为密钥容器指定一个名称,该名称标识应用程序的 Web.config 文件的 configProtectedData 节中指定的 RsaProtectedConfigurationProvider 所使用的密钥容器。为确保可以导出新创建的 RSA 密钥容器,必须包括 -exp 选项。

例如,下面的命令创建一个名为 SampleKeys 的 RSA 密钥容器,该容器是可导出的计算机级密钥容器。

aspnet_regiis -pc "SampleKeys"–exp

下面的示例演示了 Web.config 文件的 configProtectedData 节。该节指定使用名为 SampleKeys 的计算机级 RSA 密钥容器的 RsaProtectedConfigurationProvider
<configProtectedData>
<providers>
<add name="SampleProvider"
type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
processorArchitecture=MSIL"
keyContainerName="SampleKeys"
useMachineContainer="true" />
</providers>
</configProtectedData>
授予对 RSA 密钥容器的访问权限

默认情况下,RSA 密钥容器受到所在服务器上的 NTFS 访问控制列表 (ACL) 的严密保护。这样能够限制可以访问加密密钥的人员,从而增强加密信息的安全性。

必须首先向 ASP.NET 应用程序的进程标识授予对该 RSA 密钥容器的读取访问权限,然后 ASP.NET 才能使用 RSA 密钥容器。有关设置和确定 ASP.NET 应用程序标识的信息,请参见 ASP.NET 模拟

可以使用 Aspnet_regiis.exe 工具及 -pa 开关,向 ASP.NET 应用程序的标识授予读取 RSA 密钥容器的权限。例如,下面的命令向 Windows Server 2003 NETWORK SERVICE 帐户授予对名为 SampleKeys 的计算机级 RSA 密钥容器的读取访问权限:
aspnet_regiis -pa "SampleKeys" "NT AUTHORITY/NETWORK SERVICE"

若要使用计算机配置中指定的默认 RsaProtectedConfigurationProvider,必须首先向应用程序的 Windows 标识授予对名为 NetFrameworkConfigurationKey 的计算机密钥容器的访问权限,该计算机密钥容器是为该默认提供程序指定的密钥容器。例如,下面的命令向 NETWORK SERVICE 帐户授予对默认 RsaProtectedConfigurationProvider 所使用的 RSA 密钥容器的访问权限。
aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY/NETWORK SERVICE"

NetFrameworkConfigurationKey RSA 密钥容器是 Aspnet_regiis.exe 工具所发出的命令的默认密钥容器。因此上述命令也可以按以下方式发出:
aspnet_regiis -pa "NT AUTHORITY/NETWORK SERVICE"

导出 RSA 密钥容器

若要将 RSA 密钥容器导出到 XML 文件,可以使用 Aspnet_regiis.exe 工具及 –px 开关。XML 文件可以用作 RSA 密钥容器的备份,也可用于在其他服务器上导入 RSA 密钥容器。若要对加密信息进行解密,RSA 密钥容器的私钥部分是必需的。若要在另一台服务器上使用导出的密钥容器,还需导入私钥。通过在导出密钥时指定 –pri 选项,可以在 XML 文件中包括私钥。还必须指定导出的密钥容器是计算机级还是用户级的。若要导出用户级密钥容器,必须以其 Windows 配置文件存储了密钥的用户的身份登录。若要指定用户级密钥,请在导出加密密钥信息时包括 -pku 选项;否则,导出的密钥将来自计算机密钥存储区。有关计算机级和用户级加密密钥的更多信息,请参见 了解计算机级别和用户级别的 RSA 密钥容器

例如,下面的命令将名为 SampleKeys 的计算机级 RSA 密钥容器导出到名为 keys.xml 的文件中并包括了私钥信息。
aspnet_regiis -px "SampleKeys" keys.xml -pri

导入 RSA 密钥容器

可以使用 Aspnet_regiis.exe 工具和 –pi 开关,从 XML 文件导入 RSA 密钥容器。还必须指定导入的密钥容器是计算机级还是用户级的密钥容器。若要导入用户级密钥容器,必须以将在其 Windows 配置文件中存储密钥的用户的身份登录。若要指定用户级密钥,请在导入加密密钥信息时包括 -pku 选项;否则,导出的密钥将导入到计算机密钥存储区中。

例如,下面的命令从名为 keys.xml 的文件中导入名为 SampleKeys 的计算机级 RSA 密钥容器:
aspnet_regiis -pi "SampleKeys" keys.xml

必须向将使用所导入 RSA 密钥容器的 ASP.NET 应用程序的标识授予对该 RSA 密钥容器内容的读取权限。

删除 RSA 密钥容器

若要删除 RSA 密钥容器,可以使用 Aspnet_regiis.exe 工具和 –pz 开关。在删除 RSA 密钥容器之前,请确保已经将密钥导出到 XML 文件中以便能够在以后导入,或者确保不需要解密任何用 RSA 密钥容器加密的信息。

在删除某个 RSA 密钥容器时,必须指定该密钥容器的名称,并将该容器标识为计算机级或用户级。若要删除用户级密钥容器,必须以其 Windows 配置文件存储了密钥的用户的身份登录。

例如,下面的命令删除名为 SampleKeys 的计算机级 RSA 密钥容器。
aspnet_regiis -pz "SampleKeys"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: