2015-01-05 3 views
0

У меня есть следующий класс для шифрования соединения строкАвтоматическое шифровать строку соединения в Web.config

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

using System.Web.Configuration; 
using System.Web.Security; 
using System.Configuration; 

namespace App.WebUI.Infrastructure 
{ 
    public static class ConnectionStringEncryption 
    { 
     private static readonly string Path = HttpRuntime.AppDomainAppVirtualPath; 

     public static void EncryptConnString() 
     { 
      Configuration config = WebConfigurationManager.OpenWebConfiguration(Path); 
      ConfigurationSection section = config.GetSection("connectionStrings"); 
      if (!section.SectionInformation.IsProtected) 
      { 
       section.SectionInformation.ProtectSection("RsaProtectedConfigurationProvider"); 
       config.Save(); 
      } 
     } 

     public static void DecryptConnString() 
     { 
      Configuration config = WebConfigurationManager.OpenWebConfiguration(Path); 
      ConfigurationSection section = config.GetSection("connectionStrings"); 
      if (section.SectionInformation.IsProtected) 
      { 
       section.SectionInformation.UnprotectSection(); 
       config.Save(); 
      } 
     } 
    } 
} 

В Global.asax.cs

 if(!System.Diagnostics.Debugger.IsAttached) 
      ConnectionStringEncryption.EncryptConnString(); 

Когда я попробовать это местное без «если (! System.Diagnostics.Debugger.IsAttached) «отлично работает, но когда я публикую, я получаю следующую ошибку. Отказано в доступе к пути «... \ web.config».

У меня нет доступа к разрешению на изменение файлов на сервере, и я не хочу.

Есть ли другой способ добиться этого без изменения прав на разрешение?

Благодаря

+0

Вы пишете на диск с помощью этого кода. У учетной записи, на которой запущен пул приложений для веб-сайта, нет разрешения на это. Так что не делай этого. Существуют способы защиты такого рода информации. Чтение и запись на диск - это не очень хорошая идея. Лучше спросить «Я (думаю, мне нужно) писать зашифрованные/защищенные строки подключения на диск из-за XYZ. Как мне это сделать с моего сайта?» – Will

+0

Каков наилучший способ шифрования автоматической строки подключения в web.config при каждом опубликовании? Это одно из требований. Не хотите использовать инструмент aspnet_regiis.exe. – Valter

+0

* Вы не можете *, если ... Нет, даже не хочу говорить. Предоставление прав на запись в пул приложений для вашего сайта в каталоге *** очень плохо. *** Зачем вам это нужно, чтобы ENCRYPT? Разве вы не должны публиковать зашифрованную версию и просто расшифровывать ее? Это просто странно. – Will

ответ

0

Так или иначе, процесс шифрования файла web.config необходимо разрешение на запись в него по понятным причинам. Возможно, вопрос, который вы должны задать, заключается в том, как запустить процесс как пользователь, имеющий разрешения на запись в файл. Мой ответ на это: вы либо изменяете AppPool, чтобы использовать пользователя, у которого есть разрешения на запись файла, либо вы поместите свой код в другой исполняемый файл, который выполняется, например, на время установки (в качестве администратора) вместо этого во время выполнения.

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

+0

Я использую VS2013 для развертывания приложения. Я знаю, что у WebDeploy3.5 есть функция, которая обрабатывает это для меня. http://blogs.iis.net/msdeploy/archive/2013/07/09/webdeploy-3-5-rtw.aspx Знаете ли вы, как добавить это правило «-EnableRule: EncryptWebConfig» в средство развертывания VS2013? – Valter

+0

Извините, я не очень хорошо знаком с различными версиями возможностей веб-развертывания Visual Studio. Я предлагаю вам искать или задавать новый вопрос более конкретно о развертывании зашифрованных файлов web.config через Visual Studio или иначе. Проверьте http://stackoverflow.com/questions/950978/automatically-encrypt-sections-of-web-config-after-deploy-publish – BlueMonkMN

Смежные вопросы