ASP.NET Core veri korumasını yapılandırma

Veri koruma sistemi başlatıldığında, işletimsel ortama göre varsayılan ayarları uygular. Bu ayarlar, genellikle tek bir makinede çalışan uygulamalar için uygundur. Bir geliştiricinin varsayılan ayarları değiştirmek isteyebileceğiniz durumlar vardır:

  • Uygulama birden çok makineye yayılır.
  • Uyumluluk nedenleriyle.

Bu senaryolar için veri koruma sistemi, zengin bir yapılandırma API 'SI sunar.

Uyarı

Yapılandırma dosyalarına benzer şekilde, veri koruma anahtarı halkası uygun izinler kullanılarak korunmalıdır. Rest 'de anahtarları şifrelemeyi seçebilirsiniz, ancak bu, saldırganların yeni anahtar oluşturmasını engellemez. Sonuç olarak, uygulamanızın güvenliği etkilenir. Veri koruma ile yapılandırılan depolama konumu, yapılandırma dosyalarını korumanıza benzer şekilde uygulamanın kendisiyle sınırlı olmalıdır. Örneğin, anahtar halkasını diskte depolamayı seçerseniz, dosya sistemi izinleri ' ni kullanın. Yalnızca Web uygulamanızın çalıştırıldığı kimliğin bu dizine okuma, yazma ve oluşturma erişimi olduğundan emin olun. Azure blob Depolama kullanıyorsanız, yalnızca web uygulamasının Blob deposunda vb. gibi okuma, yazma veya yeni girişleri oluşturma özelliği olmalıdır.

Adddataprotection genişletme yöntemi bir ıdataprotectionbuilderdöndürür. IDataProtectionBuilder Veri koruma seçeneklerini yapılandırmak için birlikte zincirleyebilirsiniz uzantı yöntemleri sunar.

bu makalede kullanılan veri koruma uzantıları için aşağıdaki NuGet paketleri gereklidir:

ProtectKeysWithAzureKeyVault

CLı kullanarak Azure 'da oturum açın, örneğin:

az login

Anahtarları Azure Key Vaultiçinde depolamak için, sınıfı içinde ProtectKeysWithAzureKeyVault ile yapılandırın Startup . blobUriWithSasToken , anahtar dosyasının depolanması gereken tam URI 'dir. URI, bir sorgu dizesi parametresi olarak SAS belirtecini içermelidir:

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

Anahtar halka depolama konumunu ayarlayın (örneğin, PersistKeysToAzureBlobStorage). Çağırma, ProtectKeysWithAzureKeyVault anahtar halka depolama konumu da dahil olmak üzere otomatik veri koruma ayarlarını devre dışı bırakan bir ıxmlencryptor uyguladığından, konum ayarlanmalıdır. yukarıdaki örnekte, anahtar halkasını sürdürmek için Azure Blob Depolama kullanılmaktadır. daha fazla bilgi için bkz. anahtar depolama sağlayıcıları: Azure Depolama. Ayrıca, Persistkeystofilesystemile anahtar halkasını yerel olarak kalıcı hale getirebilirsiniz.

keyIdentifierAnahtar şifreleme için kullanılan Anahtar Kasası anahtar tanımlayıcısıdır. Örneğin, içinde adlı anahtar kasasında oluşturulan bir anahtarın dataprotection contosokeyvault anahtar tanımlayıcısı vardır https://contosokeyvault.vault.azure.net/keys/dataprotection/ . Anahtar Kasası için anahtar sarmalama ve sarmalama anahtarı izinlerini içeren uygulamayı belirtin.

ProtectKeysWithAzureKeyVault kullanabilen

uygulama, Microsoft.AspNetCore.DataProtection.AzureStorage Microsoft.AspNetCore.DataProtection.AzureKeyVault anahtarları depolamak ve korumak için önceki Azure paketlerini (ve) ve Azure Key Vault ve Azure Depolama birleşimini kullanıyorsa, System.UriFormatException anahtar depolaması blobu yoksa oluşturulur. Blob Azure portal uygulamayı çalıştırmadan önce el ile oluşturulabilir veya aşağıdaki yordamı kullanabilirsiniz:

  1. ProtectKeysWithAzureKeyVaultBLOB 'u yerinde oluşturmak için ilk çalıştırmaya yönelik çağrıyı kaldırın.
  2. ProtectKeysWithAzureKeyVaultSonraki çalıştırmalar için çağrısını ekleyin.

