";RSA密钥容器无法打开”;即使在ACL权限之后也会出现错误(对于某些用户)

本文关键字:之后 权限 用户 于某些 ACL 错误 密钥 RSA quot | 更新日期: 2023-09-27 18:24:53

我们在应用加密时(在asp.net网站中)收到以下错误。

分析程序错误消息:无法使用提供程序"RsaProtectedConfigurationProvider"进行解密。来自提供程序的错误消息:无法打开RSA密钥容器

注意:请参阅下面列出的我们遵循的步骤。(我们已在NetFrameworkConfigurationKey上授予NT Authority''Network Service的ACL权限)

注意:我们在IIS7中使用启用Windows身份验证和启用ASP.NET模拟。它在Windows Server 2008中运行。访问是根据用户是否属于允许的AD组(将在配置文件中列出)来控制的。

有趣的是,当group1(来自location1)的用户访问它时会发生此错误。当group2(来自locatiob2)的用户试图访问它时,错误不会出现

你对如何纠正有什么想法吗?

我们遵循了部署文档中列出的以下步骤。

  1. 在管理员模式下运行命令窗口。(在Windows Server 2008中,键入cmd,然后按CTRL+SHIFT+ENTER)
  2. 使用change-directory命令(cd)转到文件夹C:''Windows''Microsoft.Net''Framework''v4.0.30119''
  3. 键入以下命令以创建RSA密钥容器。aspnet_regiis-pc"NetFrameworkConfigurationKey"-exp
  4. 键入以下内容(添加访问RSA密钥容器的ACL),然后按enteraspnet_regiis-pa"NetFrameworkConfigurationKey"NT Authority''Network Service"
  5. 键入以下内容(用部署服务的位置替换突出显示的文本后),然后按enter键加密服务的Web.Config.aspnet_regiis.exe-pef"connectionStrings"C:''MyWCF''ServiceName"中的连接字符串
  6. 键入以下内容(将突出显示的文本替换为网站部署的位置后),然后按enter键加密网站的Web.Config.aspnet_regiis.exe-pef"connectionStrings"C:''MyWeb''WebsiteName"中的连接字符串
  7. 键入以下内容(将突出显示的文本替换为网站的web.config文件可用的位置后),然后按enter键加密网站的web.config.aspnet_regiis.exe-pef"system.web/sessionState"C:''MyWeb''WebsiteName"中的sessionState值
  8. 请验证连接字符串和SessionState值是否已加密
  9. 请在Machine.Config的configProtectedData部分验证以下详细信息

•验证defaultProvider="RsaProtectedConfigurationProvider"

•验证keyContainerName="NetFrameworkConfigurationKey"

注意:machine.config的默认位置是C:''WINDOWS''Microsoft.NET''Framework''v4.0.30119''config

";RSA密钥容器无法打开”;即使在ACL权限之后也会出现错误(对于某些用户)

以下是我尝试过的一种不涉及机器配置的方法。

注意:如果目标位于Windows Sever 2008中,则需要在Windows Server 2008本身中执行加密步骤。

在服务器A 中执行了以下代码

注:-注册密钥

 cd C:'WINDOWS'Microsoft.NET'Framework'v4.0.30319
 aspnet_regiis.exe -pc "MyProjectKeys" -exp

注意:-在服务器上授予访问权限仅限

aspnet_regiis.exe -pa "MyProjectKeys" "IIS APPPOOL'testpsreloservices"
aspnet_regiis.exe -pa "MyProjectKeys" "NT AUTHORITY'NETWORK"

导出的包含RSA密钥的XML文件

aspnet_regiis.exe -px "MyProjectKeys" E:'wmapps'webroot'myservice'MyProjectKey.xml –pri

在web.config 中添加了以下内容

<configProtectedData>
  <providers>
    <clear/>
<remove name="RSAProtectedConfigurationProvider" />
     <add name="RSAProtectedConfigurationProvider" keyContainerName="MyProjectKeys" 
    type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0,&#xD;&#xA;                
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a,&#xD;&#xA; processorArchitecture=MSIL"
          useMachineContainer="true" />
  </providers>
</configProtectedData>

加密

aspnet_regiis -pef "connectionStrings" "E:'wmapps'webroot'myservice" -prov "RsaProtectedConfigurationProvider"

复制了B服务器中的加密文件。已将密钥xml文件复制到B服务器中。

使用以下命令创建批处理文件并执行(用于密钥注册和授予访问权限)

c:
cd C:'WINDOWS'Microsoft.NET'Framework'v4.0.30319
aspnet_regiis.exe -pi "MyProjectKeys" E:'wmapps'webroot'myservice'MyProjectKey.xml
aspnet_regiis.exe -pa "MyProjectKeys" "IIS APPPOOL'testpsreloservices"
aspnet_regiis.exe -pa "MyProjectKeys" "NT AUTHORITY'NETWORK"

如果启用了模拟,则将使用访问应用程序的用户身份访问RSA密钥容器,而不是使用网络服务。

您需要禁用模拟,或者将所有可以访问应用程序的用户添加到密钥容器的ACL中。

在我的案例中,我使用ASPNET_REGIIS对连接字符串进行了加密。我有最后一个应用程序,我终于可以修改它,从一个旧的服务器移动到这个使用加密密钥的服务器。已经部署了此应用程序的旧版本,但尚未使用。当我将最新版本部署(发布)到服务器时,我使用了Replace方法而不是delete。我偶然发现了这个错误,在这里跌跌撞撞。没有一个解决方案对我有效。

我的修复:所以我决定清除应用程序文件夹的内容,然后重新发布。

这样做纠正了我的问题。