Partilhar via


Demonstra Passo a passo: Criptografando informações de configuração usando configuração protegida

Fornece um exemplo passo a passo para criptografar seções de um arquivo de configuração de um aplicativo ASP.NET.

Configuração protegida ajuda a melhorar a segurança de um aplicativo, permitindo que você criptografe informações sigilosas que é armazenada em um arquivo Web.config.Você pode usar Aspnet_regiis.exe para criptografar seções do arquivo web.config e gerenciar as chaves de criptografia.O ASP.NET descriptografa o arquivo de configuração quando ele processa o arquivo.Portanto, a descriptografia não exige qualquer código adicional.Para obter mais informações sobre configurações protegidas, consulte Criptografando informações de configuração usando configuração protegida.

Durante esta explicação passo a passo, você aprenderá a fazer o seguinte:

  • Criptografar seções de um arquivo Web.config usando o provedor padrão de Configuração Protegida.

  • Acesso a informações de configuração descriptografados em um página ASP.NET.

Pré-requisitos

Para concluir esta explicação passo a passo, será necessário o seguinte:

Concedendo Acesso de Leitura a uma Chave de Criptografia RSA

Antes do ASP.NET poder descriptografar informações criptografadas no arquivo web.config, a identidade do seu aplicativo ASP.NET deve ter acesso de leitura para o chave de criptografia que é usada para criptografar e descriptografar as seções criptografadas.Essa explicação passo a passo usa-se o provedor padrão RsaProtectedConfigurationProvider que é especificado no arquivo Machine.config e nomeado "RsaProtectedConfigurationProvider".O contêiner de chave RSA usado pelo provedor padrão RsaProtectedConfigurationProvider é denominado "NetFrameworkConfigurationKey".

Para conceder ao ASP.NET identidade de acesso de leitura para o contêiner de chave RSA padrão.

  1. Abra um editor de texto e copie o código a seguir para um novo arquivo.

    <%@ Page Language="VB" %>
    <%
    Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name)
    %>
    
    <%@ Page Language="C#" %>
    <%
    Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name);
    %>
    
  2. salvar o arquivo no seu diretório de aplicativo sistema autônomo identidade.aspx.

  3. Para determinar a identidade do seu aplicativo ASP.NET, abra Identity.aspx em um navegador.

    A identidade representada de seu aplicativo ASP.NET é exibida no navegador.

    Observação:

    Porque você está usando o IIS para essa explicação passo a passo, não use a representação para a autenticação para o seu site.Ou seja, para essa explicação passo a passo, use somente a autenticação anônima como a identidade do seu aplicativo ASP.NET.Se a identidade do aplicativo é a ID de usuário que você está atualmente logado, como DOMAIN\ myuserid, no arquivo web.config para o aplicativo, desative a representação.Para desativar a representação no arquivo web.config, abra o arquivo web.config e, em seguida, remova o elemento <identity>.Após você remover o elemento <identity>, atualize Identity.aspx no seu navegador para exibir a identidade modificada para o aplicativo.

  4. No prompt de comando, execute a ferramenta Aspnet_regiis.exe com as seguintes opções:

    • A opção -pa, seguida do nome de contêiner de chave RSA para o padrão RsaProtectedConfigurationProvider.

    • A identidade de seu aplicativo ASP.NET, conforme determinado na etapa anterior.

    Por exemplo, o comando a seguir concede a conta Serviço de rede para o Machine-Level acesso ao nível da máquina ao contêiner "NetFrameworkConfigurationKey" de chave RSA.

    Observação:

    Em um computador que está executando o Microsoft Windows Server 2003 com a representação para um aplicativo ASP.NET desativadano arquivo web.config, a identidade para o aplicativo é a identidade do pool de aplicativos.Por padrão, esta é a conta Serviço de Rede (nas versões anteriores do Windows, a identidade é a conta ASPNET local).

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

    Não feche a janela do prompt de comando.

