Delen via


Sleutelversleuteling-at-rest in Windows en Azure met behulp van ASP.NET Core

Het systeem voor gegevensbeveiliging maakt standaard gebruik van een detectiemechanisme om te bepalen hoe cryptografische sleutels in rust moeten worden versleuteld. De ontwikkelaar kan het detectiemechanisme overschrijven en handmatig opgeven hoe sleutels in rust moeten worden versleuteld.

Waarschuwing

Als u een expliciete locatie voor sleutelpersistentie opgeeft, wordt de registratie van het standaardsleutelversleutelings-at-rest-mechanisme door het gegevensbeveiligingssysteem opgeheven. Sleutels worden daarom niet langer in rust versleuteld. U wordt aangeraden een expliciet versleutelingsmechanisme op te geven voor productie-implementaties. De opties voor encryptie-in-rust worden beschreven in dit onderwerp.

Azure Key Vault

Zie ASP.NET Core Data Protection configurerenvoor meer informatie.

Windows DPAPI

geldt alleen voor Windows-implementaties.

Wanneer Windows DPAPI wordt gebruikt, wordt sleutelmateriaal versleuteld door middel van CryptProtectData- voordat het in de opslag wordt opgeslagen. DPAPI is een geschikt versleutelingsmechanisme voor gegevens die nooit buiten de huidige computer worden gelezen (hoewel het mogelijk is om back-ups te maken van deze sleutels naar Active Directory). Als u DPAPI-sleutel-at-rest-versleuteling wilt configureren, roept u een van de extensiemethoden ProtectKeysWithDpapi) aan:

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

Als ProtectKeysWithDpapi zonder parameters wordt aangeroepen, kan alleen het huidige Windows-gebruikersaccount de persistente sleutelring ontcijferen. U kunt eventueel opgeven dat elk gebruikersaccount op de computer (niet alleen het huidige gebruikersaccount) de sleutelring kan ontcijferen:

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

X.509-certificaat

Als de app is verdeeld over meerdere computers, is het wellicht handig om een gedeeld X.509-certificaat (.pfx indeling) over de computers te distribueren en de gehoste apps te configureren voor het gebruik van het certificaat voor versleuteling van sleutels in rust.

In het volgende voorbeeld wordt de vingerafdruk van het certificaat doorgegeven aan ProtectKeysWithCertificate:

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

In het volgende voorbeeld wordt een X509Certificate2 doorgegeven aan ProtectKeysWithCertificate:

var cert = new X509Certificate2(...);

services.AddDataProtection()
    .ProtectKeysWithCertificate(cert);

Als u het certificaat wilt maken, gebruikt u een van de volgende benaderingen of een ander geschikt hulpprogramma of een andere onlineservice:

Zie Zelfondertekende certificaten genereren met de .NET CLI voor meer informatie.

Vanwege beperkingen van .NET Framework worden alleen certificaten met persoonlijke CAPI-sleutels ondersteund. Zie de onderstaande inhoud voor mogelijke tijdelijke oplossingen voor deze beperkingen.

Windows DPAPI-NG

Dit mechanisme is alleen beschikbaar op Windows 8/Windows Server 2012 of hoger.

Vanaf Windows 8 ondersteunt het Windows-besturingssysteem DPAPI-NG (ook wel CNG DPAPI genoemd). Zie Over CNG DPAPIvoor meer informatie.

De principal wordt gecodeerd als een beveiligingsbeschrijvingsregel. In het volgende voorbeeld dat ProtectKeysWithDpapiNGaanroept, kan alleen de gebruiker die lid is van het domein met de opgegeven SID de sleutelring ontsleutelen:

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

Er is ook een parameterloze overbelasting van ProtectKeysWithDpapiNG. Gebruik deze handige methode om de regel 'SID={CURRENT_ACCOUNT_SID}' op te geven, waarbij CURRENT_ACCOUNT_SID de SID van het huidige Windows-gebruikersaccount is:

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

In dit scenario is de AD-domeincontroller verantwoordelijk voor het distribueren van de versleutelingssleutels die worden gebruikt door de DPAPI-NG bewerkingen. De doelgebruiker kan de versleutelde nettolading ontcijferen vanaf elke computer die lid is van een domein (mits het proces wordt uitgevoerd onder hun identiteit).

Versleuteling op basis van certificaten met Windows DPAPI-NG

Als de app wordt uitgevoerd op Windows 8.1/Windows Server 2012 R2 of hoger, kunt u Windows DPAPI-NG gebruiken om op certificaten gebaseerde versleuteling uit te voeren. Gebruik de regeldescriptortekenreeks "CERTIFICATE=HashId:{CERTIFICATE THUMBPRINT}", waarbij de {CERTIFICATE THUMBPRINT} tijdelijke aanduiding de hex-gecodeerde SHA1-vingerafdruk van het certificaat is:

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

Elke app die naar deze opslagplaats wijst, moet worden uitgevoerd op Windows 8.1/Windows Server 2012 R2 of hoger om de sleutels te ontcijferen.

Aangepaste sleutelversleuteling

Als de in-box-mechanismen niet geschikt zijn, kan de ontwikkelaar een eigen mechanisme voor sleutelversleuteling opgeven door een aangepaste IXmlEncryptorop te geven.