2010-07-28 3 views
17

У меня есть файл app.config, который мне нужно распространять с помощью моего приложения. Он был создан из-за ссылки на службу к веб-службе ASMX, которую я добавил.Encrypting app.config Файл

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

Вот мой конфиг: http://pastie.org/private/zjdzadnfwrjvwkmlbdsqw

Так что-нибудь там, что я могу зашифровать или что-нибудь?

+0

http://stackoverflow.com/questions/855483/wcf-encryption-solution-for-app-config-viewable-to-a-client может помочь – PRR

ответ

36

Вы не можете зашифровать все <system.serviceModel> - это группа разделов конфигурации, которая содержит разделы конфигурации.

aspnet_regiis только шифровать разделы конфигурации - так что вам нужно выборочно шифровать те части, вам нужно, например:

cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 
aspnet_regiis.exe -pef "system.serviceModel/bindings" . 
aspnet_regiis.exe -pef "system.serviceModel/services" . 

т.д.

При этом, вы можете зашифровать то, что вам нужно легко - что не слишком важно, можно оставить в ясном тексте.

Слово предупреждения: поскольку это aspnet_regiis, он ожидает, что иметь дело с web.config файлом - скопировать ваш app.config в папку и назовите его web.config, шифровать разделы и скопировать эти шифрованные разделы обратно в свой собственный app.config.

Или напишите свой собственный скрипт/decrypter в разделе конфигурации - это действительно всего несколько строк кода! Или используйте мой - я написал небольшую утилиту ConfigSectionCrypt, приходите с ее OneDrive - с полным исходным кодом (C# - .NET 3.5 - Visual Studio 2008). Он позволяет шифровать и расшифровывать разделы из любого файла конфигурации - просто укажите имя файла в командной строке.

+7

+1 для точной установки вопроса –

+1

Отлично! Только ответ, который я искал. Ваше приложение для командной строки выполнило эту работу, и я уберу ее для дальнейшего использования. Спасибо за помощь! – Eaton

+0

Ссылка на skydrive, похоже, не работает. Каким-либо другим способом мы можем получить утилиту командной строки? –

2

Ну, файл будет прочитан программой, когда он будет запущен, поэтому изменение файла может быть плохой идеей, вы можете добавить контрольные суммы в каждую строку, чтобы убедиться, что она действительна, проверяя ее в своем приложении или проверяя на наличие изменений, поскольку последний прогон или что-то еще. Я никогда не слышал об шифровании app.config раньше, чтобы быть честным.

+0

основном я хотел бы скрыть URL в мой лицензионный скрипт в некотором роде. Я знаю, что никакой метод шифрования на рабочем столе полностью не позволит кому-либо просмотреть его, но я хотел бы скрыть его от стандартного пользователя. – Eaton

+0

вы можете использовать какое-то шифрование ROT, а в своем приложении вы можете расшифровать его, шифрование ROT - это просто изменение символа, как использование стандартного сдвига, как 2, строка, которая является «abc», становится «cde», вы можете использовать гораздо более сложные методы хотя, но все зависит от того, насколько нужна безопасность. –

4

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

http://www.codeproject.com/KB/dotnet/EncryptingTheAppConfig.aspx

http://weblogs.asp.net/scottgu/archive/2006/01/09/434893.aspx

http://msdn.microsoft.com/en-us/library/dtkwfdky.aspx

http://odetocode.com/blogs/scott/archive/2006/01/08/encrypting-custom-configuration-sections.aspx

Вот версия MSDN: http://msdn.microsoft.com/en-us/library/89211k9b%28VS.80%29.aspx

Вот один для того, как зашифровать с помощью кода: http://davidhayden.com/blog/dave/archive/2006/03/14/2883.aspx

+0

Я пробовал несколько, но ни один из них не относится к настройкам модели обслуживания. – Eaton

3

Я использую следующий для шифрования моих строк подключения в web.config, почему бы не использовать то же самое для себя. Хотя я не уверен.

Чтобы зашифровать:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pef "connectionStrings" "\myWebSitePath" 

Для дешифрования:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pdf "connectionStrings" "\myWebsitePath" 

Поместите их в летучей мыши файлы, так что вы можете зашифровать или расшифровать на лету.

+0

Это не строки соединения, поэтому это не сработает. – Eaton

2

Это не огромная сделка, если этот файл модифицирована/просмотреть ...

В таком случае, что является безопасность для?

Вы можете программно шифровать разделы конфигурационного файла с помощью SectionInformation.ProtectSection.

+0

Просто чтобы URL-адрес не попал в глаза от стандартного пользователя. – Eaton

+0

Я просто не хочу, чтобы это был простой текст. – Eaton

+0

SectionInformation.ProtectSection кажется более простым решением, зачем идти с отдельной утилитой aspnet_regiis? – Cahit

0

Вы должны установить ссылку на System.Configuration.dll в своем проекте для запуска кода.

ExeConfigurationFileMap configFileMap = new ExeConfigurationFileMap(); 
       configFileMap.ExeConfigFilename = exeConfigName; 
       System.Configuration.Configuration myConfig = ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None); 

       ConnectionStringsSection section = myConfig.GetSection("connectionStrings") as ConnectionStringsSection; 

       if (section.SectionInformation.IsProtected) 
       { 
        // Remove encryption. 
        section.SectionInformation.UnprotectSection(); 
       } 
       else 
       { 
        // Encrypt the section. 
        section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider"); 
       } 

       myConfig.Save();