Развертывание зашифрованного app.config - PullRequest
0 голосов
/ 21 апреля 2010

Я создал консольное приложение .Net и зашифровал файл app.config с помощью RSAProtectedConfigurationProvider.Я использовал статью http://www.codeproject.com/KB/dotnet/EncryptingTheAppConfig.aspx в качестве примера для шифрования.Он отлично работает в IDE на моем рабочем столе XP.Затем я развернул свое приложение на сервере Windows 2003.Пакет включал в себя исполняемый файл приложения и зашифрованный файл app.exe.config.Однако на сервере произошла ошибка приложения со следующим исключением:

Необработанное исключение: System.Configuration.ConfigurationErrorsException: не удалось расшифровать с помощью поставщика RsaProtectedConfigurationProvider.Сообщение об ошибке от поставщика: Контейнер ключа RSA не может быть открыт.

Я решил зашифровать app.config на сервере, поэтому скопировал app.config и зашифровал его.App.exe.config выглядел зашифрованным, и я запустил приложение.Однако это не удалось: хотя он и не вызывал исключение Rsa, как раньше, он не мог прочитать строку подключения.После того как я расшифровал app.exe.config, я обнаружил, что он содержит только приведенную ниже строку

<connectionStrings>
  <clear />
  <add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
        providerName="System.Data.SqlClient" />

, хотя исходный app.config содержал строку подключения для конкретного приложения.Я думаю, что для решения моей проблемы я должен экспортировать ключи RSA со своего рабочего стола на сервер.Можете ли вы посоветовать, как я могу это сделать (это не веб-приложение!).Большое спасибо за ваш совет.

1 Ответ

1 голос
/ 23 апреля 2010

Я нашел решение в статье APP.config шифрование с RSA и развертывание .

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

Вот мои заметки:

  1. Работает нормально, если IIS установлен на рабочем столе разработки и на целевом сервере. Но для моего консольного приложения IIS не нужен, и он может не существовать на сервере. Автор статьи предлагает обходной путь в этом случае. Я нашел это немного сложный и используемый aspnet_regiis, потому что IIS установлен как на моем исходном, так и на целевом компьютере.

  2. После добавления раздела configProtectedData в мой файл app.config Visual Studio создала предупреждения:

    Атрибут 'keyContainerName' не объявлен.
    Атрибут 'useMachineContainer' не объявлен.
    Атрибут 'description' не объявлен.

    Согласно статье Visual Studio выдает предупреждения, когда разделы Web.Config шифруются с использованием RSA Дартом Заром, предупреждения могут быть проигнорированы для Web.config.
    Я проигнорировал их в моем случае (для app.config), и все работало нормально.

Надеюсь, мой пост был полезен.

...