ProtectKeysWithAzureKeyVaultDosyanın uygun şema ve değerlerle oluşturulduğundan emin olmak için ilk çalıştırma için kaldırma işlemi önerilir.

Azure. Extensions. aspnetcore. DataProtection. Blobları ve Azure. Extensions. Aspnetcore. DataProtection. Keys paketlerine YÜKSELTMENIZ önerilir, çünkü API, mevcut değilse blob otomatik olarak oluşturur.

services.AddDataProtection()
    //This blob must already exist before the application is run
    .PersistKeysToAzureBlobStorage("<storage account connection string", "<key store container name>", "<key store blob name>")
    //Removing this line below for an initial run will ensure the file is created correctly
    .ProtectKeysWithAzureKeyVault(new Uri("<keyIdentifier>"), new DefaultAzureCredential());

PersistKeysToFileSystem

Anahtarları % LocalAppData% varsayılan konumu yerıne bir UNC paylaşımında depolamak için, sistemi Persistkeystofilesystemile yapılandırın:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection()
        .PersistKeysToFileSystem(new DirectoryInfo(@"\\server\share\directory\"));
}

Uyarı

Anahtar Kalıcılık konumunu değiştirirseniz, DPAPI 'nın uygun bir şifreleme mekanizması olup olmadığını bilmez olmadığından, sistem artık, bekleyen anahtarları otomatik olarak şifreler.

PersistKeysToDbContext

Anahtarları EntityFramework kullanarak bir veritabanında depolamak için, sistemi Microsoft. AspNetCore. DataProtection. EntityFrameworkCore paketiyle yapılandırın:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection()
        .PersistKeysToDbContext<DbContext>()
}

Yukarıdaki kod, anahtarları yapılandırılan veritabanına depolar. Kullanılan veritabanı bağlamının uygulanması gerekir IDataProtectionKeyContext . IDataProtectionKeyContext özelliği gösterir DataProtectionKeys

public DbSet<DataProtectionKey> DataProtectionKeys { get; set; }

Bu özellik, anahtarların depolandığı tabloyu temsil eder. Tabloyu el ile veya DbContext geçişlerle oluşturun. Daha fazla bilgi edinmek için bkz. DataProtectionKey.

ProtectKeysWith*

