Мне не кажется, что ты все сделал правильно.Прежде всего, здесь есть две проблемы:
- Проверка того, что
machineKey
одинакова на обоих веб-серверах. - Проверка того, что один и тот же закрытый ключ RSA установлен в контейнере ключей наоба сервера, так что зашифрованная конфигурация может быть расшифрована каждым сервером.
Это отдельные проблемы: machineKey не имеет отношения к шифрованию / дешифрованию раздела конфигурации, который вы хотите защитить.
Итак, прежде всего команда aspnet_regiis -pc
используется для создания нового контейнера ключей RSA, и причина его сбоя заключается в том, что указанное вами имя контейнера уже существует, потому что оно используется по умолчанию.Пара ключей в этом контейнере не экспортируется, поэтому вам нужно создать новый контейнер ключей и указать переключатель -exp
, чтобы обозначить, что пара ключей экспортируема.
aspnet_regiis -pc "MyDeploymentKeyContainer" -exp
Затем экспортировать ключ в файл, включаязакрытый ключ: закрытый ключ используется для расшифровки раздела конфигурации, поэтому веб-серверу он понадобится.
aspnet_regiis -px "MyDeploymentKeyContainer" deploykey.xml -pri
Теперь добавьте раздел config в ваш 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