Configurar a proteção de dados do ASP.NET CoreConfigure ASP.NET Core Data Protection

Quando o sistema de proteção de dados é inicializado, ele aplica as configurações padrão com base no ambiente operacional.When the Data Protection system is initialized, it applies default settings based on the operational environment. Essas configurações geralmente são apropriadas para aplicativos em execução em um único computador.These settings are generally appropriate for apps running on a single machine. Há casos em que um desenvolvedor pode querer alterar as configurações padrão:There are cases where a developer may want to change the default settings:

  • O aplicativo é distribuído entre vários computadores.The app is spread across multiple machines.
  • Por motivos de conformidade.For compliance reasons.

Para esses cenários, o sistema de proteção de dados oferece uma API de configuração avançada.For these scenarios, the Data Protection system offers a rich configuration API.

Aviso

Semelhante aos arquivos de configuração, o anel da chave de proteção de dados deve ser protegido usando as permissões apropriadas.Similar to configuration files, the data protection key ring should be protected using appropriate permissions. Você pode optar por criptografar as chaves em repouso, mas isso não impede que os invasores criem novas chaves.You can choose to encrypt keys at rest, but this doesn't prevent attackers from creating new keys. Consequentemente, a segurança do seu aplicativo é afetada.Consequently, your app's security is impacted. O local de armazenamento configurado com proteção de dados deve ter seu acesso limitado ao aplicativo em si, semelhante ao modo como você protegeria os arquivos de configuração.The storage location configured with Data Protection should have its access limited to the app itself, similar to the way you would protect configuration files. Por exemplo, se você optar por armazenar o anel de chave no disco, use as permissões do sistema de arquivos.For example, if you choose to store your key ring on disk, use file system permissions. Certifique-se de que apenas a identidade sob a qual seu aplicativo Web é executado tenha acesso de leitura, gravação e criação para esse diretório.Ensure only the identity under which your web app runs has read, write, and create access to that directory. Se você usar o armazenamento de BLOBs do Azure, somente o aplicativo Web deverá ter a capacidade de ler, gravar ou criar novas entradas no repositório de BLOB, etc.If you use Azure Blob Storage, only the web app should have the ability to read, write, or create new entries in the blob store, etc.

O método de extensão AddDataProtection retorna um IDataProtectionBuilder.The extension method AddDataProtection returns an IDataProtectionBuilder. IDataProtectionBuilder expõe métodos de extensão que você pode encadear para configurar opções de proteção de dados.IDataProtectionBuilder exposes extension methods that you can chain together to configure Data Protection options.

Os seguintes pacotes NuGet são necessários para as extensões de proteção de dados usadas neste artigo:The following NuGet packages are required for the Data Protection extensions used in this article:

ProtectKeysWithAzureKeyVaultProtectKeysWithAzureKeyVault

Para armazenar chaves no Azure Key Vault, configure o sistema com ProtectKeysWithAzureKeyVault na classe Startup:To store keys in Azure Key Vault, configure the system with ProtectKeysWithAzureKeyVault in the Startup class:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection()
        .PersistKeysToAzureBlobStorage(new Uri("<blobUriWithSasToken>"))
        .ProtectKeysWithAzureKeyVault("<keyIdentifier>", "<clientId>", "<clientSecret>");
}

Defina o local de armazenamento do anel de chave (por exemplo, PersistKeysToAzureBlobStorage).Set the key ring storage location (for example, PersistKeysToAzureBlobStorage). O local deve ser definido porque a chamada a ProtectKeysWithAzureKeyVault implementa um IXmlEncryptor que desabilita as configurações automáticas de proteção de dados, incluindo o local de armazenamento do anel de chave.The location must be set because calling ProtectKeysWithAzureKeyVault implements an IXmlEncryptor that disables automatic data protection settings, including the key ring storage location. O exemplo anterior usa o armazenamento de BLOBs do Azure para persistir o anel de chave.The preceding example uses Azure Blob Storage to persist the key ring. Para obter mais informações, consulte provedores de armazenamento de chaves: armazenamento do Azure.For more information, see Key storage providers: Azure Storage. Você também pode persistir o anel de chave localmente com PersistKeysToFileSystem.You can also persist the key ring locally with PersistKeysToFileSystem.

