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 Key Vault
Om du vill lagra nycklar i Azure Key Vaultkonfigurerar du systemet med ProtectKeysWithAzureKeyVault i klassen Startup
:
public void ConfigureServices(IServiceCollection services)
{
services.AddDataProtection()
.PersistKeysToAzureBlobStorage(new Uri("<blobUriWithSasToken>"))
.ProtectKeysWithAzureKeyVault("<keyIdentifier>", "<clientId>", "<clientSecret>");
}
Mer information finns i Konfigurera ASP.NET Core Data Protection: ProtectKeysWithAzureKeyVault.
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:
public void ConfigureServices(IServiceCollection services)
{
// 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:
public void ConfigureServices(IServiceCollection services)
{
// 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 mellan datorerna och konfigurera värdbaserade appar att använda certifikatet för kryptering av nycklar i vila:
public void ConfigureServices(IServiceCollection services)
{
services.AddDataProtection()
.ProtectKeysWithCertificate("3BCE558E2AD3E0E34A7743EAB5AEA2A9BD2575A0");
}
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:THUMBPRINT", där TUMAVTRYCK är det hexkodade SHA1-tumavtrycket för certifikatet:
public void ConfigureServices(IServiceCollection services)
{
services.AddDataProtection()
.ProtectKeysWithDpapiNG("CERTIFICATE=HashId:3BCE558E2...B5AEA2A9BD2575A0",
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.
ASP.NET Core