我已经尝试了很长一段时间来弄清楚如何加密存储在名为 dev_entlib.config 的外部文件中的应用程序块
我可以在 entlib (4.1) 中看到可以使用默认保护提供程序来加密块,但是,我确实需要在不同的服务器上部署这个应用程序,因此我需要将用于加密应用程序块的 keyProvider 导出到那些服务器。
到目前为止,我所做的是将自定义受保护的配置提供程序添加到 .net v2.0* 任何文件夹(以及所有目标服务器)中的 machine.config 文件中
自定义提供者是这样的
<add name="MyCompanyProvider"
type="System.Configuration.RsaProtectedConfigurationProvider,
System.Configuration, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a,
processorArchitecture=MSIL"
keyContainerName="MyKey"
useMachineContainer="true" />
它很好地位于其他默认提供程序旁边,甚至在 Entlib 配置工具中具有设计时支持。然后,我为要加密的每个块选择保护提供程序。
查看 dev_entlib.config,表明该块确实是用我的提供者加密的。我的提供者使用我的密钥容器。因此,应该使用我的密钥容器对块进行加密。然后我使用以下方法将“MyKey”导出到 xml 文件:
c:\Windows\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis.exe -px "MyKey" "C:\keys.xml" -pri
Exporting RSA Keys to file...
Succeeded!
然后将此密钥文件复制到我的 sysTest 服务器,并在该服务器中导入并授予“NT Authority\Network Services”和“ASPNET”访问权限
然后我复制我的加密 web.config 和 dev_entlib.config 并尝试在一个小页面中显示连接字符串,该页面使用 .net ConfigurationManager 获取 ConnectionStrings 集合并将它们显示在页面上。此页面在 IIS 下运行,进程标识为“NT Authority\Network Services”。
问题是,它不起作用!存在错误数据错误或“无法使用提供程序 MyCompanyProvider 解密”。
这种方法对我来说似乎合乎逻辑,但它仍然失败。
有人有其他建议吗?