Importando e exportando containers protegidos de configuração de chaves RSA

Configuração protegida fornece a capacidade para criar, excluir, exportar e importar recipientes de chaves RSA ao usar o RsaProtectedConfigurationProvider.Um cenário onde isso é útil é em um sítio Web onde o mesmo arquivo web.config criptografado será implantado em vários servidores.Nesse caso, o mesmo recipiente de chave RSA também deve ser implantado para esses servidores.Para fazer isso, você iria criar um recipiente de chave RSA para o aplicativo, exportá-lo para um arquivo XML, e importá-lo em cada servidor que precisa descriptografar o arquivo Web.config criptografado.

Criar recipientes de chaves RSA também pode ser útil em um único servidor Web que hospeda vários aplicativos ASP.NET.Criando um contêiner de chave RSA para cada aplicativo ou para cada conjunto de aplicativos para um único cliente, você pode melhorar a segurança das informações de configuração confidenciais do aplicativo, garantindo que o arquivo web.config para um aplicativo não pode ser decodificado usando o contêiner de chave RSA de outro aplicativo.

Criando um recipiente de chave RSA

To create an RSA key container, you use the ASP.NET IIS registration tool (Aspnet_regiis.exe) with the –pc switch.Você deve fornecer um nome de contêiner de chave, que identifica o contêiner de chave usado pelo RsaProtectedConfigurationProvider especificado na seção configProtectedData do arquivo web.config do aplicativo.Para garantir que o recipiente de chave RSA recém-criado possa ser exportado, você precisará incluir a opção -exp.

Por exemplo, o seguinte comando cria um recipiente de chave RSA chamado SampleKeys que é um recipiente de chave nível de máquina e é exportável.

aspnet_regiis -pc "SampleKeys"–exp

O exemplo a seguir mostra a seção configProtectedData de um arquivo Web.config.A seção especifica um RsaProtectedConfigurationProvider que usa um contêiner de chave RSA em nível de máquina chamado 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>
Observação:

Para se proteger contra exclusão acidental de chaves de criptografia e descriptografia para configuração de seções protegidas, recipientes de chave RSA não são excluídos se o .NET Framework é desinstalado.

Concedendo autoridade para acessar um recipiente de chave RSA

Por padrão, recipientes de chave RSA são fortemente protegidos por listas de controle de acesso (ACLs) NTFS no servidor onde eles estão instalados.Isso melhora a segurança das informações criptografadas ao restringir quem pode acessar a chave de criptografia.

Antes do ASP.NET usar um recipiente de chave RSA, a identidade do processo de seu aplicativo ASP.NET deve estar autorizada para ter acesso de leitura a recipiente de chave RSA.Para obter informações sobre configuração e determinação da identidade do seu aplicativo ASP.NET, consulte ASP.NET Impersonation.

Você pode usar a ferramenta Aspnet_regiis.exe com a opção -pa para dar permissão à identidade de seu aplicativo ASP.NET para ler um recipiente de chave RSA.Por exemplo, o comando a seguir concede acesso à conta de serviço Windows Server 2003 NETWORK SERVICE para ler o recipiente de chave RSA a nível de máquina denominado SampleKeys:

aspnet_regiis -pa "SampleKeys" "NT AUTHORITY\NETWORK SERVICE"
Observação:

Se o recipiente de chave RSA é um recipiente de nível de usuário, você deve ter efetuado logon como o usuário em cujo perfil Windows a chave é armazenada, e deve incluir a opção -pku para conceder acesso ao recipiente de chave RSA em nível de usuário.Para obter mais informações, consulte Entendendo recipientes de chaves RSA em nível de usuário e em nível de máquina.

Para usar o padrão RsaProtectedConfigurationProvider especificado na configuração do computador, você precisa primeiro conceder a identidade de acesso ao aplicativo do Windows para o contêiner de chave do computador chamado NetFrameworkConfigurationKey, que é o contêiner de chave especificado para o provedor padrão.Por exemplo, o comando a seguir concede acesso à conta NETWORK SERVICE para o recipiente de chave RSA utilizado pelo padrão RsaProtectedConfigurationProvider:

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

