Dela via


Nyckelkryptering i vila i Windows och Azure med hjälp av ASP.NET Core

Dataskyddssystemet använder en identifieringsmekanism som standard för att avgöra hur kryptografiska nycklar ska krypteras i vila. Utvecklaren kan åsidosätta identifieringsmekanismen och manuellt ange hur nycklar ska krypteras i vila.

Varning

Om du anger en explicit plats för ihållande lagring av nyckeln avregistrerar dataskyddssystemet standardmekanismen för nyckelkryptering i viloläge. Därför krypteras inte längre nycklar i vila. Vi rekommenderar att du anger en explicit nyckelkrypteringsmekanism för produktion. Alternativen för kryptering i vila beskrivs i det här avsnittet.

Azure 密钥保管库

Mer information finns i Konfigurera ASP.NET Core Data Protection.

Windows DPAPI

gäller endast för Windows-distributioner.

När Windows DPAPI används krypteras nyckelmaterial med CryptProtectData innan det sparas i lagringen. DPAPI är en lämplig krypteringsmekanism för data som aldrig läss utanför den aktuella datorn (även om det är möjligt att säkerhetskopiera dessa nycklar till Active Directory). Om du vill konfigurera DPAPI-nyckel-i-vila-kryptering anropar du någon av de ProtectKeysWithDpapi) tilläggsmetoderna:

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

Om ProtectKeysWithDpapi anropas utan parametrar kan endast det aktuella Windows-användarkontot dechiffrera den bevarade nyckelringen. Du kan också ange att alla användarkonton på datorn (inte bara det aktuella användarkontot) ska kunna dechiffrera nyckelringen:

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

X.509-certifikat

Om appen är spridd över flera datorer kan det vara praktiskt att distribuera ett delat X.509-certifikat (.pfx format) mellan datorerna och konfigurera värdbaserade appar att använda certifikatet för kryptering av nycklar i vila.

I följande exempel skickas certifikatets tumavtryck till ProtectKeysWithCertificate:

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

I följande exempel skickas en X509Certificate2 till ProtectKeysWithCertificate:

var cert = new X509Certificate2(...);

services.AddDataProtection()
    .ProtectKeysWithCertificate(cert);

Om du vill skapa certifikatet använder du någon av följande metoder eller något annat lämpligt verktyg eller en onlinetjänst:

Mer information finns i Generera självsignerade certifikat med .NET CLI.

På grund av begränsningar i .NET Framework stöds endast certifikat med PRIVATA CAPI-nycklar. Se innehållet nedan för möjliga lösningar på dessa begränsningar.

Windows DPAPI-NG

Den här mekanismen är endast tillgänglig på Windows 8/Windows Server 2012 eller senare.

Från och med Windows 8 stöder Windows OS DPAPI-NG (kallas även CNG DPAPI). Mer information finns i Om CNG DPAPI.

Principalen kodas som en skyddsregelbeskrivning. I följande exempel som anropar ProtectKeysWithDpapiNGkan endast den domänanslutna användaren med angivet SID dekryptera nyckelringen:

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

Det finns också en parameterlös överbelastning av ProtectKeysWithDpapiNG. Använd den här bekvämlighetsmetoden för att ange regeln "SID={CURRENT_ACCOUNT_SID}", där CURRENT_ACCOUNT_SID är SID för det aktuella Windows-användarkontot:

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

I det här scenariot ansvarar AD-domänkontrollanten för att distribuera de krypteringsnycklar som används av DPAPI-NG åtgärder. Målanvändaren kan dechiffrera den krypterade nyttolasten från alla domänanslutna datorer (förutsatt att processen körs under deras identitet).

Certifikatbaserad kryptering med Windows DPAPI-NG

Om appen körs på Windows 8.1/Windows Server 2012 R2 eller senare kan du använda Windows DPAPI-NG för att utföra certifikatbaserad kryptering. Använd regelbeskrivningssträngen "CERTIFICATE=HashId:{CERTIFICATE THUMBPRINT}", där {CERTIFICATE THUMBPRINT} platshållaren är det hexkodade SHA1-tumavtrycket för certifikatet:

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

Alla appar som pekar på den här lagringsplatsen måste köras på Windows 8.1/Windows Server 2012 R2 eller senare för att dechiffrera nycklarna.

Kryptering av anpassad nyckel

Om in-box-mekanismerna inte är lämpliga kan utvecklaren ange sin egen nyckelkrypteringsmekanism genom att tillhandahålla en anpassad IXmlEncryptor.