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

Visual Studio 2010

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

Предоставляет пошаговые инструкции для шифрования разделов файла конфигурации для приложения ASP.NET.

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

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

  • Шифрование разделов файла Web.config с помощью поставщика защищенной конфигурации по умолчанию.

  • Доступ к расшифрованной информации на странице ASP.NET.

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

Перед тем как ASP.NET расшифрует зашифрованную информацию в файле Web.config, идентификация приложения ASP.NET должна иметь доступ к считыванию зашифрованного ключа, используемого для зашифровки и расшифровки данных конфигурации. В данном руководстве используется поставщик по умолчанию RsaProtectedConfigurationProvider, предоставленный в файле Machine.config file и имеющий имя "RsaProtectedConfigurationProvider". Используемый поставщиком по умолчанию RsaProtectedConfigurationProvider контейнер ключа RSA называется "NetFrameworkConfigurationKey".

Чтобы предоставить идентификации 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 выводится в обозревателе.

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

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

  4. В командной строке выполните файл aspnet_regiis.exe со следующими параметрами:

    • Параметр -pa, за которым следует имя контейнера ключа RSA для поставщика по умолчанию RsaProtectedConfigurationProvider.

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

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

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

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

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

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

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

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

  1. Откройте файл Web.config для приложения в текстовом редакторе.

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

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

    <configuration>
       <connectionStrings>
          <add name="SqlServices" connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;" />
       </connectionStrings>
    
       <system.web>
    
         <machineKey validationKey="D61B3C89CB33A2F1422FF158AFF7320E8DB8CB5CDA1742572A487D94018787EF42682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE"
           decryptionKey="FBF50941F22D6A3B229EA593F24C41203DA6837F1122EF17" />
    
       </system.web>
    </configuration>
    
  3. Закройте файл Web.config.

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

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

  5. В командной строке выполните файл aspnet_regiis.exe со следующими параметрами:

    • Параметр -pe и строка "connectionStrings" для шифрования элемента connectionStrings файла приложения Web.config.

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

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

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

  6. Повторите предыдущий шаг для дочернего элемента <machineKey> элемента <system.web>, как показано в следующем примере:

    aspnet_regiis -pe "system.web/machineKey" -app "/MyApplication"

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

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

    Содержимое будет выглядеть как в следующем примере файла Web.config.

    <configuration>
    
       <connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">
          <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>
    
       <system.web>
         <machineKey configProtectionProvider="RsaProtectedConfigurationProvider">
           <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>IwUopItbWX0mJdGWtAqE1LlsG3u5RBRlAXs9/GZj3HEfeUXduHVF76q6Ip88YqlfLthH+DMBYdOZAF+hCOmS2agfTo1tKUvELRGIljS/BqEYxUO+/IOz9tllAw8ZlGF7AVCzptgIejI+iLXEZfMKW7f6EMGeb5vaaKXHIkYZwcM=
                   </CipherValue>
                 </CipherData>
               </EncryptedKey>
             </KeyInfo>
             <CipherData>
               <CipherValue>ivVyERVPNUzIb/i7/NUbRkxsxh8IG959vycwrzJO0vYWxHZ5i03SfrLbsGUV17+FxZ6lbcrVaF5FY3zVm7dRMRvQpVFwaVcL
               </CipherValue>
             </CipherData>
           </EncryptedData>
         </machineKey>
    
       </system.web>
    </configuration>
    
  8. Закройте файл Web.config file.

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

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

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

    <%@ Page Language="VB" %>
    <%@ Import Namespace="System.Configuration" %>
    <%@ Import Namespace="System.Web.Configuration" %>
    <script runat="server">
    
    Public Sub Page_Load()
    
      ConnectionStringsGrid.DataSource = ConfigurationManager.ConnectionStrings
      ConnectionStringsGrid.DataBind()
    
      Dim config As System.Configuration.Configuration = _
        WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath)
      Dim key As MachineKeySection = _
        CType(config.GetSection("system.web/machineKey"), MachineKeySection)
      DecryptionKey.Text = key.DecryptionKey
      ValidationKey.Text = key.ValidationKey
    
    End Sub
    
    </script>
    <html>
    
    <body>
    
    <form runat="server">
    
      <asp:GridView runat="server" CellPadding="4" id="ConnectionStringsGrid" />
      <P>
      MachineKey.DecryptionKey = <asp:Label runat="Server" id="DecryptionKey" /><BR>
      MachineKey.ValidationKey = <asp:Label runat="Server" id="ValidationKey" />
    
    </form>
    
    </body>
    </html>
    

    <%@ Page Language="C#" %>
    <%@ Import Namespace="System.Configuration" %>
    <%@ Import Namespace="System.Web.Configuration" %>
    <script runat="server">
    
    public void Page_Load()
    {
      ConnectionStringsGrid.DataSource = ConfigurationManager.ConnectionStrings;
      ConnectionStringsGrid.DataBind();
    
      Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
      MachineKeySection key = 
        (MachineKeySection)config.GetSection("system.web/machineKey");
      DecryptionKey.Text = key.DecryptionKey;
      ValidationKey.Text = key.ValidationKey;
    }
    
    </script>
    <html>
    
    <body>
    
    <form runat="server">
    
      <asp:GridView runat="server" CellPadding="4" id="ConnectionStringsGrid" />
      <P>
      MachineKey.DecryptionKey = <asp:Label runat="Server" id="DecryptionKey" /><BR>
      MachineKey.ValidationKey = <asp:Label runat="Server" id="ValidationKey" />
    
    </form>
    
    </body>
    </html>
    
  2. Сохраните файл под именем walkthrough.aspx, и затем просмотрите его в обозревателе.

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

  3. Чтобы защитить конфиденциальную информацию веб-узла, удалите файл walkthrough.aspx после завершения выполнения шагов данного пошагового руководства.

Зашифрованное содержимое файла Web.config можно при необходимости расшифровать, запустив программу aspnet_regiis.exe с параметром -pd. Синтаксис команды совпадает с синтаксисом шифрования содержимого файла Web.config при использовании параметра -pe. Отличие состоит в том, что поставщик защищенной конфигурации не указывается. Соответствующий поставщик определяется при помощи элемента configProtectionProvider для раздела protected. Например, следующие команды расшифровывают элемент <connectionStrings> и дочерний элемент <machineKey> элемента <system.web> в файле Web.config для приложения ASP.NET с именем MyApplication.

aspnet_regiis -pd "connectionStrings" -app "/MyApplication"

aspnet_regiis -pd "system.web/machineKey" -app "/MyApplication"

Показ: