因此,使用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'名称。
这里发生了什么?
答案 0 :(得分:0)
要解决这两个问题:
Visual Studio 2010甚至不识别
keyContainerName
(或useMachineContainer
)表示不允许使用'keyContainerName'名称。这里发生了什么?
我没有反编译相关的配置节类进行检查,但我发现RsaProtectedConfigurationProvider
具有属性KeyContainerName
和UseMachineContainer
,所以它似乎是a)在解析时providers/add
元素使用反射在type
的实例上设置相应的字段; b)编写VS2010用于验证.config
文件的XML模式的人忘记了<xsd:anyAttribute>
标记。
(FWIW这个问题是我在发现你的问题时我希望回答的问题,这个问题在谷歌的keycontainername attribute is not allowed
中排名很高。)
无论我对keyContainerName有什么价值,它都有效。或者甚至当我从配置文件中完全取出keyContainerName时,它仍然有效,表明它实际上并没有使用我生成和安装的密钥。
当你说“它有效”时,我认为你的意思是aspnet_regiis -pef
不会出错。但是,如果您尝试访问代码中受保护的配置部分,我打赌它会抱怨,除非您使用了正确的keyContainerName
。
我怀疑如果名称与已知密钥容器不对应,则会创建一个新容器,但我没有尝试验证这一点。