ASP.NET Core kullanarak Windows ve Azure'da anahtar şifreleme rest
Veri koruma sistemi, şifreleme anahtarlarının adresinde restnasıl şifreleneceğini belirlemek için varsayılan olarak bir bulma mekanizması kullanır. Geliştirici bulma mekanizmasını geçersiz kılabilir ve anahtarların adresinde restnasıl şifreleneceğini el ile belirtebilir.
Uyarı
Açık bir anahtar kalıcılığı konumu belirtirseniz, veri koruma sistemi mekanizmada rest varsayılan anahtar şifrelemesinin kaydını alır. Sonuç olarak anahtarlar artık adresinde şifrelenmez rest. Üretim dağıtımları için açık bir anahtar şifreleme mekanizması belirtmenizi öneririz. rest Şifreleme mekanizması seçenekleri bu konu başlığında açıklanmıştır.
Azure Key Vault
Anahtarları Azure Key Vault'ta depolamak için sistemi sınıfında ile ProtectKeysWithAzureKeyVault Startup
yapılandırın:
public void ConfigureServices(IServiceCollection services)
{
services.AddDataProtection()
.PersistKeysToAzureBlobStorage(new Uri("<blobUriWithSasToken>"))
.ProtectKeysWithAzureKeyVault("<keyIdentifier>", "<clientId>", "<clientSecret>");
}
Daha fazla bilgi için bkz . ASP.NET Çekirdek Veri Korumasını Yapılandırma: ProtectKeysWithAzureKeyVault.
Windows DPAPI
Yalnızca Windows dağıtımları için geçerlidir.
Windows DPAPI kullanıldığında, anahtar malzeme depolamada kalıcı hale getirilmeden önce CryptProtectData ile şifrelenir. DPAPI, geçerli makinenin dışında hiç okunmayan veriler için uygun bir şifreleme mekanizmasıdır (ancak bu anahtarları Active Directory'ye yedeklemek mümkündür). DPAPI anahtar-at-rest şifrelemesini yapılandırmak için , ) uzantı yöntemlerinden birini çağırın ProtectKeysWithDpapi:
public void ConfigureServices(IServiceCollection services)
{
// Only the local user account can decrypt the keys
services.AddDataProtection()
.ProtectKeysWithDpapi();
}
Parametresiz çağrılırsa ProtectKeysWithDpapi
, kalıcı anahtar halkasını yalnızca geçerli Windows kullanıcı hesabı deşifre edebilir. İsteğe bağlı olarak makinedeki herhangi bir kullanıcı hesabının (yalnızca geçerli kullanıcı hesabının değil) anahtar halkasını deşifre edebilmesini 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ı konumunda restanahtarları şifrelemek için sertifikayı kullanacak şekilde yapılandırmak uygun olabilir:
public void ConfigureServices(IServiceCollection services)
{
services.AddDataProtection()
.ProtectKeysWithCertificate("3BCE558E2AD3E0E34A7743EAB5AEA2A9BD2575A0");
}
.NET Framework sınırlamaları nedeniyle yalnızca CAPI özel anahtarları olan sertifikalar desteklenir. Bu sınırlamalara yönelik olası geçici çözümler için aşağıdaki içeriğe bakın.
Windows DPAPI-NG
Bu mekanizma yalnızca Windows 8/Windows Server 2012 veya sonraki sürümlerde kullanılabilir.
Windows 8'den başlayarak, Windows işletim sistemi DPAPI-NG'yi (CNG DPAPI olarak da adlandırılır) destekler. Daha fazla bilgi için bkz . CNG DPAPI hakkında.
Sorumlu, bir koruma tanımlayıcı kuralı olarak kodlanır. çağıran ProtectKeysWithDpapiNGaşağıdaki örnekte anahtar halkasının şifresini yalnızca belirtilen SID'ye sahip etki alanına katılmış kullanıcı çö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);
}
parametresiz bir aşırı yükleme de vardır ProtectKeysWithDpapiNG
. "SID={CURRENT_ACCOUNT_SID}" kuralını belirtmek için bu kolaylık yöntemini kullanın; burada CURRENT_ACCOUNT_SID geçerli Windows kullanıcı hesabının SID değeridir:
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ı dağıtmaktan sorumludur. Hedef kullanıcı, etki alanına katılmış herhangi bir makineden şifrelenmiş yükü deşifre edebilir (işlemin kendi identityaltında çalışması koşuluyla).
Windows DPAPI-NG ile sertifika tabanlı şifreleme
Uygulama Windows 8.1/Windows Server 2012 R2 veya sonraki bir sürümde çalışıyorsa, sertifika tabanlı şifreleme gerçekleştirmek için Windows DPAPI-NG kullanabilirsiniz. "CERTIFICATE=HashId:THUMBPRINT" kural tanımlayıcı dizesini kullanın; burada THUMBPRINT , sertifikanın onaltılık kodlanmış SHA1 parmak izidir:
public void ConfigureServices(IServiceCollection services)
{
services.AddDataProtection()
.ProtectKeysWithDpapiNG("CERTIFICATE=HashId:3BCE558E2...B5AEA2A9BD2575A0",
flags: DpapiNGProtectionDescriptorFlags.None);
}
Anahtarların deşifre edilmesi için bu depoya işaret eden tüm uygulamalar Windows 8.1/Windows Server 2012 R2 veya sonraki sürümlerde çalışıyor olmalıdır.
Özel anahtar şifrelemesi
Yerleşik mekanizmalar uygun değilse, geliştirici özel IXmlEncryptorbir sağlayarak kendi anahtar şifreleme mekanizmasını belirtebilir.
ASP.NET Core