Строка подключения App.config Ошибка защиты - PullRequest
3 голосов
/ 03 сентября 2008

У меня возникла проблема, с которой я сталкивался раньше; не могу найти ссылку на то, как ее решить.

Вот проблема. Мы шифруем раздел строк подключения в 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

Ответы [ 4 ]

2 голосов
/ 24 апреля 2010

http://blogs.msdn.com/mosharaf/archive/2005/11/17/protectedConfiguration.aspx#1657603

копирование и вставка: D

Понедельник, 12 февраля 2007 г., 12:15, Naica

re: Шифрование файлов конфигурации с использованием защищенной конфигурации

Вот список всех шагов, которые я сделал, чтобы зашифровать два раздела на моем ПК и затем развернуть его на WebServer. Может быть, это кому-нибудь поможет ...:

  1. Создание контейнера ключа RSA на уровне машины

    aspnet_regiis -pc "DataProtectionConfigurationProviderKeys" -exp
    
  2. Добавьте это в 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 /> сверху! Важно при многократной игре с шифрованием / дешифрованием

  3. Установите этот флажок в верхней части файла Web.Config. Если пропущено, добавьте:

    <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
    
  4. Сохраните и закройте файл Web.Config в VS (очень важно!)

  5. В окне командной строки (мой локальный компьютер) перейдите по адресу:

    C: \ WINNT \ Microsoft.NET \ Framework \ v2.0.50727

  6. Зашифровать: (Будьте внимательны, чтобы изменить физический путь для вашего приложения, или используйте опцию -app и дайте имя виртуальному каталогу для приложения! Поскольку я использовал VS на своем ПК, я предпочел опцию ниже. Путь путь к файлу Web.config)

    aspnet_regiis -pef "connectionStrings" "c: \ Bla \ Bla \ Bla" -пров "DataProtectionConfigurationProvider"

    aspnet_regiis -pef "system.web / members" "c: \ Bla \ Bla \ Bla" -пров "DataProtectionConfigurationProvider"

  7. Для расшифровки (только при необходимости!):

    aspnet_regiis -pdf "connectionStrings" "c:\Bla\Bla\Bla"
    
    aspnet_regiis -pdf "system.web/membership" "c:\Bla\Bla\Bla"
    
  8. Удалить контейнер ключей (только при необходимости!)

    aspnet_regiis -pz "DataProtectionConfigurationProviderKeys"
    
  9. Сохраните указанный выше ключ в xml-файле, чтобы экспортировать его с локального ПК на веб-сервер (UAT или Production)

    aspnet_regiis -px "DataProtectionConfigurationProviderKeys" \temp\mykeyfile.xml -pri
    
  10. Импорт контейнера ключей на серверы WebServer:

    aspnet_regiis -pi "DataProtectionConfigurationProviderKeys" \temp\mykeyfile.xml
    
  11. Предоставить доступ к ключу на веб-сервере

    aspnet_regiis -pa "DataProtectionConfigurationProviderKeys" "DOMAIN\User"
    

    См. В IIS пользователя ASP.NET или используйте:

    Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name
    
  12. Удалить Предоставить доступ к ключу на веб-сервере (только при необходимости!)

    aspnet_regiis -pr "DataProtectionConfigurationProviderKeys" "Domain\User"
    
  13. Скопируйте и вставьте в WebServer зашифрованный файл Web.config.

1 голос
/ 03 сентября 2008

Так что я все заработал.

  1. удалена старая учетная запись пользователя с ноутбука
  2. сбросить app.config, чтобы раздел не был защищен
  3. удален файл ключей у всех пользователей машинных ключей
  4. запустил приложение и разрешил ему защищать раздел

Но все, что он сделал, это заставил его работать на этого пользователя.

СЕЙЧАС мне нужно знать, что мне нужно сделать, чтобы изменить код для защиты раздела, чтобы приложение могли использовать несколько пользователей на ПК. Виртуальный ПК, вот и я (хорошо после каникул в WDW завтра в следующую среду)!

любой совет, который поможет мне направить меня в правильном направлении, поскольку я не очень опытен в этом типе шифрования RSA.

1 голос
/ 17 декабря 2008

Я нашел более элегантное решение, чем в моем первоначальном ответе на себя. Я обнаружил, что если я просто вошел в систему как пользователь, который установил приложение по собственной инициативе и заставил зашифровать строки подключения файла конфигурации, перейдите в каталог .net framework в командной строке commadn и запустите

aspnet_regiis -pa "NetFrameworkConfigurationKey" "{domain}\{user}"

он дал другому пользователю разрешение на доступ к контейнеру ключа шифрования RSA, и затем он работает для других пользователей.

Просто хотел добавить это здесь, так как я думал, что опубликовал эту проблему в нашем блоге разработчика, но нашел ее здесь, так что в случае, если мне нужно будет посмотреть ее снова, она будет здесь. Также добавим ссылку на наш блог для разработчиков в этой теме.

0 голосов
/ 03 сентября 2008

Похоже, проблема с разрешениями. (Новый) рассматриваемый пользователь имеет права на запись в файл app.config? Был ли предыдущий пользователь локальным администратором или опытным пользователем, который мог замаскировать эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...