Развертывание предварительно зашифрованных файлов конфигурации в производственной среде - PullRequest
3 голосов
/ 15 марта 2012

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

Это означает, что нашему серверу сборки (encryptor) и производственному серверу (decryptor) нужны одинаковые ключи,Итак, я пытаюсь сделать очень простой тест на данный момент.Зашифруйте Web.Config на MachineA - расшифруйте его на MachineB.Вот что я пытался протестировать до сих пор

Создайте новый контейнер пар ключей RSA на моем локальном компьютере.

aspnet_regiis -pc "MyContainer" -exp

Дайте разрешения ACL мне и пользователям NetworkService.

aspnet_regiis -pa "MyContainer" "MyDomain\My.Account"
aspnet_regiis -pa "MyContainer" "NT AUTHORITY\NETWORK SERVICE"

Экспорт этой пары ключей в XML-файл

aspnet_regiis -px "MyContainer" C:\MyContainer.xml -pri

Скопируйте этот файл в другойpc & import it

aspnet_regiis -pi "MyContainer" C:\MyContainer.xml

Дайте моему коллеге и его машинам права пользователя NetworkService на вновь импортированный файл

aspnet_regiis -pa "MyContainer" "MyDomain\My.Colleague"
aspnet_regiis -pa "MyContainer" "NT AUTHORITY\NETWORK SERVICE"

Затем я создал очень простой файл web.config на своем локальном компьютере..

<?xml version="1.0"?>
<configuration>
    <appSettings>
        <add key="SecretKey" value="ValueWeWantToHide" />
    </appSettings>
    <configProtectedData>
        <providers>
            <add name="SampleProvider"
                 type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
                 keyContainerName="MyContainer"
                 useMachineContainer="true" />
        </providers>
    </configProtectedData>
</configuration>

Я могу довольно легко зашифровать и расшифровать раздел appSettings, используя команды.Они успешно шифруют и дешифруют, и зашифрованный раздел помечается правильным провайдером после шифрования (<appSettings configProtectionProvider="RsaProtectedConfigurationProvider">)

aspnet_regiis -pef appSettings D:\testapp
and
aspnet_regiis -pdf appSettings D:\testapp

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

Failed to decrypt using provider 'RSAProtectedConfigurationProvider'. Error message from provider: Bad Data

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

1 Ответ

3 голосов
/ 15 марта 2012

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

Вам необходимо указать поставщика:

aspnet_regiis -pef appSettings D:\testapp -prov "SampleProvider"

На вашей коллеге машина:

aspnet_regiis -pdf appSettings D:\testapp
...