Sistemi, ProtectKeysWith * Yapılandırma API 'lerinden herhangi birini çağırarak, bekleyen anahtarları koruyacak şekilde yapılandırabilirsiniz. Anahtarları bir UNC paylaşımında depolayan ve bu anahtarları belirli bir X. 509.952 sertifikasıyla bekleyen bir şekilde şifreleyen aşağıdaki örneği göz önünde bulundurun:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection()
        .PersistKeysToFileSystem(new DirectoryInfo(@"\\server\share\directory\"))
        .ProtectKeysWithCertificate(Configuration["Thumbprint"]);
}

ASP.NET Core 2,1 veya üzeri sürümlerde, bir dosyadan yüklenen sertifika gibi bir X509Certificate2 için ProtectKeysWithCertificatesağlayabilirsiniz:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection()
        .PersistKeysToFileSystem(new DirectoryInfo(@"\\server\share\directory\"))
        .ProtectKeysWithCertificate(
            new X509Certificate2("certificate.pfx", Configuration["Thumbprint"]));
}

Yerleşik anahtar şifreleme mekanizmalarından daha fazla örnek ve tartışma için bkz. rest 'de anahtar şifreleme .

UnprotectKeysWithAnyCertificate

ASP.NET Core 2,1 veya sonraki sürümlerde, UnprotectKeysWithAnyCertificateile X509Certificate2 sertifikaları dizisini kullanarak sertifikaları döndürebilir ve anahtarların şifrelerini çözebilirsiniz:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection()
        .PersistKeysToFileSystem(new DirectoryInfo(@"\\server\share\directory\"))
        .ProtectKeysWithCertificate(
            new X509Certificate2("certificate.pfx", Configuration["MyPasswordKey"));
        .UnprotectKeysWithAnyCertificate(
            new X509Certificate2("certificate_old_1.pfx", Configuration["MyPasswordKey_1"]),
            new X509Certificate2("certificate_old_2.pfx", Configuration["MyPasswordKey_2"]));
}

SetDefaultKeyLifetime

Sistemi varsayılan 90 gün yerine 14 günlük bir anahtar yaşam süresi kullanacak şekilde yapılandırmak için Setdefaultkeylifetimekullanın:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection()
        .SetDefaultKeyLifetime(TimeSpan.FromDays(14));
}

SetApplicationName

Varsayılan olarak, veri koruma sistemi, aynı fiziksel anahtar deposunu paylaşsalar bile, uygulamaları içerik kök yollarına göre birbirinden yalıtır. Bu, uygulamaların birbirlerinin korunan yüklerini anlamasına engel olur.

Korumalı yükleri uygulamalar arasında paylaşmak için:

  • SetApplicationNameAynı değere sahip her bir uygulamada yapılandırın.
  • Uygulamalar genelinde veri koruma API yığınının aynı sürümünü kullanın. Uygulamaların proje dosyalarında aşağıdakilerden birini yapın:
public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection()
        .SetApplicationName("shared app name");
}

DisableAutomaticKeyGeneration

Süre sonu yaklaşımında bir uygulamanın anahtarları otomatik olarak (yeni anahtar oluştur) oluşturmasını istemediğiniz bir senaryoya sahip olabilirsiniz. Bunun bir örneği, birincil/ikincil ilişkide ayarlanmış uygulamalar olabilir; burada yalnızca birincil uygulama önemli yönetim kaygılarıyla sorumludur ve ikincil uygulamalar yalnızca bir anahtar halkasının Salt okunabilir bir görünümüne sahip olur. İkincil uygulamalar, sistemi ile yapılandırarak anahtar halkasını salt okuma olarak işleyecek şekilde yapılandırılabilir DisableAutomaticKeyGeneration :

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection()
        .DisableAutomaticKeyGeneration();
}

Uygulama başına yalıtım

veri koruma sistemi bir ASP.NET Core ana bilgisayar tarafından sağlandığında, bu uygulamalar aynı çalışan işlemi hesabı altında çalışıyor ve aynı ana anahtarlama malzemesini kullanıyor olsa bile, uygulamaları otomatik olarak birbirinden yalıtır. Bu, System. Web 'in öğesinden ısoteapps değiştiricisine biraz benzer <machineKey> .

Yalıtım mekanizması, yerel makinedeki her uygulamayı benzersiz bir kiracı olarak düşünürken çalışarak, IDataProtector belirli bir uygulama için kök olarak uygulama kimliğini Ayrıştırıcı olarak dahil eder. Uygulamanın benzersiz KIMLIĞI uygulamanın fiziksel yoludur:

  • IIS 'de barındırılan uygulamalar için benzersiz KIMLIK, uygulamanın IIS fiziksel yoludur. Bir uygulama bir Web grubu ortamında dağıtılırsa, bu değer, IIS ortamlarının Web grubundaki tüm makinelerde benzer şekilde yapılandırıldığından kararlı bir şekilde yapılır.
  • Kestrel Sunucudaçalışan şirket içinde barındırılan uygulamalar için benzersiz kimlik, diskteki uygulamanın fiziksel yoludur.

Benzersiz tanımlayıcı, — her iki uygulamayı ve makinenin kendisini sıfırlamaları için tasarlanmıştır.

Bu yalıtım mekanizması, uygulamaların kötü amaçlı olmayan olduğunu varsayar. Kötü amaçlı bir uygulama, aynı çalışan işlem hesabı altında çalışan diğer uygulamaları her zaman etkileyebilir. Uygulamaların birbirini dışlayan bir paylaşılan barındırma ortamında, barındırma sağlayıcısı, uygulamaların temel alınan anahtar depolarını ayırmak dahil olmak üzere uygulamalar arasında işletim sistemi düzeyinde yalıtımlarını sağlamak için gerekli adımları almalıdır.

veri koruma sistemi bir ASP.NET Core ana bilgisayar tarafından sağlanmazsa (örneğin, somut tür aracılığıyla örneğini oluşturursanız DataProtectionProvider ), uygulama yalıtımı varsayılan olarak devre dışıdır. Uygulama yalıtımı devre dışı bırakıldığında, aynı anahtarlama malzemesi tarafından desteklenen tüm uygulamalar, uygun amaçlarısağladıkları sürece yükleri paylaşabilir. Bu ortamda uygulama yalıtımı sağlamak için, yapılandırma nesnesinde Setapplicationname metodunu çağırın ve her bir uygulama için benzersiz bir ad sağlayın.

Veri koruma ve uygulama yalıtımı

Uygulama yalıtımı için aşağıdakileri göz önünde bulundurun:

  • Birden çok uygulama aynı anahtar deposuna işaret edildiğinde, uygulamalar aynı ana anahtar malzemesini paylaşmalıdır. Veri koruma, anahtar halkasını paylaşan tüm uygulamaların o anahtar halkasının tüm öğelerine erişebileceği varsayımıyla geliştirilmiştir. Uygulamanın benzersiz tanımlayıcısı, anahtar halkası tarafından belirtilen anahtarlardan türetilmiş uygulamaya özel anahtarları yalıtmak için kullanılır. Ek yalıtımı zorlamak için Azure Keykasası tarafından sağlananlar gibi, öğe düzeyi izinleri beklemez. Öğe düzeyi izinlerinin denenmesinin uygulama hataları oluşturur. Yerleşik uygulama yalıtımına bağlı olmak istemiyorsanız, ayrı anahtar depolama konumlarının kullanılması ve uygulamalar arasında paylaşılmaması gerekir.

  • Uygulama ayrıştırıcı, farklı uygulamaların aynı ana anahtar malzemesini paylaşmasına izin vermek, ancak şifreli yüklerini birbirinden farklı tutmak için kullanılır. Uygulamaların birbirlerine ait şifreleme yüklerini okuyabilmesi için aynı uygulama Ayrıştırıcıyı kullanmaları gerekir.

  • Bir uygulamanın güvenliği tehlikeye atılırsa (örneğin, bir RCE saldırılarına karşı), bu uygulama için erişilebilir olan tüm ana anahtar malzemeleri, bekleyen koruma durumuna bakılmaksızın güvenliği tehlikeye önünde bulundurulmalıdır. Bu, farklı uygulama ayırt leyicileri kullansalar bile iki uygulama aynı depoya işaret alıyorsa, birinin güvenliğinin tehlikeye girmesi her ikisinin tehlikeye aşılabilmesine neden olur.

    İki uygulama, bekleyen anahtar koruması için farklı mekanizmalar kullanıyor olsa da, bu "her iki işlev için bir tehlikeye aşmaya eşdeğer" işlevi barındırır. Bu, genellikle beklenen bir yapılandırma değildir. Rest koruma mekanizması, depoda bir duyun, depoya yönelik okuma erişimi sağlamasına karşı koruma sağlamaya yöneliktir. Depoya yazma erişimi sağlayan bir saldırgan (Belki de bir uygulama içinde kod yürütme iznini elde ettikleri için) depolamaya kötü amaçlı anahtarlar ekleyebildiğinden. Veri koruma sistemi kasıtlı olarak, anahtar deposuna yazma erişimi sağlayan bir saldırgan için koruma sağlamaz.

  • Uygulamaların bir diğerinden gerçekten yalıtılmış kalması gerekiyorsa, farklı anahtar depoları kullanmaları gerekir. Bu, doğal olarak "yalıtılmış" tanımından geçmez. Her birinin veri depoları için okuma ve yazma erişimi varsa, uygulamalar yalıtılmaz .

Usecryptographicalgoritmalarıyla algoritmaları değiştirme

Veri koruma yığını, yeni oluşturulan anahtarlar tarafından kullanılan varsayılan algoritmayı değiştirmenize izin verir. Bunu yapmanın en kolay yolu, yapılandırma geri çağrısından Usecryptographicalgoritmaların çağırmasıdır:

services.AddDataProtection()
    .UseCryptographicAlgorithms(
        new AuthenticatedEncryptorConfiguration()
    {
        EncryptionAlgorithm = EncryptionAlgorithm.AES_256_CBC,
        ValidationAlgorithm = ValidationAlgorithm.HMACSHA256
    });
services.AddDataProtection()
    .UseCryptographicAlgorithms(
        new AuthenticatedEncryptionSettings()
    {
        EncryptionAlgorithm = EncryptionAlgorithm.AES_256_CBC,
        ValidationAlgorithm = ValidationAlgorithm.HMACSHA256
    });

Varsayılan EncryptionAlgorithm AES-256-CBC, varsayılan ValidationAlgorithm ise HMACSHA256. Varsayılan ilke, bir sistem yöneticisi tarafından makine genelindeki bir ilkearacılığıyla ayarlanabilir, ancak açık bir çağrı UseCryptographicAlgorithms varsayılan ilkeyi geçersiz kılar.

Çağırma UseCryptographicAlgorithms , önceden tanımlanmış bir yerleşik listeden istenen algoritmayı belirtmenize olanak tanır. Algoritmanın uygulanması konusunda endişelenmeniz gerekmez. Yukarıdaki senaryoda, veri koruma sistemi Windows üzerinde çalışıyorsa AES 'nin CNG uygulamasını kullanmaya çalışır. Aksi takdirde, yönetilen System. Security. Cryptography. AES sınıfına geri döner.

Bir uygulamayı Usecustomccryptotographicalgoritmalarınabir çağrı yoluyla el ile belirtebilirsiniz.

İpucu

Algoritmaların değiştirilmesi, anahtar halkasının varolan anahtarlarını etkilemez. Yalnızca yeni oluşturulan anahtarları etkiler.

Özel yönetilen algoritmaları belirtme

Özel yönetilen algoritmaları belirtmek için, uygulama türlerini işaret eden bir Managedadıbir Catedencryptorconfiguration örneği oluşturun:

serviceCollection.AddDataProtection()
    .UseCustomCryptographicAlgorithms(
        new ManagedAuthenticatedEncryptorConfiguration()
    {
        // A type that subclasses SymmetricAlgorithm
        EncryptionAlgorithmType = typeof(Aes),

        // Specified in bits
        EncryptionAlgorithmKeySize = 256,

        // A type that subclasses KeyedHashAlgorithm
        ValidationAlgorithmType = typeof(HMACSHA256)
    });

Özel yönetilen algoritmaları belirtmek için, uygulama türlerini işaret eden bir Managedavılationcatedencryptionsettings örneği oluşturun:

serviceCollection.AddDataProtection()
    .UseCustomCryptographicAlgorithms(
        new ManagedAuthenticatedEncryptionSettings()
    {
        // A type that subclasses SymmetricAlgorithm
        EncryptionAlgorithmType = typeof(Aes),

        // Specified in bits
        EncryptionAlgorithmKeySize = 256,

        // A type that subclasses KeyedHashAlgorithm
        ValidationAlgorithmType = typeof(HMACSHA256)
    });

Genellikle * tür özelliklerinin simetrik , instantiable (Ortak parametresiz ctor aracılığıyla) sağlaması gerekir, ancak sistem özel durumları, kolaylık sağlamak gibi bazı değerler sağlar typeof(Aes) .

Not

SymmetricAlgorithm, ≥ 128 bitlerinin anahtar uzunluğuna ve ≥ 64 bit blok boyutuna sahip olmalıdır ve PKCS #7 dolgusu ile CBC modunda şifrelemeyi desteklemelidir. KeyedHashAlgorithm >= 128 bitlik bir Özet boyutuna sahip olmalıdır ve karma algoritmanın Özet uzunluğuna eşit olan anahtarların uzunluğunu desteklemelidir. KeyedHashAlgorithm, HMAC için kesinlikle gerekli değildir.

özel Windows CNG algoritmaları belirtme

HMAC doğrulama ile CBC modunda şifreleme kullanarak özel bir Windows CNG algoritması belirtmek için, algoritmik bilgilerini içeren bir cngcbcauthenticatedencryptorconfiguration örneği oluşturun:

services.AddDataProtection()
    .UseCustomCryptographicAlgorithms(
        new CngCbcAuthenticatedEncryptorConfiguration()
    {
        // Passed to BCryptOpenAlgorithmProvider
        EncryptionAlgorithm = "AES",
        EncryptionAlgorithmProvider = null,

        // Specified in bits
        EncryptionAlgorithmKeySize = 256,

        // Passed to BCryptOpenAlgorithmProvider
        HashAlgorithm = "SHA256",
        HashAlgorithmProvider = null
    });

HMAC doğrulaması ile CBC modunda şifreleme kullanarak özel bir Windows CNG algoritması belirtmek için, algoritmik bilgilerini içeren bir cngcbcauthenticatedencryptionsettings örneği oluşturun:

services.AddDataProtection()
    .UseCustomCryptographicAlgorithms(
        new CngCbcAuthenticatedEncryptionSettings()
    {
        // Passed to BCryptOpenAlgorithmProvider
        EncryptionAlgorithm = "AES",
        EncryptionAlgorithmProvider = null,

        // Specified in bits
        EncryptionAlgorithmKeySize = 256,

        // Passed to BCryptOpenAlgorithmProvider
        HashAlgorithm = "SHA256",
        HashAlgorithmProvider = null
    });

Not

Simetrik blok şifreleme algoritmasının anahtar uzunluğu >= 128 bit, >= 64 bit blok boyutunda olmalıdır ve PKCS #7 dolgusu ile CBC modunda şifrelemeyi desteklemesi gerekir. Karma algoritmasının >= 128 bitlik bir Özet boyutu olmalıdır ve BCRYPT _ alg _ tanıtıcısı _ HMAC _ bayrağı bayrağıyla açılmakta olması gerekir. *Sağlayıcı özellikleri, belirtilen algoritma için varsayılan sağlayıcıyı kullanmak üzere null olarak ayarlanabilir. Daha fazla bilgi için BCryptOpenAlgorithmProvider belgelerine bakın.

doğrulama ile galoa/sayaç modu şifrelemesini kullanarak özel bir Windows CNG algoritması belirtmek için, algoritmik bilgilerini içeren bir cnggcmagıncatedencryptorconfiguration örneği oluşturun:

services.AddDataProtection()
    .UseCustomCryptographicAlgorithms(
        new CngGcmAuthenticatedEncryptorConfiguration()
    {
        // Passed to BCryptOpenAlgorithmProvider
        EncryptionAlgorithm = "AES",
        EncryptionAlgorithmProvider = null,

        // Specified in bits
        EncryptionAlgorithmKeySize = 256
    });

doğrulama ile galoa/sayaç modu şifrelemesini kullanarak özel bir Windows CNG algoritması belirtmek için, algoritmik bilgilerini içeren bir cnggcmagıncatedencryptionsettings örneği oluşturun:

services.AddDataProtection()
    .UseCustomCryptographicAlgorithms(
        new CngGcmAuthenticatedEncryptionSettings()
    {
        // Passed to BCryptOpenAlgorithmProvider
        EncryptionAlgorithm = "AES",
        EncryptionAlgorithmProvider = null,

        // Specified in bits
        EncryptionAlgorithmKeySize = 256
    });

Not

Simetrik blok şifreleme algoritmasının anahtar uzunluğu >= 128 bit, tam olarak 128 bit blok boyutu ve GCM şifrelemesini desteklemesi gerekir. EncryptionAlgorithmProvider özelliğini, belirtilen algoritma için varsayılan sağlayıcıyı kullanacak şekilde null olarak ayarlayabilirsiniz. Daha fazla bilgi için BCryptOpenAlgorithmProvider belgelerine bakın.

Diğer özel algoritmaları belirtme

Birinci sınıf bir API olarak gösterilmese de, veri koruma sistemi neredeyse her türlü algoritmanın belirtilmesine izin verecek kadar genişletilebilir. Örneğin, bir donanım güvenlik modülü (HSM) içinde yer alan tüm anahtarları tutmak ve çekirdek şifreleme ve şifre çözme yordamlarının özel bir uygulamasını sağlamak mümkündür. Daha fazla bilgi için bkz. çekirdek şifreleme genişletilebilirliği Içindeki ıauthenticatedencryptor .

Docker kapsayıcısında barındırırken kalıcı anahtarlar

Bir Docker kapsayıcısında barındırırken anahtarların şu şekilde tutulması gerekir:

  • Paylaşılan bir birim veya ana bilgisayar ile takılan bir birim gibi kapsayıcının yaşam süresinden sonra devam eden bir Docker birimi olan bir klasör.
  • Azure Blob Depolama ( ProtectKeysWithAzureKeyVault bölümünde gösterilir) veya redingibi bir dış sağlayıcı.

Redsıs ile kalıcı anahtarlar

Anahtarları depolamak için yalnızca redsıs veri kalıcılığını destekleyen redsıs sürümleri kullanılmalıdır. Azure Blob depolama kalıcıdır ve anahtarları depolamak için kullanılabilir. daha fazla bilgi için bu GitHub sorunabakın.

Veri korumayı günlüğe kaydetme

InformationTanılama sorununa yardımcı olması Için DataProtection 'ın düzeyinde günlüğe kaydedilmesini etkinleştirin. Aşağıdaki appsetting.js dosya VERI koruma API 'sinin günlüğe kaydedilmesini mümkün değildir:

{
  "Logging": {
    "LogLevel": {
      "Microsoft.AspNetCore.DataProtection": "Information"
    }
  }
}

Günlüğe kaydetme hakkında daha fazla bilgi için bkz. .NET Core 'Da günlüğe kaydetme ve ASP.NET Core.

Ek kaynaklar