Шифрование / дешифрование разделов app.config с использованием RsaProtectedConfigurationProvider - PullRequest
6 голосов
/ 23 ноября 2010

Во время установки нашей программы мы запускаем этот метод для шифрования разделов app.config:

// Get the application configuration file.
Configuration config =
      ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

// Define the Rsa provider name.
const string provider = "RsaProtectedConfigurationProvider";

// Get the section to protect.
ConfigurationSection connStrings = config.ConnectionStrings;

if (connStrings != null)
{
    if (!connStrings.SectionInformation.IsProtected)
    {
        if (!connStrings.ElementInformation.IsLocked)
        {
            // Protect the section.
            connStrings.SectionInformation.ProtectSection(provider);

            connStrings.SectionInformation.ForceSave = true;
            config.Save(ConfigurationSaveMode.Full);
        }
    }
}

Работает пока отлично.Но если я запускаю эту программу, мы сталкиваемся с несколькими компьютерами со следующей ошибкой «Не удалось расшифровать с помощью поставщика« RsaProtectedConfigurationProvider ». Сообщение об ошибке от поставщика: Не удалось открыть контейнер ключа RSA ».

Конечно, я искал и нашел эту справку , но это не работает.Есть идеи?

Ответы [ 3 ]

5 голосов
/ 21 марта 2011

Я столкнулся с подобными проблемами при отладке в Visual Studio 2010 на Win 7 с UAC, для которого установлена ​​защита по умолчанию.

Чтобы обойти эту проблему, мне пришлось запустить Visual Studio от имени администратора("Запустить от имени администратора").

У меня возникла та же проблема при попытке запустить aspnet_regiis.exe для шифрования раздела моего web.config.Если бы я не запустил командную строку / консоль «от имени администратора», я получил бы ошибку командной строки, которая была бы еще более загадочной: «Объект уже существует».

3 голосов
/ 23 ноября 2010

Да.

Причина в том, что работающие машины имеют RsaProtectedConfigurationProvider настройки в их machine.config .Те, кто не работает, не имеют его - просто вручную добавьте его для этих машин .

Я думаю, что это один из шагов, которые aspnet_regiis.exe делает.Я не могу представить, что вы хотите запустить это на всех клиентских машинах.

ОБНОВЛЕНИЕ

Хорошо, я сделал основную часть ошибки, выделенную жирным шрифтом в вашем вопросе- Вы правы, это другой вопрос.Это проблема безопасности .Если вы посмотрите на местоположение C: \ Documents and Settings \ Все пользователи \ Данные приложения \ Microsoft \ Crypto \ RSA \ MachineKeys или C: \ ProgramData \ Microsoft \ Crypto \ RSA \ MachineKeys в зависимости от операционной системы вы видите несколько файлов.У вашего процесса есть доступ к папке, поэтому просто предоставьте файлам доступ ко всей папке для идентификации приложения или определенного файла (временная метка сообщит вам, если вы ее создали).

0 голосов
/ 19 августа 2013

Я получил это в app.config, который работал на Windows Server, настроенном как SQL Server. На нем не было установлено IIS. В файле machine.config по умолчанию указан RSAProtectedConfigurationProvider, но когда мы посмотрели на две папки, упомянутые Aliostad выше, папки были пустыми. Ключи не были установлены. Мы использовали инструмент aspnet_regiis для создания пользовательского ключа. затем мы использовали его для предоставления доступа к идентификатору, под которым запускается пакетное задание. Все это работало с cmd.exe и aspnet_regiis от имени администратора.

...