Шифрование ASP.NET — aspnet_regiis — Ферма

У нас есть веб-сайт, который использует "NT Authority\Network Service".

Response.Write(WindowsIdentity.GetCurrent().Name); 

В настоящее время мы используем следующую команду для шифрования файлов конфигурации.

aspnet_regiis -pc "NetFrameworkConfigurationKey"
aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT Authority\Network Service"
aspnet_regiis.exe -pef "connectionStrings" "C:\WebAppLocation\Folder"

Примечание. Мы не используем «-exp». Когда мы используем «-exp», он не создает контейнер ключей RSA.

Как видите, мы используем ключ по умолчанию — NetFrameworkConfigurationKey. На нашем сайте есть балансировщик нагрузки. Доступны веб-сервер1(W1) и веб-сервер2 (W2).

Если я буду следовать вышеупомянутым командам, мы будем использовать отдельные клавиши для W1 и W2. Однако сайт работает с этим подходом.

Достаточен ли этот подход? Есть ли у него недостатки или дыры в безопасности? Будет ли это ошибкой при любом сценарии?

Примечание. Машинный ключ добавляется в наш файл web.config. В обоих конфигах одинаково. Однако наши configProtectedData отсутствуют в файле Web.Config. Кроме того, я думаю, что NetFrameworkConfigurationKey будет отличаться на обоих серверах.

Я прочитал следующую статью msdn для шифрования в сценариях веб-фермы. http://msdn.microsoft.com/en-us/library/ff650304.aspx


person LCJ    schedule 03.11.2011    source источник


Ответы (3)


Мне не кажется, что вы все сделали правильно. Прежде всего, здесь есть две проблемы:

  1. Убедитесь, что machineKey одинаков на обоих веб-серверах.
  2. Убедитесь, что один и тот же закрытый ключ RSA установлен в контейнере ключей на обоих серверах, чтобы зашифрованная конфигурация могла быть расшифрована каждым сервером.

Это отдельные проблемы: machineKey не имеет отношения к шифрованию/дешифрованию раздела конфигурации, который вы хотите защитить.

Итак, прежде всего, команда aspnet_regiis -pc используется для создания нового контейнера ключей RSA, и причина ее сбоя заключается в том, что указанное вами имя контейнера уже существует, поскольку оно используется по умолчанию. Пара ключей в этом контейнере не экспортируется, поэтому вам нужно создать новый контейнер ключей и указать переключатель -exp, чтобы обозначить, что пара ключей экспортируется.

aspnet_regiis -pc "MyDeploymentKeyContainer" -exp

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

aspnet_regiis -px "MyDeploymentKeyContainer" deploykey.xml -pri

Теперь добавьте раздел конфигурации в ваш файл web.config и сохраните его.

<configProtectedData>
  <providers>
  <add keyContainerName="MyDeploymentKeyContainer" 
           useMachineContainer="true"
           description="Uses RsaCryptoServiceProvider to encrypt and decrypt"
           name="DeploymentProvider"
     type="System.Configuration.RsaProtectedConfigurationProvider,System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  </providers>
</configProtectedData>

Затем зашифруйте раздел web.config, указав имя провайдера, как показано выше (здесь это «DeploymentProvider»).

aspnet_regiis -pef "connectionStrings" "C:\WebAppLocation\Folder" -prov "DeploymentProvider"

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

aspnet_regiis -pi deploykey.xml

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

aspnet_regiis -pa "MyDeploymentKeyContainer" SomeDomain\SomeAccount
person Steve Rowbotham    schedule 03.11.2011

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

Это также позволит вам масштабировать будущие приложения, не испортив все больше и больше web.configs.

person rick schott    schedule 03.11.2011

Я решил это таким образом:

aspnet_regiis -pi "MyDeploymentKeyContainer" "c:\keys.xml"
person Frank    schedule 09.02.2019