2011-02-08 2 views
4

Так, используя aspnet_regiis.exe Util я сделал следующийПочему шифрование файла Web.config работает без предоставления имени keyContainerName?

//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 из файла конфигурации, он все еще работает, предполагая, что он фактически не использует ключ, который я сгенерировал и установил.

Также визуальная студия 2010 даже не распознает keyContainerName (или useMachineContainer), заявив, что имя «keyContainerName» недопустимо.

Что здесь происходит?>

+0

Почему вы используете [несколько восклицательных знаков] (http://wiki.lspace.org/wiki/Multiple_exclamation_marks)? –

+2

, потому что он передает обостренную досаду !!! – x0n

ответ

0

Для решения двух вопросов из заказа:

Visual Studio 2010 даже не признают keyContainerName (или useMachineContainer) говорят, что название «keyContainerName» не допускается.

Что здесь происходит?

Я не декомпилирован соответствующий раздел конфигурации класса, чтобы проверить, но я замечаю, что RsaProtectedConfigurationProvider обладает свойствами KeyContainerName и UseMachineContainer, так что кажется, что а) при анализе providers/add элемента использует отражение, чтобы установить соответствующие поля на примере type; и б) кто бы ни написал XML-схему, которую VS2010 использует для проверки .config, файлы забыли тег <xsd:anyAttribute>.

(FWIW этот вопрос - это то, на что я надеялся ответить, когда обнаружил ваш вопрос, который высоко ценится в Google за keycontainername attribute is not allowed).


Дело в том, что он работает независимо от того, какое значение я для keyContainerName. Или даже когда я полностью исключаю keyContainerName из файла конфигурации, он все еще работает, предполагая, что он фактически не использует ключ, который я сгенерировал и установил.

Когда вы говорите «это работает», я думаю, вы имеете в виду, что aspnet_regiis -pef не дает ошибок. Однако, если вы попытаетесь получить доступ к разделу защищенной конфигурации в своем коде, я ставлю, что он будет жаловаться, если вы не использовали правильный keyContainerName.

Я подозреваю, что если имя не соответствует известному контейнеру ключа, оно создает новый, но я не пытался это проверить.

Смежные вопросы