Пошаговое руководство. Шифрование информации конфигурации с помощью функции защищенной конфигурации
Обновлен: Ноябрь 2007
Предоставляет пошаговые инструкции для шифрования разделов файла конфигурации для приложения ASP.NET.
Функция защищенной конфигурации помогает улучшить безопасность приложения путем шифрования конфиденциальной информации, хранящейся в файле Web.config. Для шифрования разделов файла Web.config и управления ключами шифрования можно использовать программу aspnet_regiis.exe. ASP.NET расшифровывает файл конфигурации при его обработке. Таким образом, расшифровка не требует дополнительного кода. Дополнительные сведения о функции защищенной конфигурации см. в разделе Шифрование сведений о конфигурации с помощью функции защищенной конфигурации.
В данном пошаговом руководстве рассматривается выполнение следующих действий.
Шифрование разделов файла Web.config с помощью поставщика защищенной конфигурации по умолчанию.
Доступ к расшифрованной информации на странице ASP.NET.
Обязательные компоненты
Для выполнения инструкций данного пошагового руководства необходимы следующие компоненты.
Службы Microsoft IIS, установленные и настроенные на компьютере, который будет узлом для сайта.
Подробные сведения об установке и настройке IIS содержатся в справке IIS, включенной в состав установки, или в электронной документации IIS Internet Information Services 6.0 Technical Resources.
Веб-узел ASP.NET.
Если веб-узел уже существует, его можно использовать. В противном случае дополнительные сведения о способах создания виртуального каталога или веб-узла см. в разделе Практическое руководство. Создание и настройка виртуальных каталогов в IIS 5.0 и 6.0.
Предоставление доступа на чтение к ключу шифрования RSA
Перед тем как ASP.NET расшифрует зашифрованную информацию в файле Web.config, идентификация приложения ASP.NET должна иметь доступ к считыванию зашифрованного ключа, используемого для зашифровки и расшифровки данных конфигурации. В данном руководстве используется поставщик по умолчанию RsaProtectedConfigurationProvider, предоставленный в файле Machine.config file и имеющий имя "RsaProtectedConfigurationProvider". Используемый поставщиком по умолчанию RsaProtectedConfigurationProvider контейнер ключа RSA называется "NetFrameworkConfigurationKey".
Чтобы предоставить идентификации ASP.NET доступ на чтение к контейнеру ключа RSA по умолчанию
Откройте текстовый редактор и скопируйте следующий код в новый файл.
<%@ Page Language="VB" %> <% Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name) %>
<%@ Page Language="C#" %> <% Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name); %>
Сохраните этот файл в каталоге приложения как identity.aspx.
Чтобы определить идентификацию приложения ASP.NET, откройте файл identity.aspx в обозревателе.
Олицетворенная идентификация приложения ASP.NET выводится в обозревателе.
Примечание. Так как для данного пошагового руководства используется IIS, не следует использовать олицетворение для проверки подлинности на узле. Для данного руководства необходимо использовать только анонимную проверку подлинности в качестве идентификации приложения ASP.NET. Если идентификацией приложения является идентификатор пользователя, под учетной записью которого выполнен вход в систему, например DOMAIN\myuserid, то в файле Web.config следует отключить олицетворение. Чтобы отключить олицетворение в файле Web.config, откройте файл Web.config и удалите элемент <identity>. После удаления элемента <identity> обновите файл identity.aspx в обозревателе для отображения измененной идентификации приложения.
В командной строке выполните файл aspnet_regiis.exe со следующими параметрами:
Параметр -pa, за которым следует имя контейнера ключа RSA для поставщика по умолчанию RsaProtectedConfigurationProvider.
Идентификация приложения ASP.Net, как указано на предыдущем этапе.
Например, следующая команда предоставляет учетной записи NETWORK SERVICE доступ к контейнеру ключа RSA "NetFrameworkConfigurationKey" на уровне компьютера.
Примечание. На компьютере под управлением Windows Server 2003 с олицетворением для приложения ASP.NET, отключенного в файле Web.config, идентификацией приложения является идентификация пула приложений. По умолчанию ею является учетная запись NETWORK SERVICE (в более ранних версиях Windows идентификацией являлась учетная запись ASPNET).
aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY\NETWORK SERVICE"
Не закрывайте окно командной строки.
Шифрование разделов файла Web.config
После того как идентификация приложения ASP.NET получила доступ на чтение к контейнеру ключа RSA для объекта по умолчанию RsaProtectedConfigurationProvider, разделы файла Web.config приложения ASP.NET можно зашифровать с помощью этого контейнера. Затем ASP.NET расшифровывает разделы при обработке файла Web.config.
Чтобы зашифровать разделы файла Web.config <connectionStrings> и <machineKey>
Откройте файл Web.config для приложения в текстовом редакторе.
- Если файл Web.config для приложения ASP.NET не существует, откройте текстовый редактор, скопируйте пример конфигурации в новый файл и сохраните его в каталоге приложения ASP.NET под именем web.config.
Убедитесь в том, что дочерние элементы <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>
Закройте файл Web.config.
В командной строке измените каталог на каталог платформы .NET Framework версии 2.0, введя следующую команду:
cd \WINDOWS\Microsoft.Net\Framework\v2.0.*
В командной строке выполните файл aspnet_regiis.exe со следующими параметрами:
Параметр -pe и строка "connectionStrings" для шифрования элемента connectionStrings файла приложения Web.config.
Параметр -app и имя приложения.
Например, следующая команда шифрует раздел <connectionStrings> файла Web.config для приложения под именем MyApplication.
aspnet_regiis -pe "connectionStrings" -app "/MyApplication"
Повторите предыдущий шаг для дочернего элемента <machineKey> элемента <system.web>, как показано в следующем примере:
aspnet_regiis -pe "system.web/machineKey" -app "/MyApplication"
Не закрывайте окно командной строки.
Откройте файл 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>
Закройте файл Web.config file.
Доступ к расшифрованным параметрам конфигурации
ASP.автоматически NET расшифровывает содержимое файла Web.config при его обработке. Таким образом, пользователю не требуется предпринимать дополнительных действий для расшифровки зашифрованных параметров конфигурации, их использования в функциях ASP.NET или доступа к ним в коде. Однако если требуется просмотреть расшифрованные параметры, следует выполнить указанные ниже действия.
Чтобы просмотреть расшифрованные параметры конфигурации
Откройте текстовый редактор и скопируйте следующий код 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>
Сохраните файл под именем walkthrough.aspx, и затем просмотрите его в обозревателе.
На странице отобразятся расшифрованные значения из зашифрованного файла Web.config.
Чтобы защитить конфиденциальную информацию веб-узла, удалите файл 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"
См. также
Задачи
Пошаговое руководство. Создание и экспорт контейнера ключа RSA
Другие ресурсы
Шифрование сведений о конфигурации с помощью функции защищенной конфигурации