我正在尝试将asp.net核心DataProtectionProvider与支持服务器场的单个数据库一起使用 . 我为商店实现了一个IXmlRepository,并且我成功地为运行我的服务器的两台机器提供了相同的证书 . 我确认我在相同的顺序中使用相同的目的字符串,但是当我尝试从机器b取消保护机器编码的字符串时,我得到一个通用的CryptographicException .
如果机器a和机器b是2个不同的操作系统,这是否重要? (Linux vs Windows服务器)
我得到的例外是:
{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(BYTE * pbCiphertext,UInt32的cbCiphertext,BYTE * pbAdditionalAuthenticatedData,UInt32的cbAdditionalAuthenticatedData)在Microsoft.AspNetCore.DataProtection.Cng.Internal.CngAuthenticatedEncryptorBase.Decrypt(ArraySegment1密文,ArraySegment1 additionalAuthenticatedData)在Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.UnprotectCore(字节[] protectedData,布尔allowOperationsOnRevokedKeys,UnprotectStatus&状态) at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtction.KeyManagement.KeyRingBasedDataProtector.DangerousUnprotect(Byte [] protectedData,Boolean ignoreRevocationErrors,Boolean&requiresMigration,Boolean&wasRevoked)at Microsoft.AspNetCore.DataProtection.KeyManagement.Ke Microsoft.AspNetCore.DataProtection.DataProtectionCommonExtensions.Unprotect(IDataProtector protector,String protectedData)中的yRingBasedDataProtector.Unprotect(Byte [] protectedData)
1 回答
我发现提供者有顶级目的的文件夹名称 . 我假设这是为了在存储在注册表中时隔离密钥存储 . 解决方案是将配置设置添加到ApplicationName,以便它使用它而不是两台不同计算机上不同的文件夹 .
例: