为什么加密 Web.config 文件可以在不提供 keyContainerName 的情况下工作?

Why encrypting Web.config file works without supplying a keyContainerName?

提问人:Bob 提问时间:2/8/2011 最后编辑:David GardinerBob 更新时间:3/28/2018 访问量:2822

问:

因此,使用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”名称。

这是怎么回事?

.net asp.net web-config-encryption

评论

0赞 R. Martinho Fernandes 2/8/2011
为什么要使用多个感叹号
2赞 x0n 2/8/2011
因为他传达的是加剧的烦恼!!

答:

0赞 Peter Taylor 7/5/2013 #1

要解决两个问题,请执行以下操作:

Visual Studio 2010 甚至无法识别(或)表示不允许使用“keyContainerName”名称。keyContainerNameuseMachineContainer

这是怎么回事?

我还没有反编译相关的配置部分类来检查,但我观察到它有属性和,所以似乎是 a) 在解析元素时,它使用反射在实例上设置相应的字段;b)编写VS2010用来验证文件的XML模式的人忘记了标签。RsaProtectedConfigurationProviderKeyContainerNameUseMachineContainerproviders/addtype.config<xsd:anyAttribute>

(FWIW 这个问题是我发现你的问题时我希望回答的,它在谷歌中排名很高)。keycontainername attribute is not allowed


问题是,无论我对 keyContainerName 有什么值,它都有效。或者,即使我将 keyContainerName 完全从配置文件中取出,它仍然有效,这表明它实际上并没有使用我生成和安装的密钥。

当你说“它有效”时,我认为你的意思是这不会给出错误。但是,如果您尝试访问代码中受保护的配置部分,我敢打赌它会抱怨,除非您使用正确的.aspnet_regiis -pefkeyContainerName

我怀疑如果名称与已知的密钥容器不对应,它会创建一个新容器,但我尚未尝试验证这一点。