ASP.NET Core'da Veri Koruma anahtar yönetimi ve yaşam süresi
Gönderen Rick Anderson
Anahtar yönetimi
Uygulama, işletimsel ortamını algılamaya ve anahtar yapılandırmasını kendi başına işlemeye çalışır.
Uygulama Azure Uygulaması içinde barındırılıyorsa, anahtarlar %HOME%\ASP.NET\DataProtection-Keys klasöründe kalır. Bu klasör, ağ depolaması tarafından desteklenir ve uygulamayı barındıran tüm makineler arasında eşitlenir.
- Anahtarlar konumunda restkorunmaz.
- DataProtection-Keys klasörü, anahtar halkasını tek bir dağıtım yuvasındaki bir uygulamanın tüm örneklerine sağlar.
- Hazırlama ve Üretim gibi ayrı dağıtım yuvaları, bir anahtar kademeyi paylaşmaz. Dağıtım yuvaları arasında geçiş yaptığınızda (örneğin Hazırlamayı Üretim ortamına değiştirme veya A/B testi kullanma), Data Protection kullanan herhangi bir uygulama, önceki yuva içindeki anahtar halkasını kullanarak depolanan verilerin şifresini çözemez. Bu, kullanıcıların tanımlama bilgilerini korumak için Veri Koruması'nı kullandığından standart ASP.NET Core cookie kimlik doğrulamasını kullanan bir uygulamada oturumlarının kapatılmasını sağlar. Yuvadan bağımsız anahtar halkaları istiyorsanız Azure Blob Depolama, Azure Key Vault, SQL deposu veya Redis cache gibi bir dış anahtar halkası sağlayıcısı kullanın.
Kullanıcı profili kullanılabilir durumdaysa, anahtarlar %LOCALAPPDATA%\ASP.NET\DataProtection-Keys klasöründe kalır. İşletim sistemi Windows ise, anahtarlar DPAPI kullanılarak şifrelenir rest .
Uygulama havuzunun setProfileEnvironment özniteliği de etkinleştirilmelidir.
setProfileEnvironment
için varsayılan değertrue
değeridir. Bazı senaryolarda (örneğin Windows işletim sistemi)setProfileEnvironment
false
olarak ayarlanır. Anahtarlar beklendiği gibi kullanıcı profili dizininde depolanmıyorsa:- %windir%/system32/inetsrv/config klasörüne gidin.
- applicationHost.config dosyasını açın.
<system.applicationHost><applicationPools><applicationPoolDefaults><processModel>
öğesini bulun.- Varsayılan değeri
true
olansetProfileEnvironment
özniteliğinin mevcut olmadığını veya özniteliğin açıkçatrue
değerine ayarlanmadığını onaylayın.
Uygulama IIS'de barındırılıyorsa, anahtarlar HKLM kayıt defterinde yalnızca çalışan işlem hesabı için ACLed olan özel bir kayıt defteri anahtarında kalıcı hale getirilir. Anahtarlar DPAPI kullanılarak şifrelenir rest .
Bu koşullardan hiçbiri eşleşmiyorsa, anahtarlar geçerli işlemin dışında kalıcı olmaz. İşlem kapatıldığında, oluşturulan tüm anahtarlar kaybolur.
Geliştirici her zaman tam denetimdedir ve anahtarların nasıl ve nerede depolandığını geçersiz kılabilir. Yukarıdaki ilk üç seçenek, ASP.NET <machineKey> otomatik oluşturma yordamlarının geçmişte nasıl çalıştığına benzer çoğu uygulama için iyi varsayılanlar sağlamalıdır. Son, geri dönüş seçeneği, geliştiricinin anahtar kalıcılığı istemesi durumunda yapılandırmayı önceden belirtmesini gerektiren tek senaryodur, ancak bu geri dönüş yalnızca nadir durumlarda gerçekleşir.
Docker kapsayıcısında barındırılırken, anahtarlar Docker birimi olan bir klasörde (paylaşılan birim veya kapsayıcının ömrünü aşan konak bağlı bir birim) ya da Azure Key Vault veya Redis gibi bir dış sağlayıcıda kalıcı olmalıdır. Dış sağlayıcı, uygulamalar paylaşılan bir ağ birimine erişemiyorsa web grubu senaryolarında da yararlıdır (daha fazla bilgi için bkz . PersistKeysToFileSystem ).
Uyarı
Geliştirici yukarıda belirtilen kuralları geçersiz kılar ve Veri Koruma sistemini belirli bir anahtar deposuna işaret ederse, konumunda anahtarların rest otomatik olarak şifrelenmesini devre dışı bırakılır. At-protectionrest, yapılandırma aracılığıyla yeniden etkinleştirilebilir.
Anahtar ömrü
Anahtarların varsayılan olarak 90 günlük ömrü vardır. Bir anahtarın süresi dolduğunda uygulama otomatik olarak yeni bir anahtar oluşturur ve yeni anahtarı etkin anahtar olarak ayarlar. Kullanımdan kaldırılacak anahtarlar sistemde kaldığı sürece, uygulamanız bunlarla korunan tüm verilerin şifresini çözebilir. Daha fazla bilgi için bkz . anahtar yönetimi .
Varsayılan algoritmalar
Kullanılan varsayılan yük koruma algoritması, gizlilik için AES-256-CBC ve kimlik doğrulaması için HMACSHA256. Her 90 günde bir değiştirilen 512 bit ana anahtar, bu algoritmalar için kullanılan iki alt anahtarı yük temelinde türetmek için kullanılır. Daha fazla bilgi için bkz . alt anahtar türetme .
Anahtarları silme
Anahtarın silinmesi, korunan verilerine kalıcı olarak erişilemez hale gelir. Bu riski azaltmak için anahtarları silmemenizi öneririz. Sonuçta elde edilen anahtarların birikmesi genellikle küçük oldukları için çok az etkiye sahiptir. Son derece uzun süre çalışan hizmetler gibi istisnai durumlarda anahtarlar silinebilir. Yalnızca silme anahtarları:
- Bunlar eski (artık kullanımda değil).
- Depolama tasarrufu karşılığında veri kaybı riskini kabul edebilirsiniz.
Veri koruma anahtarlarını silmemenizi öneririz.
using Microsoft.AspNetCore.DataProtection.KeyManagement;
var services = new ServiceCollection();
services.AddDataProtection();
var serviceProvider = services.BuildServiceProvider();
var keyManager = serviceProvider.GetService<IKeyManager>();
if (keyManager is IDeletableKeyManager deletableKeyManager)
{
var utcNow = DateTimeOffset.UtcNow;
var yearAgo = utcNow.AddYears(-1);
if (!deletableKeyManager.DeleteKeys(key => key.ExpirationDate < yearAgo))
{
Console.WriteLine("Failed to delete keys.");
}
else
{
Console.WriteLine("Old keys deleted successfully.");
}
}
else
{
Console.WriteLine("Key manager does not support deletion.");
}
Ek kaynaklar
Anahtar yönetimi
Uygulama, işletimsel ortamını algılamaya ve anahtar yapılandırmasını kendi başına işlemeye çalışır.
Uygulama Azure Uygulaması içinde barındırılıyorsa, anahtarlar %HOME%\ASP.NET\DataProtection-Keys klasöründe kalır. Bu klasör, ağ depolaması tarafından desteklenir ve uygulamayı barındıran tüm makineler arasında eşitlenir.
- Anahtarlar konumunda restkorunmaz.
- DataProtection-Keys klasörü, anahtar halkasını tek bir dağıtım yuvasındaki bir uygulamanın tüm örneklerine sağlar.
- Hazırlama ve Üretim gibi ayrı dağıtım yuvaları, bir anahtar kademeyi paylaşmaz. Dağıtım yuvaları arasında geçiş yaptığınızda (örneğin Hazırlamayı Üretim ortamına değiştirme veya A/B testi kullanma), Data Protection kullanan herhangi bir uygulama, önceki yuva içindeki anahtar halkasını kullanarak depolanan verilerin şifresini çözemez. Bu, kullanıcıların tanımlama bilgilerini korumak için Veri Koruması'nı kullandığından standart ASP.NET Core cookie kimlik doğrulamasını kullanan bir uygulamada oturumlarının kapatılmasını sağlar. Yuvadan bağımsız anahtar halkaları istiyorsanız Azure Blob Depolama, Azure Key Vault, SQL deposu veya Redis cache gibi bir dış anahtar halkası sağlayıcısı kullanın.
Kullanıcı profili kullanılabilir durumdaysa, anahtarlar %LOCALAPPDATA%\ASP.NET\DataProtection-Keys klasöründe kalır. İşletim sistemi Windows ise, anahtarlar DPAPI kullanılarak şifrelenir rest .
Uygulama havuzunun setProfileEnvironment özniteliği de etkinleştirilmelidir.
setProfileEnvironment
için varsayılan değertrue
değeridir. Bazı senaryolarda (örneğin Windows işletim sistemi)setProfileEnvironment
false
olarak ayarlanır. Anahtarlar beklendiği gibi kullanıcı profili dizininde depolanmıyorsa:- %windir%/system32/inetsrv/config klasörüne gidin.
- applicationHost.config dosyasını açın.
<system.applicationHost><applicationPools><applicationPoolDefaults><processModel>
öğesini bulun.- Varsayılan değeri
true
olansetProfileEnvironment
özniteliğinin mevcut olmadığını veya özniteliğin açıkçatrue
değerine ayarlanmadığını onaylayın.
Uygulama IIS'de barındırılıyorsa, anahtarlar HKLM kayıt defterinde yalnızca çalışan işlem hesabı için ACLed olan özel bir kayıt defteri anahtarında kalıcı hale getirilir. Anahtarlar DPAPI kullanılarak şifrelenir rest .
Bu koşullardan hiçbiri eşleşmiyorsa, anahtarlar geçerli işlemin dışında kalıcı olmaz. İşlem kapatıldığında, oluşturulan tüm anahtarlar kaybolur.
Geliştirici her zaman tam denetimdedir ve anahtarların nasıl ve nerede depolandığını geçersiz kılabilir. Yukarıdaki ilk üç seçenek, ASP.NET <machineKey> otomatik oluşturma yordamlarının geçmişte nasıl çalıştığına benzer çoğu uygulama için iyi varsayılanlar sağlamalıdır. Son, geri dönüş seçeneği, geliştiricinin anahtar kalıcılığı istemesi durumunda yapılandırmayı önceden belirtmesini gerektiren tek senaryodur, ancak bu geri dönüş yalnızca nadir durumlarda gerçekleşir.
Docker kapsayıcısında barındırılırken, anahtarlar Docker birimi olan bir klasörde (paylaşılan birim veya kapsayıcının ömrünü aşan konak bağlı bir birim) ya da Azure Key Vault veya Redis gibi bir dış sağlayıcıda kalıcı olmalıdır. Dış sağlayıcı, uygulamalar paylaşılan bir ağ birimine erişemiyorsa web grubu senaryolarında da yararlıdır (daha fazla bilgi için bkz . PersistKeysToFileSystem ).
Uyarı
Geliştirici yukarıda belirtilen kuralları geçersiz kılar ve Veri Koruma sistemini belirli bir anahtar deposuna işaret ederse, konumunda anahtarların rest otomatik olarak şifrelenmesini devre dışı bırakılır. At-protectionrest, yapılandırma aracılığıyla yeniden etkinleştirilebilir.
Anahtar ömrü
Anahtarların varsayılan olarak 90 günlük ömrü vardır. Bir anahtarın süresi dolduğunda uygulama otomatik olarak yeni bir anahtar oluşturur ve yeni anahtarı etkin anahtar olarak ayarlar. Kullanımdan kaldırılacak anahtarlar sistemde kaldığı sürece, uygulamanız bunlarla korunan tüm verilerin şifresini çözebilir. Daha fazla bilgi için bkz . anahtar yönetimi .
Varsayılan algoritmalar
Kullanılan varsayılan yük koruma algoritması, gizlilik için AES-256-CBC ve kimlik doğrulaması için HMACSHA256. Her 90 günde bir değiştirilen 512 bit ana anahtar, bu algoritmalar için kullanılan iki alt anahtarı yük temelinde türetmek için kullanılır. Daha fazla bilgi için bkz . alt anahtar türetme .
Ek kaynaklar
ASP.NET Core