2011-02-08 131 views
4

因此,使用ASPNET_REGIIS.EXE UTIL我做了以下为什么在不提供keyContainerName的情况下加密Web.config文件?

//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

为什么使用[多个感叹号](http://wiki.lspace.org/wiki/Multiple_exclamation_marks)? – 2011-02-08 15:24:14

回答

0

为了解决这两个问题不按顺序:

Visual Studio 2010中甚至不承认keyContainerName(或useMachineContainer)说,“keyContainerName的名字是不允许的。

这是怎么回事?

我没有反编译相关的配置部分类进行检查,但我观察到RsaProtectedConfigurationProvider具有属性KeyContainerNameUseMachineContainer,因此它似乎是一个)解析providers/add元件时,它使用反射来设置相应的字段例如type;和b)凡编写VS2010用于验证.config文件的XML架构的人员忘记了<xsd:anyAttribute>标记。

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


的事情是,它的作品无论我有什么价值keyContainerName。或者甚至当我将keyContainerName从配置文件中完全取出时,它仍然有效,表明它实际上并未使用我生成并安装的密钥。

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

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

相关问题