Как Crypt32 предложил в комментарии, проблема в том, что после перехода с таргетинга <= 4.6.2 на таргетинг 4.7 (+) вы получили «<a href="https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/retargeting/" rel="nofollow noreferrer"> изменение ретаргетинга », в котором говорится, что GetAsymmetricAlgorithm разрешеновозвращать экземпляры RSACng, который является лучшим классом RSA в .NET Framework.
Лучшее действие в вашем коде - изменить строку на
RSA rsa = securityKey.GetAsymmetricAlgorithm(SecurityAlgorithms.RsaSha256Signature, true) as RSA;
Затем найдите места, в которых кодбольше не компилируется и изменяется от метода варианта RSACryptoServiceProvider к новым методам RSA (базовый класс).(например, SignData(byte[], object)
=> SignData(byte[], RSASignaturePadding)
).
Вы действительно хотите не говорить RSACng
или RSACryptoServiceProvider
, если можете помочь, поскольку есть теоретические случаи, когда RSACng
не будет работатьи вместо него будет возвращено RSACryptoServiceProvider
(более старые смарт-карты / HSM, имеющие драйвер CAPI, но не драйвер CNG).
Это конкретное изменение ретаргетинга - версия System.IdentityModel https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/retargeting/4.5-4.7.2#wcf-transport-security-supports-certificates-stored-using-cng,который, кажется, не был записан.Если вам нужно отключить это, имя параметра будет Switch.System.IdentityModel.DisableCngCertificates
.