Ошибка защиты строки подключения App.config
-
09-06-2019 - |
Вопрос
Я столкнулся с проблемой, которая была у меня раньше;не могу найти свою ссылку на то, как это решить.
Вот в чем проблема.Мы шифруем раздел строк подключения в app.config для нашего клиентского приложения, используя приведенный ниже код:
config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
If config.ConnectionStrings.SectionInformation.IsProtected = False Then
config.ConnectionStrings.SectionInformation.ProtectSection(Nothing)
' We must save the changes to the configuration file.'
config.Save(ConfigurationSaveMode.Modified, True)
End If
Проблема в том, что у нас уволился продавец.Старый ноутбук передается новому продавцу, и под логином нового пользователя, когда он пытается это сделать, мы получаем сообщение об ошибке.Ошибка заключается в:
Unhandled Exception: System.Configuration.ConfigurationErrorsException:
An error occurred executing the configuration section handler for connectionStrings. ---> System.Configuration.ConfigurationErrorsException: Failed to encrypt the section 'connectionStrings' using provider 'RsaProtectedConfigurationProvider'.
Error message from the provider: Object already exists.
---> System.Security.Cryptography.CryptographicException: Object already exists
Решение 2
Я нашел более элегантное решение, чем в моем первоначальном ответе самому себе.Я обнаружил, что если я только что вошел в систему как пользователь, который изначально установил приложение и зашифровал файл конфигурации connectionstrings, перейдите в каталог .net framework в командной строке и запустите
aspnet_regiis -pa "NetFrameworkConfigurationKey" "{domain}\{user}"
это дало другому пользователю разрешение на доступ к контейнеру ключей шифрования RSA, и затем он работает для другого пользователя (ов).
Просто хотел добавить это сюда, так как я думал, что уже писал об этой проблеме в нашем блоге разработчиков, но нашел ее здесь, так что на случай, если мне понадобится посмотреть ее снова, она будет здесь.Добавим ссылку на наш блог разработчиков и в этой теме.
Другие советы
http://blogs.msdn.com/mosharaf/archive/2005/11/17/protectedConfiguration.aspx#1657603
скопируйте и вставьте:D
Понедельник, 12 февраля 2007 г. 12:15 от Naica
ре:Шифрование файлов конфигурации с использованием защищенной конфигурации
Вот список всех шагов, которые я выполнил, чтобы зашифровать два раздела на моем компьютере, а затем развернуть их на веб-сервере.Может быть, это кому-то поможет...:
Как создать контейнер ключей RSA машинного уровня
aspnet_regiis -pc "DataProtectionConfigurationProviderKeys" -exp
Добавьте это в web.config перед разделом ConnectionStrings:
<add name="DataProtectionConfigurationProvider" type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" keyContainerName="DataProtectionConfigurationProviderKeys" useMachineContainer="true" />
Не пропустите
<clear />
сверху!Важно при многократной игре с шифрованием / дешифрованиемУбедитесь, что это указано в верхней части файла Web.Config.Если отсутствует, добавьте его:
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
Сохраните и закройте файл Web.Config в VS (очень важно!)
В окне командной строки (мой локальный компьютер) перейдите в:
C:\WINNT\Microsoft.NET\Framework\v2.0.50727
Шифровать:(Помните, что необходимо изменить физический путь для вашего приложения или использовать опцию -app и указать имя виртуального каталога для приложения!Поскольку я использовал VS на своем КОМПЬЮТЕРЕ, я предпочел приведенный ниже вариант.Путь - это путь к файлу Web.config)
aspnet_regiis -pef "Строки подключения" "c:\Bla\Bla\Bla" -prov "DataProtectionConfigurationProvider"
aspnet_regiis -pef "system.web/членство" "c:\Bla\Bla\Bla" -prov "DataProtectionConfigurationProvider"
Для расшифровки (только при необходимости!):
aspnet_regiis -pdf "connectionStrings" "c:\Bla\Bla\Bla" aspnet_regiis -pdf "system.web/membership" "c:\Bla\Bla\Bla"
Удалить контейнер ключей (только при необходимости!)
aspnet_regiis -pz "DataProtectionConfigurationProviderKeys"
Сохраните приведенный выше ключ в XML-файл, чтобы экспортировать его с вашего локального компьютера на веб-сервер (UAT или Production).
aspnet_regiis -px "DataProtectionConfigurationProviderKeys" \temp\mykeyfile.xml -pri
Импортируйте контейнер ключей на веб-серверы:
aspnet_regiis -pi "DataProtectionConfigurationProviderKeys" \temp\mykeyfile.xml
Предоставить доступ к ключу на веб-сервере
aspnet_regiis -pa "DataProtectionConfigurationProviderKeys" "DOMAIN\User"
Смотрите в IIS имя пользователя ASP.NET или используйте:
Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name
Удалить Предоставление доступа к ключу на веб-сервере (только при необходимости!)
aspnet_regiis -pr "DataProtectionConfigurationProviderKeys" "Domain\User"
Скопируйте и вставьте на веб-сервер зашифрованный файл Web.config.
Так что у меня все получилось.
- удалена старая учетная запись пользователя с ноутбука
- сбросьте app.config, чтобы раздел был незащищен
- удален файл ключа со всех компьютерных ключей пользователей
- запустил приложение и разрешил ему защитить раздел
Но все, что я сделал, - это заставил его работать для этого пользователя.
ТЕПЕРЬ мне нужно знать, что я должен сделать, чтобы изменить код для защиты раздела, чтобы несколько пользователей на ПК могли использовать приложение.Виртуальный КОМПЬЮТЕР, вот я и приехал (сразу после отпуска в WDW с завтрашнего дня по следующую среду)!
любой совет, который поможет направить меня в правильном направлении, поскольку я не очень разбираюсь в этом типе шифрования RSA.
Похоже, проблема с разрешениями.У (нового) пользователя, о котором идет речь, есть права на запись в файл app.config?Был ли предыдущий пользователь локальным администратором или опытным пользователем, который мог бы замаскировать эту проблему?