Вопрос

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

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

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

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

  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 "Строки подключения" "c:\Bla\Bla\Bla" -prov "DataProtectionConfigurationProvider"

    aspnet_regiis -pef "system.web/членство" "c:\Bla\Bla\Bla" -prov "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. Импортируйте контейнер ключей на веб-серверы:

    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. Скопируйте и вставьте на веб-сервер зашифрованный файл Web.config.

Так что у меня все получилось.

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

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

ТЕПЕРЬ мне нужно знать, что я должен сделать, чтобы изменить код для защиты раздела, чтобы несколько пользователей на ПК могли использовать приложение.Виртуальный КОМПЬЮТЕР, вот я и приехал (сразу после отпуска в WDW с завтрашнего дня по следующую среду)!

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top