Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O sistema de proteção de dados emprega um mecanismo de descoberta por padrão para determinar como as chaves criptográficas devem ser criptografadas em repouso. O desenvolvedor pode substituir o mecanismo de descoberta e especificar manualmente como as chaves devem ser criptografadas em repouso.
Aviso
Se você especificar um local explícito de persistência de chave , o sistema de proteção de dados desregistra o mecanismo padrão de criptografia de chave em repouso. Consequentemente, as chaves não são mais criptografadas em repouso. Recomendamos que você especifique um mecanismo de criptografia de chave explícito para implantações de produção. As opções de mecanismo de criptografia em repouso são descritas neste tópico.
Azure Key Vault
Para obter mais informações, confira Configurar a Proteção de Dados do ASP.NET Core.
DPAPI do Windows
Aplica-se somente a implantações do Windows.
Quando o DPAPI do Windows é usado, o material da chave é criptografado com CryptProtectData antes de ser mantido no armazenamento. O DPAPI é um mecanismo de criptografia apropriado para dados que nunca são lidos fora da máquina atual (embora seja possível fazer backup dessas chaves no Active Directory). Para configurar a criptografia de chave em repouso do DPAPI, chame um dos métodos de extensão ProtectKeysWithDpapi) :
// Only the local user account can decrypt the keys
services.AddDataProtection()
.ProtectKeysWithDpapi();
Se ProtectKeysWithDpapi
for chamado sem parâmetros, somente a conta de usuário atual do Windows poderá decifrar o anel de chave persistente. Opcionalmente, você pode especificar que qualquer conta de usuário no computador (não apenas a conta do usuário atual) seja capaz de decifrar o anel de chave:
// All user accounts on the machine can decrypt the keys
services.AddDataProtection()
.ProtectKeysWithDpapi(protectToLocalMachine: true);
Certificado X.509
Se o aplicativo estiver distribuído em vários computadores, talvez seja conveniente distribuir um certificado X.509 compartilhado (.pfx
formato) entre os computadores e configurar os aplicativos hospedados para usar o certificado para criptografia de chaves em repouso.
No exemplo a seguir, a impressão digital do certificado é passada para ProtectKeysWithCertificate:
services.AddDataProtection()
.ProtectKeysWithCertificate("{CERTIFICATE THUMBPRINT}");
No exemplo a seguir, um X509Certificate2 é passado para ProtectKeysWithCertificate:
var cert = new X509Certificate2(...);
services.AddDataProtection()
.ProtectKeysWithCertificate(cert);
Para criar o certificado, use uma das seguintes abordagens ou qualquer outra ferramenta ou serviço online adequado:
dotnet dev-certs
comandoNew-SelfSignedCertificate
Comando do PowerShell- Azure Key Vault
- MakeCert no Windows
- OpenSSL
Para obter mais informações, consulte Gerar certificados autoassinados com a CLI do .NET.
Devido a limitações do .NET Framework, há suporte apenas para certificados com chaves privadas CAPI. Confira o conteúdo abaixo para obter possíveis soluções alternativas para essas limitações.
DPAPI-NG do Windows
Esse mecanismo só está disponível no Windows 8/Windows Server 2012 ou posterior.
Começando com Windows 8, o sistema operacional Windows dá suporte ao DPAPI-NG (também chamado de DPAPI do CNG). Para obter mais informações, confira Sobre o DPAPI do CNG.
A entidade de segurança é codificada como uma regra do descritor de proteção. No exemplo a seguir que chama ProtectKeysWithDpapiNG, somente o usuário ingressado no domínio com o SID especificado pode descriptografar o anel de chave:
public void ConfigureServices(IServiceCollection services)
{
// Uses the descriptor rule "SID=S-1-5-21-..."
services.AddDataProtection()
.ProtectKeysWithDpapiNG("SID=S-1-5-21-...",
flags: DpapiNGProtectionDescriptorFlags.None);
}
Também há uma sobrecarga sem parâmetros de ProtectKeysWithDpapiNG
. Use esse método de conveniência para especificar a regra "SID={CURRENT_ACCOUNT_SID}", em que CURRENT_ACCOUNT_SID é o SID da conta de usuário atual do Windows:
public void ConfigureServices(IServiceCollection services)
{
// Use the descriptor rule "SID={current account SID}"
services.AddDataProtection()
.ProtectKeysWithDpapiNG();
}
Nesse cenário, o controlador de domínio do AD é responsável por distribuir as chaves de criptografia usadas pelas operações do DPAPI-NG. O usuário-alvo pode decifrar o conteúdo criptografado de qualquer computador que faz parte do domínio (desde que o processo esteja em execução sob sua identidade).
Criptografia baseada em certificado com o DPAPI-NG do Windows
Se o aplicativo estiver em execução no Windows 8.1/Windows Server 2012 R2 ou posterior, você poderá usar o DPAPI-NG do Windows para executar a criptografia baseada em certificado. Use a string de descritor de regra "CERTIFICATE=HashId:{CERTIFICATE THUMBPRINT}", onde o espaço reservado {CERTIFICATE THUMBPRINT}
é a impressão digital SHA1 codificada em hexadecimal do certificado:
public void ConfigureServices(IServiceCollection services)
{
services.AddDataProtection()
.ProtectKeysWithDpapiNG("CERTIFICATE=HashId:{CERTIFICATE THUMBPRINT}",
flags: DpapiNGProtectionDescriptorFlags.None);
}
Qualquer aplicativo apontado para esse repositório deve estar em execução no Windows 8.1/Windows Server 2012 R2 ou posterior para decifrar as chaves.
Criptografia de chave personalizada
Se os mecanismos nativos não forem apropriados, o desenvolvedor poderá especificar seu próprio mecanismo de criptografia de chave fornecendo um IXmlEncryptor personalizado.