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 šifrování neaktivních uložených klíčů.

Upozorňující

Pokud zadáte explicitní umístění trvalosti klíče, systém ochrany dat dereguje výchozí mechanismus šifrování neaktivních uložených klíčů. 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

Pokud chcete ukládat klíče ve službě Startup Azure Key Vault, nakonfigurujte systém ve ProtectKeysWithAzureKeyVault třídě:

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

Další informace najdete v tématu Konfigurace ASP.NET Core Data Protection: ProtectKeysWithAzureKeyVault.

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í:

public void ConfigureServices(IServiceCollection services)
{
    // 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íčů:

public void ConfigureServices(IServiceCollection services)
{
    // 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 mezi počítače a nakonfigurovat hostované aplikace tak, aby používaly certifikát pro šifrování neaktivních uložených klíčů:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection()
        .ProtectKeysWithCertificate("3BCE558E2AD3E0E34A7743EAB5AEA2A9BD2575A0");
}

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:THUMBPRINT", kde THUMBPRINT je kryptografický otisk SHA1 s šestnáctkovým kódováním SHA1 certifikátu:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection()
        .ProtectKeysWithDpapiNG("CERTIFICATE=HashId:3BCE558E2...B5AEA2A9BD2575A0",
            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.