提问人:Bob 提问时间:2/8/2011 最后编辑:David GardinerBob 更新时间:3/28/2018 访问量:2822
为什么加密 Web.config 文件可以在不提供 keyContainerName 的情况下工作?
Why encrypting Web.config file works without supplying a keyContainerName?
问:
因此,使用aspnet_regiis.exe实用程序,我完成了以下操作
//Create the container
aspnet_regiis -pc MyRSAKey -exp
//Write key to file
aspnet_regiis -px MyRSAKey MyRSAKey.xml
//Install the key into a machine-level RSA key provider.
aspnet_regiis -pi MyRSAKey MyRSAKey.xml
//Grant access to the contrainer
aspnet_regiis -pa "MyRSAKey" "NT Authority\Network service"
现在我认为要使用此密钥,我需要将其添加到 web.config 文件中
<configProtectedData defaultProvider="MyProviderName">
<providers>
<add
name="MyProviderName"
type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
keyContainerName="MyRSAKey"
useMachineContainer="true" />
</providers>
现在,当我运行此命令时,它可以工作:
aspnet_regiis -pef "sectiomName" "pathToConfigFile" -prov "MyProviderName"
问题是,无论我对 keyContainerName 有什么值,它都有效。或者,即使我将 keyContainerName 完全从配置文件中取出,它仍然有效,这表明它实际上并没有使用我生成和安装的密钥。
此外,Visual Studio 2010 甚至无法识别 keyContainerName(或 useMachineContainer),并表示不允许使用“keyContainerName”名称。
这是怎么回事?
答:
要解决两个问题,请执行以下操作:
Visual Studio 2010 甚至无法识别(或)表示不允许使用“keyContainerName”名称。
keyContainerName
useMachineContainer
这是怎么回事?
我还没有反编译相关的配置部分类来检查,但我观察到它有属性和,所以似乎是 a) 在解析元素时,它使用反射在实例上设置相应的字段;b)编写VS2010用来验证文件的XML模式的人忘记了标签。RsaProtectedConfigurationProvider
KeyContainerName
UseMachineContainer
providers/add
type
.config
<xsd:anyAttribute>
(FWIW 这个问题是我发现你的问题时我希望回答的,它在谷歌中排名很高)。keycontainername attribute is not allowed
问题是,无论我对 keyContainerName 有什么值,它都有效。或者,即使我将 keyContainerName 完全从配置文件中取出,它仍然有效,这表明它实际上并没有使用我生成和安装的密钥。
当你说“它有效”时,我认为你的意思是这不会给出错误。但是,如果您尝试访问代码中受保护的配置部分,我敢打赌它会抱怨,除非您使用正确的.aspnet_regiis -pef
keyContainerName
我怀疑如果名称与已知的密钥容器不对应,它会创建一个新容器,但我尚未尝试验证这一点。
评论