Criptografando Seções do Arquivo Web.config

Agora que a identidade do seu aplicativo ASP.NET tem acesso de leitura ao contêiner de chave RSA para o objeto padrão RsaProtectedConfigurationProvider, você criptografará seções do arquivo web.config de seu aplicativo ASP.NET usando esse contêiner de chave.Em seguida, o ASP.NET descriptografa as seções quando ele processa o arquivo web.config.

Para criptografar as seções <connectionStrings> e <machineKey> do arquivo web.config.

  1. Em um editor de texto, abra o arquivo web.config para seu aplicativo.

    • Se você não tiver um arquivo Web.config para seu aplicativo ASP.NET, abra um editor de texto, copie a configuração de exemplo em um novo arquivo e, em seguida, salvar o arquivo no seu diretório de aplicativo ASP.NET sistema autônomo web.config.
  2. Certifique-se de que que há um elemento filho <connectionStrings> e um elemento filho <machineKey> para o elemento <system.web>, conforme mostrado no exemplo o seguir.

    <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. Feche o arquivo web.config.

  4. Na prompt de comando, altere o diretório para o diretório do .NET Framework versão 2.0, digitando o seguinte comando:

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

  5. No prompt de comando, execute a ferramenta Aspnet_regiis.exe com as seguintes opções:

    • A opção -pe e a sequência de caracteres "connectionStrings" para criptografar o elemento connectionStrings do arquivo web.config para seu aplicativo.

    • A opção -app e o nome do seu aplicativo.

    Por exemplo, o comando a seguir criptografa a seção <connectionStrings> do arquivo web.config para um aplicativo chamado MyApplication.

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

  6. Repita a etapa anterior para o elemento filo <machineKey> do elemento <system.web>,conforme mostrado no exemplo a seguir:

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

    Não feche a janela do prompt de comando.

  7. Abra web.config e então visualize o conteúdo criptografado.

    O conteúdo será semelhante ao seguinte exemplo arquivo 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. Feche o arquivo web.config.

Acessando Definições de Configurações Encriptadas

O ASP.NET automaticamente descriptografa o conteúdo do arquivo web.config quando ele processa o arquivo.Portanto, não há etapas adicionais necessárias para descriptografar as configurações criptografado para uso por outros recursos do ASP.NET ou para acessar os valores no seu código.No entanto, você pode seguir essas etapas, se você deseja exibir as configurações descriptografadas.

Para exibir os valores de configuração descriptografado

  1. Abra um editor de texto e copie o código a seguir para um novo arquivo.

    <%@ Page Language="VB" %>
    <%@ Import Namespace="System.Configuration" %>
    <%@ Import Namespace="System.Web.Configuration" %>
    <script >
    
    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 >
    
      <asp:GridView  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 >
    
    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 >
    
      <asp:GridView  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. salvar o arquivo sistema autônomo walkthrough.aspx e, em seguida, exiba o arquivo no navegador.

    Você verá os valores descriptografados do arquivo web.config criptografado.

  3. Para manter o informações sigilosas a separadas do site particular, exclua o arquivo Walkthrough.aspx quando tiver terminado com essa explicação passo a passo.

Próximas etapas

Você pode descriptografar o conteúdo do arquivo web.config criptografado, se você desejar, usando Aspnet_regiis.exe com a opção -pd.A sintaxe é a mesma da criptografia do conteúdo do arquivo Web.config com a opção -pe exceto que você não especifica um provedor de Configuração Protegida.O provedor apropriado é identificado usando o elemento configProtectionProvider para a seção protected.Por exemplo, os seguintes comandos descriptografam o elemento <connectionStrings> e o elemento filho <machineKey> do elemento <system.web> no arquivo web.config para o aplicativo ASP.NET chamado MyApplication.

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

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

Consulte também

Tarefas

Demonstra Passo a passo: Criando e exportando um contêiner de chave RSA

Outros recursos

Criptografando informações de configuração usando configuração protegida