Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# &引用;无法打开RSA密钥容器";即使在ACL权限之后也会出错(对于某些用户)_C#_Asp.net_Iis_Iis 7_Windows Server 2008 - Fatal编程技术网

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

C# &引用;无法打开RSA密钥容器";即使在ACL权限之后也会出错(对于某些用户),c#,asp.net,iis,iis-7,windows-server-2008,C#,Asp.net,Iis,Iis 7,Windows Server 2008,应用加密时,我们(在asp.net网站中)出现以下错误 分析器错误消息:无法使用提供程序“RsaProtectedConfigurationProvider”进行解密。来自提供程序的错误消息:无法打开RSA密钥容器。 注意:请参阅下面列出的我们遵循的步骤。(我们已授予NetFrameworkConfigurationKey上NT Authority\Network服务的ACL权限) 注意:我们在IIS7中启用了Windows身份验证和ASP.NET模拟。它正在Windows Server 200

应用加密时,我们(在asp.net网站中)出现以下错误

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

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

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

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

有没有关于如何纠正的想法

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

  • 在管理员模式下运行命令窗口。(在Windows Server 2008中,键入cmd并按CTRL+SHIFT+ENTER)
  • 使用“更改目录”命令(cd)转到文件夹C:\Windows\Microsoft.Net\Framework\v4.0.30319\
  • 键入以下命令以创建RSA密钥容器。aspnet_regiis-pc“NetFrameworkConfigurationKey”-exp
  • 键入以下内容(添加ACL以访问RSA密钥容器),然后按enteraspnet\u regiis-pa“NetFrameworkConfigurationKey”“NT Authority\Network Service”
  • 键入以下内容(将突出显示的文本替换为部署服务的位置后),然后按enter键加密服务的Web.Config中的连接字符串。aspnet_regiis.exe-pef“ConnectionString”C:\MyWCF\ServiceName
  • 键入以下内容(将突出显示的文本替换为网站部署的位置后),然后按enter键加密网站的Web.Config中的连接字符串。aspnet\u regiis.exe-pef“ConnectionString”“C:\MyWeb\WebsiteName”
  • 键入以下内容(将突出显示的文本替换为网站的web.config文件可用的位置后),然后按enter键加密网站的web.config中的sessionState值。aspnet_regiis.exe-pef“system.web/sessionState”“C:\MyWeb\WebsiteName”
  • 验证连接字符串和会话状态值是否已加密
  • 验证Machine.Config中configProtectedData部分中的以下详细信息 •验证defaultProvider=“RsaProtectedConfigurationProvider”

    •验证keyContainerName=“NetFrameworkConfigurationKey”


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

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


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

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

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

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

    注意:-注册密钥

     cd C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319
     aspnet_regiis.exe -pc "MyProjectKeys" -exp
    
    注意:-仅授予对服务器A的访问权限

    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>
    
    已在B服务器中复制加密文件。 将密钥xml文件复制到B服务器中

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


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

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


    这样做纠正了我的问题

    参考:很明显,我已经授予了一个帐户的访问权限,而我的应用程序池正在另一个帐户上运行。只要我能访问正确的帐户,它就工作了。谢谢!:)为正确的用户提供权限非常重要。我苦苦挣扎了4个小时,最后终于明白,我们还需要提供至少正确应用程序池的权限。不确定网络。
    aspnet_regiis -pef "connectionStrings" "E:\wmapps\webroot\myservice" -prov "RsaProtectedConfigurationProvider"
    
    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"