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

Шифрование и развертывание app.config

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

Я знаю, что существует несколько способов:

  • Aspnet_Regiis (RSAProtectedConfigurationProvider, DPAPIProtectedConfigurationProvider), привязанный к машине, пользователю или обычаю. RSA.

  • System.Security.Cryptography.ProtectedData привязан к машине или пользователю.

  • Зашифруйте app.config при первом выполнении. Что небезопасно.

Что вы рекомендуете или что лучше всего зашифровывать app.config и предоставлять приложение на разные компьютеры с помощью установки или с копией и вставкой?

4b9b3361

Ответ 1

Шаг 1 Создание пары ключей RSA

aspnet_regiis -pc yourkey -exp

Шаг2 Экспортируйте ключ в файл XML

aspnet_regiis -px yourkey keyfile.xml -pri

для каждой машины

Шаг 3 Импортируйте свой контейнер

aspnet_regiis -pi yourkey keyfile.xml (see step 2)

для каждой машины

Шаг 4 Редактировать machine.config(канонический путь C:\Windows\Microsoft.NET\Framework [64 | 32]\v [Версия]\Конфигурация)

добавьте в раздел configProtectedData​​strong > этот ниже элемент и установите defaultProvider = "YourProvider"

<add name="YourProvider"
                type="System.Configuration.RsaProtectedConfigurationProvider,System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
                description="Uses RsaCryptoServiceProvider to encrypt and decrypt for my infrastucture"

                keyContainerName="yourkey"

                cspProviderName=""
                useMachineContainer="true"
                useOAEP="false" />

Затем вы можете зашифровать на машине и вставить в другое, помните, что должны предоставлять привилегии пользователям с

aspnet_regiis -pa yourkey [DOMAIN\USER]

Группа администраторов уже авторизована.

Для получения дополнительной информации http://msdn.microsoft.com/en-us/library/yxw286t2(v=vs.90).aspx

конечно, эти шаги можно поместить в файл powershell/batch

Другой способ шифрования секции connectionString по коду

 var connectionStrings = ConfigurationManager.GetSection("connectionStrings") 
 if(!section.SectionInformation.IsProtected)
     connectionStrings.SectionInformation.ProtectSection("YourProvider");

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

Таким образом, на этапе больше o меньше

  • Аутентификация пользователя
  • Требовать информацию о соединении в службе с именем пользователя в качестве параметра (протокол HTTPS)
  • строка с возвратом службы
  • Приложение подключится к DB

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

Надеюсь, вам будет полезно

Ответ 2

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

С помощью специального действия в установщике msi вы можете зашифровать файл конфигурации напрямую с помощью API защиты данных Windows (DPAPI). Чтобы обеспечить вторую энтропию, вы можете использовать обфускатор. В результате только приложение может зашифровать файл конфигурации.

Преимущество

  • Достаточно безопасный.
  • Не требуется конфигурация машины.
  • Вставьте учетные данные во время настройки.

Неудобство

  • Конфигурационный файл не зашифрован в настройке. Вы должны защитить его (разрешения).

Пожалуйста, не стесняйтесь обсуждать и давать ответы на этот ответ.