O keyIdentifier é o identificador de chave do Key Vault usado para criptografia de chave.The keyIdentifier is the key vault key identifier used for key encryption. Por exemplo, uma chave criada no cofre de chaves chamado dataprotection no contosokeyvault tem o identificador de chave https://contosokeyvault.vault.azure.net/keys/dataprotection/.For example, a key created in key vault named dataprotection in the contosokeyvault has the key identifier https://contosokeyvault.vault.azure.net/keys/dataprotection/. Forneça ao aplicativo a chave de desencapsulamento e as permissões de chave de encapsulamento para o cofre de chaves.Provide the app with Unwrap Key and Wrap Key permissions to the key vault.

sobrecargas de ProtectKeysWithAzureKeyVault:ProtectKeysWithAzureKeyVault overloads:

PersistKeysToFileSystemPersistKeysToFileSystem

Para armazenar chaves em um compartilhamento UNC em vez de no local padrão % LocalAppData% , configure o sistema com PersistKeysToFileSystem:To store keys on a UNC share instead of at the %LOCALAPPDATA% default location, configure the system with PersistKeysToFileSystem:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection()
        .PersistKeysToFileSystem(new DirectoryInfo(@"\\server\share\directory\"));
}

Aviso

Se você alterar o local de persistência da chave, o sistema não criptografará mais automaticamente as chaves em repouso, pois não sabe se o DPAPI é um mecanismo de criptografia apropriado.If you change the key persistence location, the system no longer automatically encrypts keys at rest, since it doesn't know whether DPAPI is an appropriate encryption mechanism.

* ProtectKeysWithProtectKeysWith*

Você pode configurar o sistema para proteger as chaves em repouso chamando qualquer uma das APIs de configuração de *ProtectKeysWith .You can configure the system to protect keys at rest by calling any of the ProtectKeysWith* configuration APIs. Considere o exemplo a seguir, que armazena chaves em um compartilhamento UNC e criptografa essas chaves em repouso com um certificado X. 509 específico:Consider the example below, which stores keys on a UNC share and encrypts those keys at rest with a specific X.509 certificate:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection()
        .PersistKeysToFileSystem(new DirectoryInfo(@"\\server\share\directory\"))
        .ProtectKeysWithCertificate("thumbprint");
}

No ASP.NET Core 2,1 ou posterior, você pode fornecer um X509Certificate2 para ProtectKeysWithCertificate, como um certificado carregado de um arquivo:In ASP.NET Core 2.1 or later, you can provide an X509Certificate2 to ProtectKeysWithCertificate, such as a certificate loaded from a file:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection()
        .PersistKeysToFileSystem(new DirectoryInfo(@"\\server\share\directory\"))
        .ProtectKeysWithCertificate(
            new X509Certificate2("certificate.pfx", "password"));
}

Consulte criptografia de chave em repouso para obter mais exemplos e discussão sobre os mecanismos de criptografia de chave internos.See Key Encryption At Rest for more examples and discussion on the built-in key encryption mechanisms.

UnprotectKeysWithAnyCertificateUnprotectKeysWithAnyCertificate

No ASP.NET Core 2,1 ou posterior, você pode girar certificados e descriptografar chaves em repouso usando uma matriz de certificados X509Certificate2 com UnprotectKeysWithAnyCertificate:In ASP.NET Core 2.1 or later, you can rotate certificates and decrypt keys at rest using an array of X509Certificate2 certificates with UnprotectKeysWithAnyCertificate:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection()
        .PersistKeysToFileSystem(new DirectoryInfo(@"\\server\share\directory\"))
        .ProtectKeysWithCertificate(
            new X509Certificate2("certificate.pfx", "password"));
        .UnprotectKeysWithAnyCertificate(
            new X509Certificate2("certificate_old_1.pfx", "password_1"),
            new X509Certificate2("certificate_old_2.pfx", "password_2"));
}

SetDefaultKeyLifetimeSetDefaultKeyLifetime

Para configurar o sistema para usar um tempo de vida de chave de 14 dias em vez do padrão de 90 dias, use SetDefaultKeyLifetime:To configure the system to use a key lifetime of 14 days instead of the default 90 days, use SetDefaultKeyLifetime:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection()
        .SetDefaultKeyLifetime(TimeSpan.FromDays(14));
}

SetApplicationNameSetApplicationName

Por padrão, o sistema de proteção de dados isola os aplicativos uns dos outros com base em seus caminhos de raiz de conteúdo , mesmo se eles estiverem compartilhando o mesmo repositório de chave física.By default, the Data Protection system isolates apps from one another based on their content root paths, even if they're sharing the same physical key repository. Isso impede que os aplicativos compreendam os conteúdos protegidos uns dos outros.This prevents the apps from understanding each other's protected payloads.

Para compartilhar cargas protegidas entre aplicativos:To share protected payloads among apps:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection()
        .SetApplicationName("shared app name");
}

DisableAutomaticKeyGenerationDisableAutomaticKeyGeneration

Você pode ter um cenário em que não deseja que um aplicativo faça o roll-Keys automaticamente (criar novas chaves) enquanto eles se aproximam da expiração.You may have a scenario where you don't want an app to automatically roll keys (create new keys) as they approach expiration. Um exemplo disso pode ser os aplicativos configurados em uma relação primária/secundária, em que somente o aplicativo primário é responsável por questões de gerenciamento de chaves e os aplicativos secundários simplesmente têm uma exibição somente leitura do anel de chave.One example of this might be apps set up in a primary/secondary relationship, where only the primary app is responsible for key management concerns and secondary apps simply have a read-only view of the key ring. Os aplicativos secundários podem ser configurados para tratar o anel de chave como somente leitura, configurando o sistema com DisableAutomaticKeyGeneration:The secondary apps can be configured to treat the key ring as read-only by configuring the system with DisableAutomaticKeyGeneration:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection()
        .DisableAutomaticKeyGeneration();
}

Isolamento por aplicativoPer-application isolation

Quando o sistema de proteção de dados é fornecido por um host ASP.NET Core, ele isola automaticamente os aplicativos uns dos outros, mesmo se esses aplicativos estiverem em execução na mesma conta de processo de trabalho e estiverem usando o mesmo material de chave mestra.When the Data Protection system is provided by an ASP.NET Core host, it automatically isolates apps from one another, even if those apps are running under the same worker process account and are using the same master keying material. Isso é um pouco semelhante ao modificador IsolateApps do elemento <machineKey> do System. Web.This is somewhat similar to the IsolateApps modifier from System.Web's <machineKey> element.

O mecanismo de isolamento funciona considerando cada aplicativo no computador local como um locatário exclusivo, portanto, o IDataProtector com raiz para qualquer aplicativo específico inclui automaticamente a ID do aplicativo como um discriminador.The isolation mechanism works by considering each app on the local machine as a unique tenant, thus the IDataProtector rooted for any given app automatically includes the app ID as a discriminator. A ID exclusiva do aplicativo é o caminho físico do aplicativo:The app's unique ID is the app's physical path:

  • Para aplicativos hospedados no IIS, a ID exclusiva é o caminho físico do IIS do aplicativo.For apps hosted in IIS, the unique ID is the IIS physical path of the app. Se um aplicativo for implantado em um ambiente de web farm, esse valor será estável supondo que os ambientes IIS sejam configurados de forma semelhante em todos os computadores da web farm.If an app is deployed in a web farm environment, this value is stable assuming that the IIS environments are configured similarly across all machines in the web farm.
  • Para aplicativos hospedados internamente em execução no servidor Kestrel, a ID exclusiva é o caminho físico para o aplicativo no disco.For self-hosted apps running on the Kestrel server, the unique ID is the physical path to the app on disk.

O identificador exclusivo é projetado para sobreviver a redefinições—o aplicativo individual e o próprio computador.The unique identifier is designed to survive resets—both of the individual app and of the machine itself.

Esse mecanismo de isolamento pressupõe que os aplicativos não são mal-intencionados.This isolation mechanism assumes that the apps are not malicious. Um aplicativo mal-intencionado sempre pode afetar qualquer outro aplicativo em execução na mesma conta de processo de trabalho.A malicious app can always impact any other app running under the same worker process account. Em um ambiente de hospedagem compartilhado em que os aplicativos são mutuamente não confiáveis, o provedor de hospedagem deve executar etapas para garantir o isolamento no nível do sistema operacional entre aplicativos, incluindo a separação dos repositórios de chave subjacente dos aplicativos.In a shared hosting environment where apps are mutually untrusted, the hosting provider should take steps to ensure OS-level isolation between apps, including separating the apps' underlying key repositories.

Se o sistema de proteção de dados não for fornecido por um host ASP.NET Core (por exemplo, se você instanciá-lo via DataProtectionProvider tipo concreto), o isolamento de aplicativo será desabilitado por padrão.If the Data Protection system isn't provided by an ASP.NET Core host (for example, if you instantiate it via the DataProtectionProvider concrete type) app isolation is disabled by default. Quando o isolamento de aplicativo é desabilitado, todos os aplicativos apoiados pelo mesmo material de chave podem compartilhar cargas desde que forneçam as finalidadesapropriadas.When app isolation is disabled, all apps backed by the same keying material can share payloads as long as they provide the appropriate purposes. Para fornecer isolamento de aplicativo nesse ambiente, chame o método Setapplicationname no objeto de configuração e forneça um nome exclusivo para cada aplicativo.To provide app isolation in this environment, call the SetApplicationName method on the configuration object and provide a unique name for each app.

Alterando algoritmos com UseCryptographicAlgorithmsChanging algorithms with UseCryptographicAlgorithms

A pilha de proteção de dados permite que você altere o algoritmo padrão usado por chaves geradas recentemente.The Data Protection stack allows you to change the default algorithm used by newly-generated keys. A maneira mais simples de fazer isso é chamar UseCryptographicAlgorithms do retorno de chamada de configuração:The simplest way to do this is to call UseCryptographicAlgorithms from the configuration callback:

services.AddDataProtection()
    .UseCryptographicAlgorithms(
        new AuthenticatedEncryptorConfiguration()
    {
        EncryptionAlgorithm = EncryptionAlgorithm.AES_256_CBC,
        ValidationAlgorithm = ValidationAlgorithm.HMACSHA256
    });
services.AddDataProtection()
    .UseCryptographicAlgorithms(
        new AuthenticatedEncryptionSettings()
    {
        EncryptionAlgorithm = EncryptionAlgorithm.AES_256_CBC,
        ValidationAlgorithm = ValidationAlgorithm.HMACSHA256
    });

O EncryptionAlgorithm padrão é AES-256-CBC e o ValidationAlgorithm padrão é HMACSHA256.The default EncryptionAlgorithm is AES-256-CBC, and the default ValidationAlgorithm is HMACSHA256. A política padrão pode ser definida por um administrador de sistema por meio de uma política de todo o computador, mas uma chamada explícita para UseCryptographicAlgorithms substitui a política padrão.The default policy can be set by a system administrator via a machine-wide policy, but an explicit call to UseCryptographicAlgorithms overrides the default policy.

Chamar UseCryptographicAlgorithms permite que você especifique o algoritmo desejado de uma lista interna predefinida.Calling UseCryptographicAlgorithms allows you to specify the desired algorithm from a predefined built-in list. Você não precisa se preocupar com a implementação do algoritmo.You don't need to worry about the implementation of the algorithm. No cenário acima, o sistema de proteção de dados tenta usar a implementação CNG do AES se estiver em execução no Windows.In the scenario above, the Data Protection system attempts to use the CNG implementation of AES if running on Windows. Caso contrário, ele retornará à classe System. Security. Cryptography. AES gerenciada.Otherwise, it falls back to the managed System.Security.Cryptography.Aes class.

Você pode especificar manualmente uma implementação por meio de uma chamada para UseCustomCryptographicAlgorithms.You can manually specify an implementation via a call to UseCustomCryptographicAlgorithms.

Dica

A alteração de algoritmos não afeta as chaves existentes no anel de chave.Changing algorithms doesn't affect existing keys in the key ring. Afeta apenas as chaves geradas recentemente.It only affects newly-generated keys.

Especificando algoritmos gerenciados personalizadosSpecifying custom managed algorithms

Para especificar algoritmos gerenciados personalizados, crie uma instância de ManagedAuthenticatedEncryptorConfiguration que aponte para os tipos de implementação:To specify custom managed algorithms, create a ManagedAuthenticatedEncryptorConfiguration instance that points to the implementation types:

serviceCollection.AddDataProtection()
    .UseCustomCryptographicAlgorithms(
        new ManagedAuthenticatedEncryptorConfiguration()
    {
        // A type that subclasses SymmetricAlgorithm
        EncryptionAlgorithmType = typeof(Aes),

        // Specified in bits
        EncryptionAlgorithmKeySize = 256,

        // A type that subclasses KeyedHashAlgorithm
        ValidationAlgorithmType = typeof(HMACSHA256)
    });

Para especificar algoritmos gerenciados personalizados, crie uma instância de ManagedAuthenticatedEncryptionSettings que aponte para os tipos de implementação:To specify custom managed algorithms, create a ManagedAuthenticatedEncryptionSettings instance that points to the implementation types:

serviceCollection.AddDataProtection()
    .UseCustomCryptographicAlgorithms(
        new ManagedAuthenticatedEncryptionSettings()
    {
        // A type that subclasses SymmetricAlgorithm
        EncryptionAlgorithmType = typeof(Aes),

        // Specified in bits
        EncryptionAlgorithmKeySize = 256,

        // A type that subclasses KeyedHashAlgorithm
        ValidationAlgorithmType = typeof(HMACSHA256)
    });

Geralmente, as propriedades de tipo de *devem apontar para concreto, instanciáveis (por meio de uma implementação de construtor público sem parâmetros) de SymmetricAlgorithm e KeyedHashAlgorithm, embora o sistema especial tenha alguns valores como typeof(Aes) para sua conveniência.Generally the *Type properties must point to concrete, instantiable (via a public parameterless ctor) implementations of SymmetricAlgorithm and KeyedHashAlgorithm, though the system special-cases some values like typeof(Aes) for convenience.

Observação

O SymmetricAlgorithm deve ter um comprimento de chave de ≥ 128 bits e um tamanho de bloco de ≥ 64 bits, e deve dar suporte à criptografia no modo CBC com o preenchimento de #7 PKCS.The SymmetricAlgorithm must have a key length of ≥ 128 bits and a block size of ≥ 64 bits, and it must support CBC-mode encryption with PKCS #7 padding. O KeyedHashAlgorithm deve ter um tamanho de Resumo de > = 128 bits e deve dar suporte a chaves de comprimento igual ao tamanho de resumo do algoritmo de hash.The KeyedHashAlgorithm must have a digest size of >= 128 bits, and it must support keys of length equal to the hash algorithm's digest length. O KeyedHashAlgorithm não é estritamente necessário para ser HMAC.The KeyedHashAlgorithm isn't strictly required to be HMAC.

Especificando algoritmos personalizados de CNG do WindowsSpecifying custom Windows CNG algorithms

Para especificar um algoritmo CNG personalizado do Windows usando a criptografia do modo CBC com a validação HMAC, crie uma instância CngCbcAuthenticatedEncryptorConfiguration que contenha as informações do algoritmo:To specify a custom Windows CNG algorithm using CBC-mode encryption with HMAC validation, create a CngCbcAuthenticatedEncryptorConfiguration instance that contains the algorithmic information:

services.AddDataProtection()
    .UseCustomCryptographicAlgorithms(
        new CngCbcAuthenticatedEncryptorConfiguration()
    {
        // Passed to BCryptOpenAlgorithmProvider
        EncryptionAlgorithm = "AES",
        EncryptionAlgorithmProvider = null,

        // Specified in bits
        EncryptionAlgorithmKeySize = 256,

        // Passed to BCryptOpenAlgorithmProvider
        HashAlgorithm = "SHA256",
        HashAlgorithmProvider = null
    });

Para especificar um algoritmo CNG personalizado do Windows usando a criptografia do modo CBC com a validação HMAC, crie uma instância CngCbcAuthenticatedEncryptionSettings que contenha as informações do algoritmo:To specify a custom Windows CNG algorithm using CBC-mode encryption with HMAC validation, create a CngCbcAuthenticatedEncryptionSettings instance that contains the algorithmic information:

services.AddDataProtection()
    .UseCustomCryptographicAlgorithms(
        new CngCbcAuthenticatedEncryptionSettings()
    {
        // Passed to BCryptOpenAlgorithmProvider
        EncryptionAlgorithm = "AES",
        EncryptionAlgorithmProvider = null,

        // Specified in bits
        EncryptionAlgorithmKeySize = 256,

        // Passed to BCryptOpenAlgorithmProvider
        HashAlgorithm = "SHA256",
        HashAlgorithmProvider = null
    });

Observação

O algoritmo de codificação de bloco simétrico deve ter um comprimento de chave de > = 128 bits, um tamanho de bloco de > = 64 bits e deve dar suporte à criptografia do modo CBC com o preenchimento de #7 PKCS.The symmetric block cipher algorithm must have a key length of >= 128 bits, a block size of >= 64 bits, and it must support CBC-mode encryption with PKCS #7 padding. O algoritmo de hash deve ter um tamanho de Resumo de > = 128 bits e deve ter suporte para ser aberto com o manipulador BCRYPT_ALG_identificador_sinal de sinalizador de_HMAC.The hash algorithm must have a digest size of >= 128 bits and must support being opened with the BCRYPT_ALG_HANDLE_HMAC_FLAG flag. As propriedades do provedor de *podem ser definidas como NULL para usar o provedor padrão para o algoritmo especificado.The *Provider properties can be set to null to use the default provider for the specified algorithm. Consulte a documentação do BCryptOpenAlgorithmProvider para obter mais informações.See the BCryptOpenAlgorithmProvider documentation for more information.

Para especificar um algoritmo CNG personalizado do Windows usando a criptografia do modo de Galois/contador com validação, crie uma instância CngGcmAuthenticatedEncryptorConfiguration que contenha as informações de algoritmos:To specify a custom Windows CNG algorithm using Galois/Counter Mode encryption with validation, create a CngGcmAuthenticatedEncryptorConfiguration instance that contains the algorithmic information:

services.AddDataProtection()
    .UseCustomCryptographicAlgorithms(
        new CngGcmAuthenticatedEncryptorConfiguration()
    {
        // Passed to BCryptOpenAlgorithmProvider
        EncryptionAlgorithm = "AES",
        EncryptionAlgorithmProvider = null,

        // Specified in bits
        EncryptionAlgorithmKeySize = 256
    });

Para especificar um algoritmo CNG personalizado do Windows usando a criptografia do modo de Galois/contador com validação, crie uma instância CngGcmAuthenticatedEncryptionSettings que contenha as informações de algoritmos:To specify a custom Windows CNG algorithm using Galois/Counter Mode encryption with validation, create a CngGcmAuthenticatedEncryptionSettings instance that contains the algorithmic information:

services.AddDataProtection()
    .UseCustomCryptographicAlgorithms(
        new CngGcmAuthenticatedEncryptionSettings()
    {
        // Passed to BCryptOpenAlgorithmProvider
        EncryptionAlgorithm = "AES",
        EncryptionAlgorithmProvider = null,

        // Specified in bits
        EncryptionAlgorithmKeySize = 256
    });

Observação

O algoritmo de codificação de bloco simétrico deve ter um comprimento de chave de > = 128 bits, um tamanho de bloco de exatamente 128 bits e deve dar suporte à criptografia GCM.The symmetric block cipher algorithm must have a key length of >= 128 bits, a block size of exactly 128 bits, and it must support GCM encryption. Você pode definir a propriedade EncryptionAlgorithmProvider como NULL para usar o provedor padrão para o algoritmo especificado.You can set the EncryptionAlgorithmProvider property to null to use the default provider for the specified algorithm. Consulte a documentação do BCryptOpenAlgorithmProvider para obter mais informações.See the BCryptOpenAlgorithmProvider documentation for more information.

Especificando outros algoritmos personalizadosSpecifying other custom algorithms

Embora não sejam expostos como uma API de primeira classe, o sistema de proteção de dados é extensível o suficiente para permitir a especificação de praticamente qualquer tipo de algoritmo.Though not exposed as a first-class API, the Data Protection system is extensible enough to allow specifying almost any kind of algorithm. Por exemplo, é possível manter todas as chaves contidas em um HSM (módulo de segurança de hardware) e fornecer uma implementação personalizada das principais rotinas de criptografia e descriptografia.For example, it's possible to keep all keys contained within a Hardware Security Module (HSM) and to provide a custom implementation of the core encryption and decryption routines. Consulte IAuthenticatedEncryptor na extensibilidade de criptografia de núcleo para obter mais informações.See IAuthenticatedEncryptor in Core cryptography extensibility for more information.

Mantendo chaves ao hospedar em um contêiner do DockerPersisting keys when hosting in a Docker container

Ao hospedar em um contêiner do Docker , as chaves devem ser mantidas em:When hosting in a Docker container, keys should be maintained in either:

  • Uma pasta que é um volume do Docker que persiste além do tempo de vida do contêiner, como um volume compartilhado ou um volume montado pelo host.A folder that's a Docker volume that persists beyond the container's lifetime, such as a shared volume or a host-mounted volume.
  • Um provedor externo, como Azure Key Vault ou Redis.An external provider, such as Azure Key Vault or Redis.

Mantendo chaves com RedisPersisting keys with Redis

Somente versões Redis que dão suporte à persistência de dados Redis devem ser usadas para armazenar chaves.Only Redis versions supporting Redis Data Persistence should be used to store keys. O armazenamento de BLOBs do Azure é persistente e pode ser usado para armazenar chaves.Azure Blob storage is persistent and can be used to store keys. Para obter mais informações, consulte esse problema de GitHub.For more information, see this GitHub issue.

Recursos adicionaisAdditional resources