Шифрование Web.config и установка

76
10

Я новичок в процессе шифрования и безуспешно пытался установить зашифрованный файл web.config на сервер хостинговых компаний. Я использую Microsoft Visual Web Developer 2010 Express.


Я выполнил шаги, расположенные в Пошаговое руководство. Шифрование информации о конфигурации с помощью Protected несколько раз.


Обратите внимание на прохождение игры, у меня нет файлов machineKeys в моем файле web.config, поэтому я пропустил этот шаг шифрования.


Когда я запускаю aspnet_regiis -pef connectionStrings "c:\Users......\mywebsite.com"

Возврат:
Шифрование раздела конфигурации...
Преемник!


2) Затем я FTP мой файл web.config, и сайт получает следующую ошибку: Примечание: строка 8 выделена)


Ошибка сервера в приложении "/".


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


Сообщение об ошибке Parser: не удалось расшифровать с использованием поставщика RsaProtectedConfigurationProvider. Сообщение об ошибке от поставщика: Плохие данные.


Ошибка источника:


Линия 6:
Строка 7:
Строка 8:
Строка 10:


Исходный файл: C:\HostingSpaces * имя пользователя ** mywebsite.com *\wwwroot\web.config Строка: 8


Информация о версии: Microsoft.NET Framework Версия: 4.0.30319; Версия ASP.NET: 4.0.30319.1


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


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


Любая помощь очень ценится и несколько удивлена, что я не могу найти никаких проблем, подобных этому в Интернете.


Большое спасибо.

спросил(а) 2021-01-19T13:18:22+03:00 2 месяца, 3 недели назад
1
Решение
87

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


ОЧЕНЬ ВАЖНО: убедитесь, что этот код работает только в процессе производства. Если вы запустите его во время разработки, вы зашифруете исходный файл web.config, и вы не сможете его вернуть.


   private static void EncryptConfig() {
System.Configuration.Configuration config = WebConfigurationManager.OpenWebConfiguration(HostingEnvironment.ApplicationVirtualPath);

foreach (string sectionName in new[] { "connectionStrings", "appSettings" }) {
ConfigurationSection section = config.GetSection(sectionName);
if (!section.SectionInformation.IsProtected) {
section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
}
}

config.Save();
}


Вы можете вызвать этот метод в Application_Start()

protected void Application_Start() {
if (IsProduction) {
EncryptConfig();
}
}

Это решение не идеально, потому что при развертывании вашего web.config на ваш производственный сервер он не будет зашифрован. Поскольку шифрование происходит во время выполнения, оно будет зашифровано только после запуска вашего приложения. Когда первый запрос приходит, web.config будет зашифрован. Когда поступит второй запрос, ваше приложение нужно будет перезапустить, поскольку asp.net обнаружит, что изменился файл web.config. И с этого момента ваше приложение будет работать нормально с зашифрованным web.config. Преимущество этого метода заключается в том, что шифрование происходит автоматически. Всякий раз, когда вы развертываете новый файл web.config, он автоматически зашифровывается во время запуска.


Важно: убедитесь, что EncryptConfig() работает только в процессе производства, чтобы вы не шифровали исходный файл web.config.

ответил(а) 2021-01-19T13:18:22+03:00 2 месяца, 3 недели назад
75

Джонни О - Спасибо. Это сработало так легко. CP


Я добавил файл global.asax и вот фрагменты кода, которые вошли в этот файл (global.asax.cs).

Большая часть этого дублируется сверху, но это все мое решение. Еще раз спасибо.


using System.Web.Configuration;
using System.Configuration;
using System.Web.Hosting;

protected void Application_Start(object sender, EventArgs e)
{
//Test to see if this app is being started on the development machine (e.g. in the debugger)
//This code will encript web.config the first time this program runs.
//Therefore, it is important to have a backup copy of the non-encrypted web.config as this
//code below will encrypt it, which is what we want to happen on the production server.
if (! System.Diagnostics.Debugger.IsAttached )
{
EncryptConfig(); //See below
}
}

/// <summary>
/// This technique of encrypting the web.config file was learned from this forum post:
/// http://stackoverflow.com/questions/5602630/encrypting-web-config-and-installing
/// </summary>
private static void EncryptConfig()
{
System.Configuration.Configuration config = WebConfigurationManager.OpenWebConfiguration(HostingEnvironment.ApplicationVirtualPath);

foreach (string sectionName in new[] { "connectionStrings", "appSettings" })
{
ConfigurationSection section = config.GetSection(sectionName);
if (!section.SectionInformation.IsProtected)
{
section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
}
}

config.Save();
}

ответил(а) 2021-01-19T13:18:22+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема