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

Visual Studio 2010

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

Предоставляет пошаговый пример для создания, экспортирования и импортирования ключа шифрования для расшифровки закодированных подразделов Web.config из одного зашифрованного файла на нескольких серверах.

Protected Configuration помогает улучшить безопасность приложения, разрешая шифрование конфиденциальной информации, которая хранится в конфигурационном файле. Платформа .NET Framework автоматически дешифрует конфигурационный файл при его выполнении и дешифровка не требует никакого дополнительного кода. Можно использовать aspnet_regiis.exe для шифровки разделов конфигурационного файла и управления ключами шифрования. Дополнительные сведения о функции защищенной конфигурации см. в разделе Шифрование сведений о конфигурации с помощью функции защищенной конфигурации.

Protected Configuration позволяет создавать, удалять, экспортировать и импортировать пользовательские ключи шифрования для использования с поставщиком RsaProtectedConfigurationProvider. Это позволяет создавать архивные копии ключей шифрования или копировать ключ шифрования для нескольких веб-серверов, таких как веб-ферма, так что приложение, имеющее зашифрованный файл Web.config, может быть скопировано в несколько мест.

Здесь вы узнаете, как выполняются следующие действия:

  • Создание пользовательского контейнера ключа RSA.

  • Указывает поставщика Protected Configuration, который использует определенный контейнер ключа RSA.

  • Зашифровывает разделы файла Web.config при помощи определенного контейнера ключа RSA.

  • Экспортирование пользовательского контейнера ключа RSA в XML-файл.

  • Импортирование пользовательского контейнера ключа RSA из XML-файла.

Для выполнения инструкций данного пошагового руководства необходимы следующие компоненты.

В данной части пошагового руководства будет создан контейнер ключа RSA при помощи использования aspnet_regiis.exe с параметром -pc. Это указывает на контейнер ключа RSA как на контейнер ключа уровня пользователя. Контейнеры ключа RSA должны указываться либо как контейнеры пользовательского уровня (при помощи параметра -pku), либо как контейнеры машинного уровня (при отсутствии параметра -pku). Дополнительные сведения о контейнерах ключей RSA машинного и пользовательского уровней, см. в разделе Основные сведения о контейнерах ключей RSA уровня компьютера и уровня пользователя.

Создание контейнера ключа RSA машинного уровня

  1. Откройте окно командной строки.

    • Чтобы это сделать, в Microsoft Windows, нажмите Пуск, нажмите Запуск, в диалоговом окне Открыть, напечатайте cmd, и затем нажмите ОК.

  2. В командной строке введите следующую команду, чтобы изменить директорию на директорию платформы .NET Framework версии 2.0:

    cd \WINDOWS\Microsoft.Net\Framework\v2.0.*

  3. Создайте новый, машинного уровня контейнер ключа RSA, запустив aspnet_regiis.exe со следующими параметрами:

    • За параметром -pc следует имя контейнера ключа RSA, чтобы создать пару ключей RSA.

    • Параметр -exp, чтобы убедиться, что ключ можно экспортировать.

    Следующая команда будет создавать контейнер ключа "MyKeys".

    aspnet_regiis -pc "MyKeys" -exp

    Не закрывайте окно командной строки.

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

Предоставление идентификации ASP.NET доступ к контейнеру RSA ключей.

  1. Откройте текстовый редактор и скопируйте следующий код в новый файл.

    <%@ Page Language="VB" %>
    <%
    Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name)
    %>
    

    <%@ Page Language="C#" %>
    <%
    Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name);
    %>
    
  2. Сохраните этот файл в каталоге приложения как identity.aspx.

  3. Чтобы определить идентификацию приложения ASP.NET, откройте файл identity.aspx в обозревателе.

    В обозревателе возникает олицетворенная идентификация приложения ASP.NET.

    2w117ede.alert_note(ru-ru,VS.100).gifПримечание.

    Для данного пошагового руководства, не используйте олицетворенную проверку подлинности для вашего сайта. Т. е. используйте только анонимную проверку подлинности как идентификацию вашего приложения ASP.NET. Для данного пошагового руководства, если идентификация вашего приложения является идентификатором пользователя, который в настоящее время выполнил вход в систему как, например, DOMAIN\userid, в файле Web.config для приложения отключите олицетворение. Чтобы отключить олицетворение, отредактируйте файл Web.config и удалите элемент <identity>. После этих изменений, обновите identity.aspx в вашем обозревателе, чтобы отобразить измененную идентификацию для приложения.

  4. В командной строке используйте следующие параметры, чтобы разрешить идентификации доступ к контейнеру ключа RSA, запустив aspnet_regiis.exe:

    • За параметром -pa следует имя контейнера ключа RSA "MyKeys".

    • Идентификация приложения ASP.NET, как указано на предыдущем этапе.

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

    2w117ede.alert_note(ru-ru,VS.100).gifПримечание.

    На компьютере, на котором запущен Windows Server 2003, в котором олицетворение для приложения ASP.NET отключено в файле Web.config, идентификация для приложения находится в учетной записи NETWORK SERVICE (для более ранних версий Windows это локальная учетная запись ASPNET).

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

В этой части пошагового руководства, нужно указать экземпляр поставщика Protected Configuration в файле Web.config для приложения ASP.NET. Экземпляр поставщика Protected Configuration, который использует контейнер ключа RSA машинного уровня с именем "MyKeys" является экземпляром, созданным в предыдущей процедуре.

Чтобы указать экземпляр поставщика Protected Configuration

  1. Откройте текстовый редактор, и затем откройте файл Web.config для вашего приложения ASP.NET.

    • Если не существует файла Web.config для вашего приложения ASP.NET, откройте текстовый редактор и скопируйте пример конфигурации в новый файл. Сохраните этот файл в каталоге приложения ASP.NET как web.config.

  2. Убедитесь, что конфигурация включает элемент <connectionStrings>, как показано в следующем примере.

    <configuration>
       <connectionStrings>
          <add name="SqlServices" connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;" />
       </connectionStrings>
    </configuration>
    
  3. Добавьте раздел <configProtectedData>, включающий экземпляр класса RsaProtectedConfigurationProvider с именем "MyProvider", который использует контейнер ключа RSA машинного уровня с именем "MyKeys",, как показано в следующем примере.

    <configuration>
       <configProtectedData>
          <providers>
             <add name="MyProvider"
                  type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0. 0.0,
                        Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a,
                        processorArchitecture=MSIL"
                  keyContainerName="MyKeys" 
                  useMachineContainer="true" />
          </providers>
       </configProtectedData>
    
       <connectionStrings>
          <add name="SqlServices" connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;" />
       </connectionStrings>
    </configuration>
    
  4. Сохраните и закройте файл Web.config.

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

Чтобы дешифровать раздел <connectionStrings> в файле Web.config

  1. Из командной строки запустите aspnet_regiis.exe со следующими параметрами:

    • Параметр -pe, за которым следует "connectionStrings", чтоб зашифровать элемент <connectionStrings> в файле Web.config приложения.

    • Параметр -app для идентификации имени приложения.

    • Параметр -prov, за которым следует "MyProvider", чтоб идентифицировать поставщик RsaProtectedConfigurationProvider, который был указан в файле Web.config в предыдущем разделе.

    Например, следующая команда шифрует раздел <connectionStrings> файла Web.config для приложения под именем MyApplication.

    aspnet_regiis -pe "connectionStrings" -app "/MyApplication" -prov "MyProvider"

  2. Откройте файл Web.config, и затем просмотрите зашифрованное содержимое.

    Содержимое будет похожим на следующий пример файла Web.config.

    <configuration>
       <configProtectedData>
          <providers>
             <add name="MyProvider"
                  type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0. 0.0,
                        Culture=neutral, PublicKeyToken= b03f5f7f11d50a3a,
                        processorArchitecture=MSIL"
                  keyContainerName="MyKeys" 
                  useMachineContainer="true" />
          </providers>
       </configProtectedData>
    
       <connectionStrings configProtectionProvider="MyProvider">
          <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
             xmlns="http://www.w3.org/2001/04/xmlenc#">
             <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
             <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
                <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
                   <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
                   <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
                      <KeyName>RSA Key
                      </KeyName>
                   </KeyInfo>
                   <CipherData>
                      <CipherValue>WcFEbDX8VyLfAsVK8g6hZVAG1674ZFc1kWH0BoazgOwdBfinhcAmQmnIn0oHtZ5tO2EXGl+dyh10giEmO9NemH4YZk+iMIln+ItcEay9CGWMXSen9UQLpcQHQqMJErZiPK4qPZaRWwqckLqriCl9X8x9OE7jKIsO2Ibapwj+1Jo=
                      </CipherValue>
                   </CipherData>
                </EncryptedKey>
             </KeyInfo>
             <CipherData>
                <CipherValue>OpWQgQbq2wBZEGYAeV8WF82yz6q5WNFIj3rcuQ8gT0MP97aO9SHIZWwNggSEi2Ywi4oMaHX9p0NaJXG76aoMR9L/WasAxEwzQz3fexFgFSrGPful/5txSPTAGcqUb1PEBVlB9CA71UXIGVCPTiwF7zYDu8sSHhWa0fNXqVHHdLQYy1DfhXS3cO61vW5e/KYmKOGA4mjqT0VZaXgb9tVeGBDhjPh5ZlrLMNfYSozeJ+m2Lsm7hnF6VvFm3fFMXa6+h0JTHeCXBdmzg/vQb0u3oejSGzB4ly+V9O0T4Yxkwn9KVDW58PHOeRT2//3iZfJfWV2NZ4e6vj4Byjf81o3JVNgRjmm9hr9blVbbT3Q8/j5zJ+TElCn6zPHvnuB70iG2KPJXqAj2GBzBk6cHq+WNebOQNWIb7dTPumuZK0yW1XDZ5gkfBuqgn8hmosTE7mCvieP9rgATf6qgLgdA6zYyVV6WDjo1qbCV807lczxa3bF5KzKaVUSq5FS1SpdZKAE6/kkr0Ps++CE=
                </CipherValue>
             </CipherData>
          </EncryptedData>
       </connectionStrings>
    </configuration>
    
  3. Закройте файл Web.config.

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

Чтобы просмотреть расшифрованные параметры конфигурации

  1. Откройте текстовый редактор и скопируйте следующий код ASP.NET в новый файл.

    <%@ Page Language="VB" %>
    <%@ Import Namespace="System.Configuration" %>
    <script runat="server">
    
    Public Sub Page_Load()
    
      ConnectionStringsGrid.DataSource = ConfigurationManager.ConnectionStrings
      ConnectionStringsGrid.DataBind()
    End Sub
    
    </script>
    <html>
    
    <body>
    
    <form runat="server">
      <asp:GridView runat="server" CellPadding="4" id="ConnectionStringsGrid" />
    </form>
    
    </body>
    </html>
    

    <%@ Page Language="C#" %>
    <%@ Import Namespace="System.Configuration" %>
    <script runat="server">
    
    public void Page_Load()
    {
      ConnectionStringsGrid.DataSource = ConfigurationManager.ConnectionStrings;
      ConnectionStringsGrid.DataBind();
    }
    
    </script>
    <html>
    
    <body>
    
    <form runat="server">
      <asp:GridView runat="server" CellPadding="4" id="ConnectionStringsGrid" />
    </form>
    
    </body>
    </html>
    
  2. Сохраните файл как walkthrough.aspx, и затем просмотрите файл в обозревателе.

    На странице отобразятся расшифрованные значения из зашифрованного файла Web.config.

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

Чтобы просмотреть расшифрованные параметры конфигурации

  1. Из командной строки запустите aspnet_regiis.exe со следующими параметрами:

    • Параметр -px, за которым следует "MyKeys", который является именем контейнера ключа RSA, который был создан в «Создание пользовательского контейнера ключа RSA» ранее в этом пошаговом руководстве.

    • Путь xml-файла для экспорта контейнера ключа.

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

    Например, следующая команда экспортирует контейнер ключа RSA машинного уровня с именем "MyKeys" в xml-файл c именем keys.xml в корневой каталог на диске С.

    aspnet_regiis -px "MyKeys" "c:\keys.xml" -pri

    2w117ede.alert_note(ru-ru,VS.100).gifПримечание.

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

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

  2. Если необходимо скопировать приложение при помощи зашифрованного файла Web.config на отдельный веб-сервер, перейдите к шагу 4.

  3. Если в наличии нет второго веб-сервера для копирования на него веб-приложения и Вы хотите продолжать следовать этому пошаговому руководству, выполните следующие шаги для удаления контейнера ключа RSA с веб-сервера. Затем обработайте веб-сервер так, как если бы это был второй веб-сервер.

    1. Чтобы удалить контейнер ключа RSA, из командной строки запустите aspnet_regiis.exe с оператором -pz, за которым следует "MyKeys".

      Например, в следующей команде удалите "MyKeys":

      aspnet_regiis -pz "MyKeys"

    2. Перейдите к шагу 5.

  4. Скопируйте веб-приложение, включая зашифрованный файл Web.config, на второй веб-сервер.

  5. На втором сервере, откройте окно командной строки и затем введите следующую команду, чтобы изменить директорию на директорию платформы .NET Framework версии 2.0:

    cd \WINDOWS\Microsoft.Net\Framework\v2.0.*

  6. Скопируйте xml-файл, который содержит экспортируемый контейнер ключа RSA в каталог платформы .NET Framework версии 2.0 на второй веб-сервер.

    В этом руководстве мы скопируем файл keys.xml в корневой каталог на диске С.

  7. На втором веб-сервере, из командной строки запустите aspnet_regiis.exe со следующими параметрами:

    • За параметром -pi следует "MyKeys", который является именем экспортируемого контейнера ключа, чтобы импортировать контейнер ключа RSA.

    • Путь xml-файла, который содержит экспортируемый контейнер ключа

    Например, следующая команда импортирует контейнер ключа RSA c именем "MyKeys".

    aspnet_regiis -pi "MyKeys" "c:\keys.xml"

  8. На втором веб-сервере удалите копию xml-файла, который содержит экспортируемый контейнер ключа.

  9. На втором веб-сервере определите идентификацию приложения ASP.NET и затем предоставьте этой идентификации доступ к импортируемому контейнеру ключа RSA при помощи следующих шагов в «Предоставление доступа на чтение зашифрованного ключа RSA», ранее описанных в этом пошаговом руководстве.

  10. На втором веб-сервере, рассмотрите дешифрованные параметры конфигурации из файла Web.config при помощи следующих шагов в предыдущем разделе.

Показ: