在承载多个 ASP.NET 应用程序的单台 Web 服务器上,创建 RSA 密钥容器也非常有用。通过为一个客户的每个或每组应用程序都创建一个 RSA 密钥容器,可以确保一个应用程序的 RSA 密钥容器不能用来对另一个应用程序的 Web.config 文件进行解密,从而提高应用程序的敏感配置信息的安全性。
若要创建 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 密钥容器导出到 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可以使用 Aspnet_regiis.exe 工具和 –pi 开关,从 XML 文件导入 RSA 密钥容器。还必须指定导入的密钥容器是计算机级还是用户级的密钥容器。若要导入用户级密钥容器,必须以将在其 Windows 配置文件中存储密钥的用户的身份登录。若要指定用户级密钥,请在导入加密密钥信息时包括 -pku 选项;否则,导出的密钥将导入到计算机密钥存储区中。
例如,下面的命令从名为 keys.xml 的文件中导入名为 SampleKeys 的计算机级 RSA 密钥容器:
aspnet_regiis -pi "SampleKeys" keys.xml必须向将使用所导入 RSA 密钥容器的 ASP.NET 应用程序的标识授予对该 RSA 密钥容器内容的读取权限。
若要删除 RSA 密钥容器,可以使用 Aspnet_regiis.exe 工具和 –pz 开关。在删除 RSA 密钥容器之前,请确保已经将密钥导出到 XML 文件中以便能够在以后导入,或者确保不需要解密任何用 RSA 密钥容器加密的信息。
在删除某个 RSA 密钥容器时,必须指定该密钥容器的名称,并将该容器标识为计算机级或用户级。若要删除用户级密钥容器,必须以其 Windows 配置文件存储了密钥的用户的身份登录。
例如,下面的命令删除名为 SampleKeys 的计算机级 RSA 密钥容器。
aspnet_regiis -pz "SampleKeys"