Sdílet prostřednictvím


Šifrování neaktivních uložených klíčů ve Windows a Azure pomocí ASP.NET Core

Systém ochrany dat ve výchozím nastavení využívá mechanismus zjišťování , který určuje, jak mají být kryptografické klíče zašifrovány v klidovém stavu. Vývojář může mechanismus zjišťování přepsat a ručně určit způsob, jakým by měly být klíče šifrovány na místě.

Upozorňující

Pokud zadáte explicitní umístění perzistence klíče, systém ochrany dat deaktivuje výchozí mechanismus šifrování klíčů v nečinnosti. V důsledku toho se klíče už nezašifrují v klidovém stavu. Pro produkční nasazení doporučujeme zadat explicitní šifrovací mechanismus klíče. Možnosti mechanismu šifrování při nečinnosti jsou popsány v tomto tématu.

Azure Key Vault

Další informace najdete v tématu Konfigurace ASP.NET základní ochrany dat.

Windows DPAPI

Platí jenom pro nasazení systému Windows.

Při použití rozhraní WINDOWS DPAPI je materiál klíče před zachováním v úložišti šifrovaný pomocí CryptProtectData . ROZHRANÍ DPAPI je vhodný šifrovací mechanismus pro data, která se nikdy nečtou mimo aktuální počítač (i když je možné tyto klíče zálohovat do služby Active Directory). Ke konfiguraci šifrování neaktivních uložených klíčů DPAPI volejte jednu z ProtectKeysWithDpapimetod rozšíření:

// Only the local user account can decrypt the keys
services.AddDataProtection()
    .ProtectKeysWithDpapi();

Pokud ProtectKeysWithDpapi je volána bez parametrů, může trvalý okruh klíčů dešifrovat pouze aktuální uživatelský účet Systému Windows. Volitelně můžete zadat, že jakýkoli uživatelský účet na počítači (nejen aktuální uživatelský účet) může šifrovat okruh klíčů:

// All user accounts on the machine can decrypt the keys
services.AddDataProtection()
    .ProtectKeysWithDpapi(protectToLocalMachine: true);

certifikát X.509

Pokud je aplikace rozložená mezi více počítačů, může být vhodné distribuovat sdílený certifikát X.509 (.pfx formát) mezi počítače a nakonfigurovat hostované aplikace tak, aby používaly certifikát pro šifrování neaktivních uložených klíčů.

V následujícím příkladu se otisk prstu certifikátu předává do ProtectKeysWithCertificate.

services.AddDataProtection()
    .ProtectKeysWithCertificate("{CERTIFICATE THUMBPRINT}");

V následujícím příkladu je X509Certificate2 předán do ProtectKeysWithCertificate.

var cert = new X509Certificate2(...);

services.AddDataProtection()
    .ProtectKeysWithCertificate(cert);

K vytvoření certifikátu použijte jeden z následujících přístupů nebo jakýkoli jiný vhodný nástroj nebo online službu:

Další informace najdete v tématu Generování certifikátů podepsaných svým držitelem pomocí rozhraní příkazového řádku .NET.

Kvůli omezením rozhraní .NET Framework se podporují pouze certifikáty s privátními klíči CAPI. Možná alternativní řešení těchto omezení najdete v následujícím obsahu.

Windows DPAPI-NG

Tento mechanismus je k dispozici pouze ve Windows 8 nebo Windows Serveru 2012 nebo novějším.

Od Windows 8 operační systém Windows podporuje DPAPI-NG (označované také jako CNG DPAPI). Další informace naleznete v tématu O CNG DPAPI.

Objekt zabezpečení se zakóduje jako pravidlo popisovače ochrany. V následujícím příkladu, který volá ProtectKeysWithDpapiNG, může dešifrovat okruh klíčů pouze uživatel připojený k doméně se zadaným identifikátorem SID:

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);
}

Existuje také přetížení ProtectKeysWithDpapiNGbez parametrů . Tuto metodu pohodlí použijte k určení pravidla SID={CURRENT_ACCOUNT_SID}, kde CURRENT_ACCOUNT_SID je IDENTIFIKÁTOR SID aktuálního uživatelského účtu Systému Windows:

public void ConfigureServices(IServiceCollection services)
{
    // Use the descriptor rule "SID={current account SID}"
    services.AddDataProtection()
        .ProtectKeysWithDpapiNG();
}

V tomto scénáři je řadič domény AD zodpovědný za distribuci šifrovacích klíčů používaných operacemi DPAPI-NG. Cílový uživatel může šifrovanou datovou část dešifrovat z libovolného počítače připojeného k doméně (za předpokladu, že proces běží pod svou identitou).

Šifrování založené na certifikátech s Windows DPAPI-NG

Pokud je aplikace spuštěná ve Windows 8.1/Windows Serveru 2012 R2 nebo novějším, můžete k šifrování založenému na certifikátech použít Windows DPAPI-NG. Použijte řetězec popisovače pravidla "CERTIFICATE=HashId:{CERTIFICATE THUMBPRINT}", kde zástupný symbol {CERTIFICATE THUMBPRINT} je hexadecimálně kódovaný SHA1 otisk certifikátu:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection()
        .ProtectKeysWithDpapiNG("CERTIFICATE=HashId:{CERTIFICATE THUMBPRINT}",
            flags: DpapiNGProtectionDescriptorFlags.None);
}

Všechny aplikace, na které odkazuje toto úložiště, musí být spuštěné ve Windows 8.1/Windows Serveru 2012 R2 nebo novějším, aby bylo možné klíče dešifrovat.

Šifrování vlastního klíče

Pokud nejsou mechanismy in-box vhodné, vývojář může zadat vlastní šifrovací mechanismus klíče poskytnutím vlastního IXmlEncryptor.