Импорт и экспорт защищенных контейнеров ключей RSA для конфигурации

Обновлен: Ноябрь 2007

Защищенная конфигурация позволяет создавать, удалять, экспортировать и импортировать ключи RSA при использовании RsaProtectedConfigurationProvider. Во-первых, рекомендуется использовать данные конфигурации для веб-фермы, где развертывание одного шифрованного файла Web.config выполняется для нескольких серверов. В этом случае контейнер ключей RSA также должен развертываться для этих серверов. Для этого следует создать контейнер ключей RSA для приложения, экспортировать его в XML-файл и импортировать его на каждый сервер, для которого требуется дешифрование шифрованного файла Web.config.

Также рекомендуется создать контейнер ключей RSA для единичного веб-сервера, который содержит несколько приложений ASP.NET. Создавая контейнер ключей RSA для каждого приложения или каждого набора приложений для одного заказчика, можно повысить безопасность конфиденциальных данных конфигурации приложения, создав условия, при которых файл Web.config одного приложения не может быть дешифрован с помощью контейнера ключей RSA из другого приложения.

Создание контейнера ключей RSA

Для создания контейнера ключей RSA можно использовать инструмент регистрации IIS ASP.NET (Aspnet_regiis.exe) с переключателем –pc. Следует присвоить контейнеру ключей имя, которое определяет контейнер ключей, используемый RsaProtectedConfigurationProvider, указанным в разделе configProtectedData файла Web.config приложения. Чтобы обеспечить возможность экспорта контейнера ключей RSA, следует включить параметр -exp.

Например, следующая команда создает контейнер ключей RSA с именем SampleKeys, который является контейнером ключей на уровне компьютера и может быть экспортирован.

aspnet_regiis -pc "SampleKeys"–exp

В следующем примере демонстрируется раздел configProtectedData файла Web.config. В данном разделе указаны RsaProtectedConfigurationProvider, которые используют на уровне компьютера контейнер ключей RSA с именем SampleKeys.

<configProtectedData>
   <providers>
      <add name="SampleProvider" 
           type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0,
                 Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
                 processorArchitecture=MSIL"
           keyContainerName="SampleKeys" 
           useMachineContainer="true" />
   </providers>
</configProtectedData>
yxw286t2.alert_note(ru-ru,VS.90).gifПримечание.

На случай непреднамеренного удаления ключей шифрования и дешифрования для разделов защищенной конфигурации контейнеры ключей RSA не удаляются в случае удаления платформы .NET.Framework.

Предоставление разрешения на доступ к контейнеру ключей RSA

По умолчанию контейнеры ключей RSA надежно защищены списками управления доступом NTFS (ACL) на том сервере, где они установлены. Таким образом повышается безопасность шифрованных данных путем ограничения круга лиц, имеющих доступ к ключам шифрования.

Прежде чем ASP.NET сможет использовать контейнер ключей RSA, должна быть выполнена авторизация удостоверения процесса приложения ASP.NET, чтобы открыть для процесса доступ на чтение контейнера ключей RSA. Дополнительные сведения о настройке и определении удостоверения приложения ASP.NET см. в разделе Олицетворение ASP.NET.

Можно использовать инструмент Aspnet_regiis.exe с переключателем -pa, чтобы назначить для удостоверения приложения ASP.NET разрешение на чтение контейнера ключей RSA. Например, следующая команда предоставляет учетной записи Windows Server 2003 NETWORK SERVICE доступ на чтение на уровне компьютера контейнера ключей RSA с именем SampleKeys.

aspnet_regiis -pa "SampleKeys" "NT AUTHORITY\NETWORK SERVICE"
yxw286t2.alert_note(ru-ru,VS.90).gifПримечание.

Если контейнер ключей RSA является контейнером на уровне пользователя, необходимо выполнить вход с учетными данными пользователя, в профиле Windows которого хранится ключ; кроме того, необходимо включить параметр -pku, чтобы предоставить доступ к контейнеру ключей RSA на уровне пользователя. Дополнительные сведения см. в разделе Основные сведения о контейнерах ключей RSA уровня компьютера и уровня пользователя.

Чтобы использовать параметр по умолчанию RsaProtectedConfigurationProvider, заданный в конфигурации компьютера, следует сначала предоставить удостоверению приложения Windows доступ к контейнеру ключей на уровне компьютера с именем NetFrameworkConfigurationKey, который задан для поставщика по умолчанию. Например, следующая команда предоставляет учетной записи NETWORK SERVICE доступ к контейнеру ключей RSA, используемому поставщиком по умолчанию RsaProtectedConfigurationProvider.

aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY\NETWORK SERVICE"

Контейнер ключей RSA NetFrameworkConfigurationKey является контейнером ключей по умолчанию для команд служебной программ Aspnet_regiis.exe. Следовательно, команды также могут направляться следующим образом:

aspnet_regiis -pa "NT AUTHORITY\NETWORK SERVICE"

Экспорт контейнера ключей RSA

Чтобы экспортировать контейнер ключей RSA в файл XML, можно использовать служебную программу Aspnet_regiis.exe с параметром –px. Можно использовать XML-файл в качестве резервной копии для контейнера ключей RSA либо импортировать контейнер ключей RSA на другой сервер. Чтобы дешифровать шифрованные данные, требуется область закрытого ключа контейнера ключей RSA. Чтобы использовать экспортированный контейнер ключей на другом сервере, необходимо импортировать также закрытый ключ. Можно включить закрытый ключ в XML-файл путем указания параметра –pri при экспорте ключа. Необходимо также указать, является ли экспортируемый контейнер ключей контейнером на уровне компьютера или на уровне пользователя. Для экспорта контейнера ключей на уровне пользователя необходимо выполнить вход с учетными данными пользователя, в профиле Windows которого хранится ключ. Чтобы указать ключ на уровне пользователя, следует включить параметр -pku при экспорте данных ключа шифрования; в противном случае экспортируемый ключ будет взять из хранилища ключей на компьютере. Дополнительные сведения о создании ключей шифрования на уровне компьютера и на уровне пользователя см. в разделе Основные сведения о контейнерах ключей RSA уровня компьютера и уровня пользователя.

Например, следующая команда экспортирует контейнер ключей RSA на уровне компьютера с именем SampleKeys в файл с именем keys.xml и включает при экспорте данные закрытого ключа.

aspnet_regiis -px "SampleKeys" keys.xml -pri
yxw286t2.alert_note(ru-ru,VS.90).gifПримечание.

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

Импорт контейнера ключей RSA

Для импорта контейнера ключей RSA из XML-файла можно использовать служебную программу Aspnet_regiis.exe с параметром –pi . Необходимо также указать, является ли импортируемый контейнер ключей контейнером на уровне компьютера или на уровне пользователя. Для импорта контейнера ключей на уровне пользователя необходимо выполнить вход с учетными данными пользователя, в профиле Windows которого будет храниться ключ. Чтобы указать ключ на уровне пользователя, следует включить параметр -pku при импорте данных ключа шифрования; в противном случае экспортируемый ключ будет взят из хранилища ключей в компьютере.

Например, следующая команда импортирует контейнер ключей RSA на уровне компьютера с именем SampleKeys из файла с именем keys.xml.

aspnet_regiis -pi "SampleKeys" keys.xml

Удостоверению приложения ASP.NET, которое будет использовать импортированный контейнер ключей RSA, должно быть предоставлено разрешение на чтение содержимого контейнера ключей RSA. Дополнительные сведения см. в разделе Предоставление разрешений на доступ к контейнеру ключей RSA данного пошагового руководства.

Удаление контейнера ключей RSA

Чтобы удалить контейнер ключей RSA, можно использовать служебную программу Aspnet_regiis.exeс параметром –pz. Прежде чем удалить контейнер ключей RSA, следует убедиться, что ключ был экспортирован в XML-файл, чтобы его можно было импортировать позднее, либо что шифрованные с помощью контейнера ключей RSA данные, которые впоследствии должны быть дешифрованы, отсутствуют.

При удалении контейнера ключей RSA следует указать имя контейнера ключей и определить контейнер как контейнер на уровне компьютера или контейнер на уровне пользователя. Для удаления контейнера ключей на уровне пользователя необходимо выполнить вход с учетными данными пользователя, в профиле Windows которого хранится ключ.

Например, следующая команда удаляет контейнер ключей RSA на уровне компьютера с именем SampleKeys.

aspnet_regiis -pz "SampleKeys"

См. также

Задачи

Пошаговое руководство. Создание и экспорт контейнера ключа RSA

Другие ресурсы

Шифрование сведений о конфигурации с помощью функции защищенной конфигурации