O contêiner de chave RSA NetFrameworkConfigurationKey o contêiner padrão de chave para comandos emitidos pela ferramenta Aspnet_regiis.exe.O comando anterior poderia, além disso, também ser implementado como o seguinte:

aspnet_regiis -pa "NT AUTHORITY\NETWORK SERVICE"

Exportando um recipiente de chave RSA

To export an RSA key container to an XML file, you can use the Aspnet_regiis.exe tool with the –px switch.Você pode usar o arquivo XML como backup para o recipiente de chave RSA ou para importar o recipiente de chave RSA em um servidor diferente.A parte da chave particular do recipiente de chave RSA é necessária para descriptografar informações criptografadas.Para fazer uso de seu recipiente de chave exportado em outro servidor, será necessário importar a chave particular também.You can include the private key in your XML file by specifying the –pri option when exporting the key.Você também deve especificar se o recipiente de chave exportado é a nível de máquina ou nível de usuário.Para exportar um recipiente de chave a nível de usuário, você deve ter efetuado logon como o usuário em cujo perfil Windows a chave é armazenada.Para especificar uma chave em nível de usuário, inclua a opção -pku ao exportar as informações de chave de criptografia; caso contrário, a chave exportada será da chave de máquina armazenada.Para obter mais informações sobre chaves de criptografia em nível da máquina e em nível de usuário, consulte Entendendo recipientes de chaves RSA em nível de usuário e em nível de máquina.

Por exemplo, o comando a seguir exporta o recipiente de chave RSA em nível de máquina nomeado SampleKeys com o arquivo chamado keys.xml e inclui as informações da chave particular.

aspnet_regiis -px "SampleKeys" keys.xml -pri
Observação:

Para segurança, após exportar um recipiente de chave RSA para um arquivo XML, copie o arquivo XML para uma localidade externa ao servidor e exclua o arquivo XML do servidor.Isso reduz a possibilidade de um invasor ter acesso ao recipiente de chave RSA e assim a capacidade de descriptografar arquivos Web.config criptografados usando esse recipiente de chave RSA.

Importando um recipiente de chave RSA

You can use the Aspnet_regiis.exe tool with the –pi switch to import an RSA key container from an XML file.Você também deve especificar se o recipiente de chave importado é nível de máquina ou nível de usuário.Para importar um recipiente de chave de nível de usuário, você deve ter efetuado logon como o usuário em cujo perfil Windows a chave está armazenada.Para especificar uma chave em nível de usuário, inclua a opção -pku quando importar as informações de chave de criptografia; caso contrário, a chave exportada será importada para o armazenamento de chave de máquina.

Por exemplo, o comando a seguir importa uma recipiente de chave RSA em nível de máquina chamado SampleKeys do arquivo chamado keys.xml:

aspnet_regiis -pi "SampleKeys" keys.xml

A identidade do aplicativo ASP.NET que utilizará o recipiente de chave RSA importado deve receber autoridade para ler o conteúdo do recipiente de chave RSA.Para obter mais informações, consulte Conceder autoridade para acessar um recipiente de chave RSA anteriormente neste tópico.

Excluir um recipiente de chave RSA

To delete an RSA key container, you can use the Aspnet_regiis.exe tool with the –pz switch.Antes de excluir um recipiente de chave RSA, certifique-se de que ou você exportou a chave para um arquivo XML para que ele possa ser importado posteriormente, ou que não existem informações criptografadas com o recipiente de chave RSA que nunca precisarão serem descriptografadas.

Ao excluir um recipiente de chave RSA, você deve especificar o nome do recipiente de chave e identificar o recipiente como nível de máquina ou nível de usuário.Para excluir um recipiente de chave de nível de usuário, você deve ter efetuado logon como o usuário em cujo perfil Windows a chave é armazenada.

Por exemplo, o comando a seguir exclui o recipiente de chave RSA em nível de máquina chamado SampleKeys.

aspnet_regiis -pz "SampleKeys"

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