Шифрование файла app.config
У меня есть файл app.config, который мне нужно распространять с моим приложением. Он был создан из-за ссылки на службу к веб-службе ASMX, которую я добавил.
Это не огромная сделка, если этот файл изменен/просмотрен, но я все равно хочу сделать его безопасным. Я уже проверяю хэш конфигурации и удостоверяюсь, что он действителен, но я все еще хочу добавить уровень защиты.
Вот моя конфигурация: http://pastie.org/private/zjdzadnfwrjvwkmlbdsqw
Так есть ли что-нибудь там, что я могу зашифровать или что-нибудь еще?
Ответы
Ответ 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();