ASP.NET Core Data Protection поставщик межплатформенного шифрования - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь использовать ядро ​​asp.net DataProtectionProvider с одной базой данных, поддерживающей ферму серверов.У меня реализован IXmlRepository для магазина, и я успешно поставляю один и тот же сертификат на 2 машины, на которых работает мой сервер.Я проверил, что я использую те же строки назначения в том же порядке, но когда я пытаюсь снять защиту со строки машины, которую кодирует машина a, я получаю общее исключение CryptographicException.

Будет ли иметь значение, если машинаа на машине б есть 2 разные операционные системы?(Linux против Windows Server)

Исключение, которое я получаю:

{System.Security.Cryptography.CryptographicException: исключение типа 'System.Security.Cryptography.CryptographicException'был брошен.на Microsoft.AspNetCore.Cryptography.UnsafeNativeMethods.ThrowExceptionForBCryptStatusImpl (Int32 NTSTATUS) при Microsoft.AspNetCore.Cryptography.UnsafeNativeMethods.ThrowExceptionForBCryptStatus (Int32 NTSTATUS) в Microsoft.AspNetCore.DataProtection.Cng.GcmAuthenticatedEncryptor.DecryptImpl (Байт * pbCiphertext, UInt32 cbCiphertext, Байт *pbAdditionalAuthenticatedData, UInt32 cbAdditionalAuthenticatedData)
в Microsoft.AspNetCore.DataProtection.Cng.Internal.CngAuthenticatedEncryptorBase.Decrypt (ArraySegment 1 ciphertext, ArraySegment 1 additionalAuthenticatedData) при Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.UnprotectCore (байт [] protectedData, булевы allowOperationsOnRevokedKeys, UnprotectStatus & status) в Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.DangerousUnprotect (Byte [] protectData, логическое игнорированиеRevocationErrors, логическое и требует миграции, логического и wasRevoked.ReyKate.DateBate.Cat.NET).Protector.Unprotect (Byte [] protectedData) в Microsoft.AspNetCore.DataProtection.DataProtectionCommonExtensions.Unprotect (IDataProtector protector, String protectedData)

1 Ответ

0 голосов
/ 02 октября 2018

Я обнаружил, что у провайдера есть имя папки для целей верхнего уровня.Я предполагаю, что это изолировать хранилище ключей при хранении в реестре.Решением было добавить к параметру конфигурации имя приложения, чтобы оно использовало его вместо папки, которая отличалась на двух разных компьютерах.

пример:

services.AddDataProtection()
                .UseCryptographicAlgorithms(new AuthenticatedEncryptorConfiguration()
                {
                    EncryptionAlgorithm = EncryptionAlgorithm.AES_256_GCM,
                    ValidationAlgorithm = ValidationAlgorithm.HMACSHA256
                })
                .SetApplicationName("MyCommonName");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...