ASP.NET Core kullanarak Windows ve Azure'da bekleme ASP.NET Core

Veri koruma sistemi, şifreleme anahtarlarının istirahatta nasıl şifrelenmeleri gerektiğini belirlemek için varsayılan olarak bir bulma mekanizması kullanır. Geliştirici bulma mekanizmasını geçersiz kılabilir ve anahtarların nasıl şifrelenmeleri gerektiğini el ile belirtebilir.

Uyarı

Açık bir anahtar kalıcılığı konumu belirtirsanız,veri koruma sistemi bekleme mekanizmasında varsayılan anahtar şifrelemesini kaydını geri verir. Sonuç olarak, anahtarlar artık istirahatta şifrelenmez. Üretim dağıtımları için açık bir anahtar şifreleme mekanizması belirtmenizi öneririz. Beklemede şifreleme mekanizması seçenekleri bu konuda açıklanmıştır.

Azure Key Vault

Anahtarları içinde depolamak Azure Key Vault,sınıfında ProtectKeysWithAzureKeyVault ile sistemi Startup yapılandırarak:

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

Daha fazla bilgi için bkz. ASP.NET Core Veri Korumasını Yapılandırma: ProtectKeysWithAzureKeyVault.

Windows Dpapı

Yalnızca dağıtımlar Windows geçerlidir.

DPAPI Windows, anahtar malzeme depolamada kalıcı hale gelmeden önce CryptProtectData ile şifrelenir. DPAPI, geçerli makine dışında hiç okunan veriler için uygun bir şifreleme mekanizmasıdır (bu anahtarları Active Directory'ye kadar desteklese de; Veri Koruma API'si (DPAPI)sorunlarını giderme bölümündeki DPAPI ve Dolaşım Profilleri bölümüne bakın). DPAPI beklemede anahtar şifrelemesini yapılandırmak için ProtectKeysWithDpapi uzantısı yöntemlerinden birini arayın:

public void ConfigureServices(IServiceCollection services)
{
    // Only the local user account can decrypt the keys
    services.AddDataProtection()
        .ProtectKeysWithDpapi();
}

parametresiz ProtectKeysWithDpapi çağrılırsa, yalnızca geçerli Windows hesabı kalıcı anahtar halkası şifresini çözebilir. İsteğe bağlı olarak, makinede herhangi bir kullanıcı hesabının (yalnızca geçerli kullanıcı hesabı değil) anahtar halkası deşifre İsteğe bağlı olarak belirtebilirsiniz:

public void ConfigureServices(IServiceCollection services)
{
    // All user accounts on the machine can decrypt the keys
    services.AddDataProtection()
        .ProtectKeysWithDpapi(protectToLocalMachine: true);
}

X.509 sertifikası

Uygulama birden çok makineye yayılmışsa, paylaşılan bir X.509 sertifikasını makineler arasında dağıtmak ve barındırılan uygulamaları, beklemede anahtarların şifrelemesi için sertifikayı kullanmak üzere yapılandırmak uygun olabilir:

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

Bu .NET Framework, yalnızca CAPI özel anahtarları olan sertifikalar de desteklemektedir. Bu sınırlamaların olası geçici çözümleri için aşağıdaki içeriğe bakın.

Windows DPAPI-NG

Bu mekanizma yalnızca Windows 8/Windows Server 2012 veya sonraki bir noktada kullanılabilir.

Bu Windows 8 işletim Windows DPAPI-NG'yi (CNG DPAPI olarak da adlandırılan) destekler. Daha fazla bilgi için bkz. CNG DPAPI hakkında.

Sorumlu bir koruma tanımlayıcısı kuralı olarak kodlanmış. ProtectKeysWithDpapiNGçağrısı yapılan aşağıdaki örnekte, yalnızca belirtilen SID'ye sahip etki alanına katılmış kullanıcı anahtar halkanın şifresini çözebilir:

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

ayrıca parametresiz bir aşırı yüklemesi de ProtectKeysWithDpapiNG vardır. "SID={CURRENT_ACCOUNT_SID}" kuralını belirtmek için bu kolaylık yöntemini kullanın; burada CURRENT_ACCOUNT_SID geçerli kullanıcı hesabının SID'Windows olur:

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

Bu senaryoda, AD etki alanı denetleyicisi DPAPI-NG işlemleri tarafından kullanılan şifreleme anahtarlarının dağıtılmasından sorumludur. Hedef kullanıcı, etki alanına katılmış herhangi bir makineden (işlem kendi kimliği altında çalışıyor olduğu şartıyla) şifrelenmiş yükün şifresini çözebilir.

WINDOWS DPAPI-NG ile sertifika tabanlı şifreleme

Uygulama Windows 8.1/Windows Server 2012 R2 veya sonraki bir Windows üzerinde çalışıyorsa, sertifika tabanlı şifreleme gerçekleştirmek için DPAPI-NG'yi kullanabilirsiniz. "CERTIFICATE=HashId:THUMBPRINT" kural tanımlayıcısı dizesini kullanın; burada THUMBPRINT, sertifikanın altılık kodlanmış SHA1 parmak izidir:

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

Anahtarların şifresini çözmek için bu depoya işaret eden tüm Windows 8.1/Windows Server 2012 R2 veya sonraki bir üzerinde çalışıyor olması gerekir.

Özel anahtar şifrelemesi

Kutu mekanizmaları uygunsa, geliştirici özel bir IXmlEncryptorsağlayarak kendi anahtar şifreleme mekanizmasını belirtebilir.