Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Por Rick Anderson
Gestão de chaves
O aplicativo tenta detetar seu ambiente operacional e lidar com a configuração de chave por conta própria.
Se o aplicativo estiver hospedado em Aplicativos do Azure, as chaves serão mantidas na pasta \ASP.NET\DataProtection-Keys do%HOME% . Esta pasta é apoiada pelo armazenamento de rede e é sincronizada em todas as máquinas que hospedam o aplicativo.
- As chaves não estão protegidas em estado de repouso.
- A pasta DataProtection-Keys fornece o conjunto de chaves para todas as instâncias de um aplicativo em um único slot de implantação.
- Slots de implantação separados, como Preparo e Produção, não compartilham um porta-chaves. Quando se troca entre slots de implantação, por exemplo, trocando Staging para Produção ou utilizando testes A/B, qualquer aplicação que utilize a Proteção de Dados não poderá descriptografar os dados armazenados utilizando o conjunto de chaves do slot anterior. Isso faz com que os usuários sejam desconectados de um aplicativo que usa a autenticação padrão do ASP.NET Core cookie , pois usa a Proteção de Dados para proteger seus cookies. Se desejar porta-chaves independentes de slots, use um fornecedor externo de porta-chaves, como o Armazenamento de Blobs do Azure, o Cofre de Chaves do Azure, um repositório SQL ou cache do Redis.
Se o perfil de usuário estiver disponível, as chaves serão mantidas na pasta %LOCALAPPDATA%\ASP.NET\DataProtection-Keys . Se o sistema operativo for Windows, as chaves serão criptografadas quando não estiverem em uso usando DPAPI.
O atributo setProfileEnvironment do pool de aplicativos também deve ser habilitado. O valor padrão de
setProfileEnvironmentétrue. Em alguns cenários (por exemplo, sistema operacional Windows),setProfileEnvironmenté definido comofalse. Se as chaves não forem armazenadas no diretório de perfil de usuário conforme o esperado:- Navegue até a pasta%windir%/system32/inetsrv/config .
- Abra o arquivo applicationHost.config .
- Localize o elemento
<system.applicationHost><applicationPools><applicationPoolDefaults><processModel>. - Confirme se o atributo
setProfileEnvironmentnão está presente, o que padroniza o valor comotrueou defina explicitamente o valor do atributo comotrue.
Se o aplicativo estiver hospedado no IIS, as chaves serão mantidas no registro HKLM em uma chave de registro especial que é ACLed apenas para a conta do processo de trabalho. As chaves são criptografadas em repouso usando DPAPI.
Se nenhuma destas condições for correspondida, as chaves não serão mantidas fora do processo atual. Quando o processo é encerrado, todas as chaves geradas são perdidas.
O desenvolvedor está sempre no controle total e pode substituir como e onde as chaves são armazenadas. As três primeiras opções acima devem fornecer bons padrões para a maioria dos aplicativos, semelhante a como as rotinas de geração automática ASP.NET <machineKey> funcionavam no passado. A opção de fallback final é o único cenário que exige que o desenvolvedor especifique a configuração antecipadamente se quiser persistência de chave, mas esse fallback só ocorre em situações raras.
Ao hospedar em um contêiner do Docker, as chaves devem ser persistidas em uma pasta que seja um volume do Docker (um volume compartilhado ou um volume montado no host que persiste além do tempo de vida do contêiner) ou em um provedor externo, como o Azure Key Vault ou o Redis. Um provedor externo também é útil em cenários de web farm se os aplicativos não puderem acessar um volume de rede compartilhado (consulte PersistKeysToFileSystem para obter mais informações).
Advertência
Se o desenvolvedor substituir as regras descritas acima e apontar o sistema de Proteção de Dados para um repositório de chaves específico, a criptografia automática de chaves em repouso será desativada. A proteção em repouso pode ser reativada através da configuração.
Vida útil da chave
As chaves têm uma vida útil de 90 dias por padrão. Quando uma chave expira, o aplicativo gera automaticamente uma nova chave e define a nova chave como a chave ativa. Enquanto as chaves retiradas permanecerem no sistema, a sua aplicação poderá descriptografar qualquer dado protegido por elas. Consulte o gerenciamento de chaves para obter mais informações.
Algoritmos padrão
O algoritmo de proteção de carga útil padrão usado é AES-256-CBC para confidencialidade e HMACSHA256 para autenticidade. Uma chave mestra de 512 bits, alterada a cada 90 dias, é usada para derivar as duas subchaves usadas para esses algoritmos por carga útil. Consulte derivação de subchave para obter mais informações.
Excluir chaves
A exclusão de uma chave torna seus dados protegidos permanentemente inacessíveis. Para reduzir esse risco, recomendamos não apagar chaves. O acúmulo resultante de chaves geralmente tem um impacto mínimo porque elas são pequenas. Em casos excecionais, como serviços de execução extremamente longa, as chaves podem ser eliminadas. Exclua apenas as chaves:
- Que são antigos (não estão mais em uso).
- Quando você pode aceitar o risco de perda de dados em troca de economia de armazenamento.
Recomendamos não excluir chaves de proteção de dados.
using Microsoft.AspNetCore.DataProtection.KeyManagement;
var services = new ServiceCollection();
services.AddDataProtection();
var serviceProvider = services.BuildServiceProvider();
var keyManager = serviceProvider.GetService<IKeyManager>();
if (keyManager is IDeletableKeyManager deletableKeyManager)
{
var utcNow = DateTimeOffset.UtcNow;
var yearAgo = utcNow.AddYears(-1);
if (!deletableKeyManager.DeleteKeys(key => key.ExpirationDate < yearAgo))
{
Console.WriteLine("Failed to delete keys.");
}
else
{
Console.WriteLine("Old keys deleted successfully.");
}
}
else
{
Console.WriteLine("Key manager does not support deletion.");
}
Recursos adicionais
Gestão de chaves
O aplicativo tenta detetar seu ambiente operacional e lidar com a configuração de chave por conta própria.
Se o aplicativo estiver hospedado em Aplicativos do Azure, as chaves serão mantidas na pasta \ASP.NET\DataProtection-Keys do%HOME% . Esta pasta é apoiada pelo armazenamento de rede e é sincronizada em todas as máquinas que hospedam o aplicativo.
- As chaves não estão protegidas em estado de repouso.
- A pasta DataProtection-Keys fornece o conjunto de chaves para todas as instâncias de um aplicativo em um único slot de implantação.
- Slots de implantação separados, como Preparo e Produção, não compartilham um porta-chaves. Quando se troca entre slots de implantação, por exemplo, trocando Staging para Produção ou utilizando testes A/B, qualquer aplicação que utilize a Proteção de Dados não poderá descriptografar os dados armazenados utilizando o conjunto de chaves do slot anterior. Isso faz com que os usuários sejam desconectados de um aplicativo que usa a autenticação padrão do ASP.NET Core cookie , pois usa a Proteção de Dados para proteger seus cookies. Se desejar porta-chaves independentes de slots, use um fornecedor externo de porta-chaves, como o Armazenamento de Blobs do Azure, o Cofre de Chaves do Azure, um repositório SQL ou cache do Redis.
Se o perfil de usuário estiver disponível, as chaves serão mantidas na pasta %LOCALAPPDATA%\ASP.NET\DataProtection-Keys . Se o sistema operativo for Windows, as chaves serão criptografadas quando não estiverem em uso usando DPAPI.
O atributo setProfileEnvironment do pool de aplicativos também deve ser habilitado. O valor padrão de
setProfileEnvironmentétrue. Em alguns cenários (por exemplo, sistema operacional Windows),setProfileEnvironmenté definido comofalse. Se as chaves não forem armazenadas no diretório de perfil de usuário conforme o esperado:- Navegue até a pasta%windir%/system32/inetsrv/config .
- Abra o arquivo applicationHost.config .
- Localize o elemento
<system.applicationHost><applicationPools><applicationPoolDefaults><processModel>. - Confirme se o atributo
setProfileEnvironmentnão está presente, o que padroniza o valor comotrueou defina explicitamente o valor do atributo comotrue.
Se o aplicativo estiver hospedado no IIS, as chaves serão mantidas no registro HKLM em uma chave de registro especial que é ACLed apenas para a conta do processo de trabalho. As chaves são criptografadas em repouso usando DPAPI.
Se nenhuma destas condições for correspondida, as chaves não serão mantidas fora do processo atual. Quando o processo é encerrado, todas as chaves geradas são perdidas.
O desenvolvedor está sempre no controle total e pode substituir como e onde as chaves são armazenadas. As três primeiras opções acima devem fornecer bons padrões para a maioria dos aplicativos, semelhante a como as rotinas de geração automática ASP.NET <machineKey> funcionavam no passado. A opção de fallback final é o único cenário que exige que o desenvolvedor especifique a configuração antecipadamente se quiser persistência de chave, mas esse fallback só ocorre em situações raras.
Ao hospedar em um contêiner do Docker, as chaves devem ser persistidas em uma pasta que seja um volume do Docker (um volume compartilhado ou um volume montado no host que persiste além do tempo de vida do contêiner) ou em um provedor externo, como o Azure Key Vault ou o Redis. Um provedor externo também é útil em cenários de web farm se os aplicativos não puderem acessar um volume de rede compartilhado (consulte PersistKeysToFileSystem para obter mais informações).
Advertência
Se o desenvolvedor substituir as regras descritas acima e apontar o sistema de Proteção de Dados para um repositório de chaves específico, a criptografia automática de chaves em repouso será desativada. A proteção em repouso pode ser reativada através da configuração.
Vida útil da chave
As chaves têm uma vida útil de 90 dias por padrão. Quando uma chave expira, o aplicativo gera automaticamente uma nova chave e define a nova chave como a chave ativa. Enquanto as chaves retiradas permanecerem no sistema, a sua aplicação poderá descriptografar qualquer dado protegido por elas. Consulte o gerenciamento de chaves para obter mais informações.
Algoritmos padrão
O algoritmo de proteção de carga útil padrão usado é AES-256-CBC para confidencialidade e HMACSHA256 para autenticidade. Uma chave mestra de 512 bits, alterada a cada 90 dias, é usada para derivar as duas subchaves usadas para esses algoritmos por carga útil. Consulte derivação de subchave para obter mais informações.