Шифрование внешних блоков приложений с помощью экспортируемого поставщика ключей - PullRequest
0 голосов
/ 19 декабря 2008

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

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

На данный момент я добавил пользовательский Защищенный поставщик конфигурации в файл machine.config в .net v2.0 * в любой папке (и на всех целевых серверах)

пользовательский провайдер похож на это

<add name="MyCompanyProvider" 
    type="System.Configuration.RsaProtectedConfigurationProvider, 
          System.Configuration, Version=2.0.0.0, Culture=neutral, 
          PublicKeyToken=b03f5f7f11d50a3a,
         processorArchitecture=MSIL"
    keyContainerName="MyKey" 
    useMachineContainer="true" />

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

Глядя на dev_entlib.config, видно, что блок действительно был зашифрован моим провайдером. Мой провайдер использует мой контейнер ключей. Поэтому блок должен быть зашифрован с использованием моего контейнера ключей. Затем я экспортирую «MyKey» в XML-файл, используя:

c:\Windows\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis.exe -px "MyKey" "C:\keys.xml" -pri
Exporting RSA Keys to file...
Succeeded!

Этот файл ключа затем копируется на мой сервер sysTest, куда он импортируется, и имеет права доступа, предоставленные «NT Authority \ Network Services» и «ASPNET»

Затем я копирую зашифрованные файлы web.config и dev_entlib.config и пытаюсь отобразить строки подключения на небольшой странице, которая использует .net ConfigurationManager, чтобы получить коллекцию ConnectionStrings и отобразить их на странице. Эта страница работает под управлением IIS, а идентификация процесса - «NT Authority \ Network Services».

Проблема в том, что это не работает! Есть ошибки данных или «не удалось расшифровать с помощью провайдера MyCompanyProvider».

Мне кажется, что этот подход логичен, но все равно не работает.

У кого-нибудь есть другие предложения?

Ответы [ 2 ]

1 голос
/ 09 ноября 2011

Шифрование внешних файлов конфигурации Enterprise Library с помощью пользовательского контейнера ключей RSA с помощью инструмента Enterprise Library Configuration.

  • EntLib (4.1) использует поставщик защиты по умолчанию RsaProtectedConfigurationProvider . Но возможно удалить этого провайдера из вашего файла конфигурации и заменить его своим собственным с тем же именем, которое затем может указывать на вашего провайдера нестандартного ключа: " MyKey ".
  • Вы должны добавить этот configProtectedData в файл конфигурации, в котором есть область, которую вы хотите зашифровать (например, ваш внешний файл: * dev_entlib.config *). Вам вообще не нужно изменять файл machine.config .
  • После этого вы можете выбрать RsaProtectedConfigurationProvider из приложения конфигурации библиотеки предприятия для блока приложения доступа к данным ProtectionProvider.
  • Вы должны открыть этот EntLibConfig.exe с Запуск от имени администратора , если вы работаете в Vista, Windows 7, Windows 2008.
    • В противном случае вы получите ошибку:
      • Failed to encrypt the section 'connectionStrings' using provider 'RsaProtectedConfigurationProvider'. Error message from the provider: Object already exists.
  • Затем вы можете скопировать этот зашифрованный файл * dev_entlib.config * вместе с файлом конфигурации web.config на ваш сервер sysTest . Откройте файл web.config с помощью инструмента «Конфигурация корпоративной библиотеки» на этом сервере sysTest , который должен не получить ошибку:
    • Failed to decrypt using provider 'RsaProtectedConfigurationProvider'. Error message from the provider: Bad Data.

web.config

Этот файл в значительной степени пуст и просто указывает на внешний файл конфигурации данных:

<!-- web.config -->
<configuration>
  <configSections>
    <section name="enterpriseLibrary.ConfigurationSource" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ConfigurationSourceSection, Microsoft.Practices.EnterpriseLibrary.Common, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  </configSections>
  <enterpriseLibrary.ConfigurationSource selectedSource="External Data Configuration File Source">
    <sources>
      <add name="External Data Configuration File Source" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        filePath="dev_entlib.config" />
    </sources>
  </enterpriseLibrary.ConfigurationSource>
</configuration>

dev_entlib.config

В этом файле есть строки подключения и поставщик защиты, с помощью которых он должен быть зашифрован с помощью:

<!-- dev_entlib.config -->
<configuration>
    <configSections>
        <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
 </configSections>
    <dataConfiguration defaultDatabase="MyConnectionStringName" />
 <connectionStrings>
  <add name="cnHnicMediaLibrary" connectionString="Server=MyDbServer; Database=MyDbName; Integrated Security=SSPI"
   providerName="System.Data.SqlClient" />
 </connectionStrings>
  <configProtectedData>
    <providers>
      <remove name="RsaProtectedConfigurationProvider" />
      <add    name="RsaProtectedConfigurationProvider"
        keyContainerName="MyKey"
        useMachineContainer="true"
        description="Uses our own encryption key container so that it will work in a Web Farm setting. We need to trick Enterprise Library, which wants to use the default RsaCryptoServiceProvider to encrypt and decrypt, by replacing this default provider with our own while this configuration is processed!"
        type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </providers>
  </configProtectedData>
</configuration>

Основано на:

Я надеюсь, что это описывает сообщение об ошибке, которое у вас было и как это исправить.

0 голосов
/ 29 января 2009

Это пока невозможно. Мое решение состоит в том, чтобы просто зашифровать блоки как часть web.config, а затем скопировать и вставить эти блоки во внешний файл entLib.config. Затем эти блоки можно будет расшифровать на целевых серверах с помощью экспортированного ключа.

...