Rocho.J

人脑是不可靠的, 随时记录感悟并且经常重复!

 

如何创建、删除、导入和导出RSA密钥容器 (转载)

“受保护的配置”提供了在使用 RSAProtectedConfigurationProvider 时创建、删除、导出和导入 RSA 密钥容器的能力。对于将同一个经过加密的 Web.config 文件部署到数台服务器上的 Web 场,这会非常有用。在这种情况下,还必须将相同的 RSA 密钥容器部署到这些服务器上。为了实现此目的,需要为应用程序创建一个 RSA 密钥容器,将它导出为 XML 文件,然后在每台需要对加密的 Web.config 文件进行解密的服务器上导入该文件。

 

在承载多个 ASP.NET 应用程序的单台 Web 服务器上,创建 RSA 密钥容器也非常有用。通过为一个客户的每个或每组应用程序都创建一个 RSA 密钥容器,可以确保一个应用程序的 RSA 密钥容器不能用来对另一个应用程序的 Web.config 文件进行解密,从而提高应用程序的敏感配置信息的安全性。

 

创建 RSA 密钥容器

可以使用 aspnet_regiis.exe 工具和 –pc 开关来创建 RSA 密钥容器。您需要为所创建的密钥容器提供一个名称。密钥容器名用来标识密钥容器,该密钥容器由 Web.config 文件的 <protectedData> 节中指定的 RSAProtectedConfigurationProvider 使用。-exp 选项确保新创建的 RSA 密钥容器可以被导出。如果您创建的是计算机级 RSA 密钥容器,则必须指定 –pkm 选项。如果您创建的是用户级 RSA 密钥,则必须在执行 aspnet_regiis.exe 工具时以该用户的身份登录,并且必须指定 –pku 选项。

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

下面的示例显示某个 ASP.NET 应用程序的 Web.config 文件的 <protectedData> 节,该节指定了一个使用名为 MyKeys 的计算机级 RSA 密钥容器的 RSAProtectedConfigurationProvider。


授予对 RSA 密钥容器的访问权限

RSA 密钥容器受到所在服务器上的 NTFS 访问控制列表 (ACL) 的严密保护。这是为了提高加密的可靠性。即,如果需要加密密钥的任何人都可以得到它,那么加密信息将变得不安全。

 

必须首先向 ASP.NET 应用程序的标识授予对 RSA 密钥容器(在 Web.config 文件的 <protectedData> 节的提供程序配置中指定)的读取访问权限,然后 ASP.NET 才能使用 RSA 密钥容器对 Web.config 文件的加密部分进行解密。有关设置和确定 ASP.NET 应用程序标识的信息,请参见 ASP.NET Impersonation。

 

可以使用 aspnet_regiis.exe 工具及 -pa 开关,向 ASP.NET 应用程序的标识授予读取 RSA 密钥容器的权限。必须指定 RSA 密钥容器是计算机级还是用户级的。若要授予对用户级密钥容器的访问权限,必须以其 Windows 配置文件存储了密钥的用户的身份登录。

 

例如,下面的命令向 Windows 2003 Server 上的 NETWORK SERVICE 帐户授予对名为 MyKeys 的计算机级 RSA 密钥容器的读取访问权限。

 

若要使用在 Machine.config 文件中指定的默认 RSAProtectedConfigurationProvider,必须首先向 ASP.NET 应用程序的 Windows 标识授予对名为“NetFrameworkConfigurationKey”的计算机密钥容器的访问权限。例如,下面的命令向 NETWORK SERVICE 帐户授予对默认 RSAProtectedConfigurationProvider 使用的 RSA 密钥容器的访问权限。


导出 RSA 密钥容器

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

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

 

导入 RSA 密钥容器

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

例如,下面的命令从名为 keys.xml 的文件中导入名为 MyKeys 的计算机级 RSA 密钥容器。

请注意,需要向将使用所导入 RSA 密钥容器的 ASP.NET 应用程序的标识授予对该 RSA 密钥容器内容的读取权限。

 

删除 RSA 密钥容器

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

 

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

例如,下面的命令删除名为 MyKeys 的计算机级 RSA 密钥容器。


aspnet_regiis -pz "MyKeys"  
 
aspnet_regiis -pz "MyKeys"

posted on 2011-02-08 15:55  RJ  阅读(1930)  评论(0编辑  收藏  举报

导航