Sdílet prostřednictvím


Šifrování rest klíčů ve Windows a Azure pomocí ASP.NET Core

Systém ochrany dat ve výchozím nastavení využívá mechanismus zjišťování k určení způsobu šifrování kryptografických klíčů na restadrese . Vývojář může přepsat mechanismus zjišťování a ručně určit způsob šifrování klíčů na restadrese .

Upozorňující

Pokud zadáte explicitní umístění trvalosti klíče, systém ochrany dat dereguje výchozí šifrování klíče v rest mechanismu. V důsledku toho se klíče už nešifrují na restadrese . Pro produkční nasazení doporučujeme zadat explicitní šifrovací mechanismus klíče. Možnosti mechanismu šifrování jsourest 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). Pokud chcete nakonfigurovat šifrování klíčerest DPAPI, zavolejte 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í klíčů:rest

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 dešifrovat zašifrovanou datovou část z libovolného počítače připojeného k doméně (za předpokladu, že proces běží pod jeho identity).

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

Pokud je aplikace spuštěná na 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ěžet na 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.