Шифрование Web.config и установка - PullRequest
2 голосов
/ 09 апреля 2011

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

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

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

Когда я запустил строки соединения aspnet_regiis -pef "c: \ Users ...... \ mywebsite.com"
Возврат: Шифрование раздела конфигурации ... Преемник!

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

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

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

Сообщение об ошибке синтаксического анализатора: не удалось расшифровать с помощью поставщика 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


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

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

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

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

Ответы [ 2 ]

3 голосов
/ 09 апреля 2011

У меня нет прямого ответа на ваш вопрос, но вот простая техника для шифрования 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.,

2 голосов
/ 22 февраля 2012

Джонни О - Спасибо. Это сработало так легко. 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:
    /// /4192753/shifrovanie-web-config-i-ustanovka
    /// </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();
    }
...