4

所以使用 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”名称。

这里发生了什么?

4

1 回答 1

0

为了解决这两个问题:

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

这里发生了什么?

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

(当我发现您的问题时,这个问题是我希望回答的问题,该问题在 Google 中排名很高keycontainername attribute is not allowed)。


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

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

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

于 2013-07-05T13:40:37.993 回答