应用加密时,我们收到以下错误(在asp.net网站上)。
分析程序错误消息:无法使用提供程序“RsaProtectedConfigurationProvider”进行解密。来自提供程序的错误消息:无法打开RSA密钥容器。
注意:请参阅我们遵循的下列步骤。 (我们已经在NetFrameworkConfigurationKey上授予NT Authority \ Network Service的ACL权限)
注意:我们在 IIS7 中启用了Windows身份验证并启用了ASP.NET模拟。它在 Windows Server 2008 中运行。根据用户是否属于允许的AD组(将在配置文件中列出)来控制访问。
有趣的是,当group1(来自location1)的用户访问它时会发生此错误。当group2的用户(来自locatiob2)尝试访问它时,错误不会出现。
有关如何纠正它的任何想法?
我们已从部署文档中按照下列步骤进行操作。
•验证defaultProvider =“RsaProtectedConfigurationProvider”
•验证keyContainerName =“NetFrameworkConfigurationKey”
注意:machine.config的默认位置是C:\ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ Config
答案 0 :(得分:9)
以下是我尝试过的一种不涉及机器配置的方法。
注意:如果目标位于Windows Sever 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,

Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a,
 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"
答案 1 :(得分:4)
如果您启用了模拟,则将使用访问应用程序的用户的身份访问RSA密钥容器,而不是网络服务。
您需要禁用模拟,或者将可以访问应用程序的所有用户添加到密钥容器的ACL中。
答案 2 :(得分:0)
就我而言,我已使用ASPNET_REGIIS对连接字符串进行了加密。我有最后一个应用程序,最后我进行了修改,以从旧服务器迁移到使用加密密钥的服务器。已经部署了此应用程序的较旧版本,但尚未使用。当我将最新版本部署(发布)到服务器时,我使用Replace方法而不是delete方法。我遇到此错误,并在这里偶然发现。没有一种解决方案对我有用。
我的修正: 所以我决定清除应用程序文件夹的内容,然后重新发布。
这样做可以解决我的问题。