Подтвердить что ты не робот

Шифрование файла app.config

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

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

Вот моя конфигурация: http://pastie.org/private/zjdzadnfwrjvwkmlbdsqw

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

4b9b3361

Ответ 1

Вы не можете зашифровать всю группу <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.

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

Ответ 2

Вы можете зашифровать разделы 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

Ответ 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" 

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

Ответ 4

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

Ответ 5

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

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

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

Ответ 6

Вы должны установить ссылку на 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();