Моя проблема с сертификатом pbeWithSHA1And40BitRC2-CBC в Windows Server 2022C#

Место общения программистов C#
Anonymous
Моя проблема с сертификатом pbeWithSHA1And40BitRC2-CBC в Windows Server 2022

Сообщение Anonymous »

Я пытаюсь подписать свой JWT с помощью сертификата, сохраненного как Base64 в моей базе данных и защищенного паролем.
Мой код отлично работает на моем Windows Server 2012, но когда я переместил его на Windows Server 2022, он выдает исключение: Указан неверный тип поставщика.
Мой код .NET 4.7.2:

Код: Выделить всё

        //Load certificate
var certificate = new X509Certificate2(certificateBytes, password, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable);

//Make header, add signing certificate
var header = new JwtHeader(new X509SigningCredentials(certificate));
header.Add(JwtHeaderParameterNames.X5c, new string[] { Convert.ToBase64String(certificate.RawData) });

//Make payload
var payload = new JwtPayload(issuer, audience, claimes, notBefore: null, expires);

//Make token and sign
var token = new JwtSecurityToken(header, payload);

//Serialize
var tokenHandler = new JwtSecurityTokenHandler();
return tokenHandler.WriteToken(token);
Исключение: Указан неверный тип поставщика.

Код: Выделить всё

at System.Security.Cryptography.Utils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer)
at System.Security.Cryptography.Utils.GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters,
Boolean randomKeyContainer, Int32 dwKeySize, SafeProvHandle& safeProvHandle, SafeKeyHandle& safeKeyHandle)
at System.Security.Cryptography.RSACryptoServiceProvider.GetKeyPair()
at System.Security.Cryptography.RSACryptoServiceProvider..ctor(Int32 dwKeySize, CspParameters parameters, Boolean useDefaultKeySize)
at System.Security.Cryptography.X509Certificates.X509Certificate2.get_PrivateKey()
at System.Security.Cryptography.X509Certificates.RSACertificateExtensions.GetRSAPrivateKey(X509Certificate2 certificate)
at Microsoft.IdentityModel.Tokens.X509SecurityKey.get_PrivateKey()                         at Microsoft.IdentityModel.Tokens.X509SecurityKey.get_PrivateKeyStatus()

at Microsoft.IdentityModel.Tokens.AsymmetricSignatureProvider..ctor(SecurityKey key, String algorithm, Boolean willCreateSignatures)
at Microsoft.IdentityModel.Tokens.CryptoProviderFactory.CreateSignatureProvider(SecurityKey key, String algorithm, Boolean willCreateSignatures, Boolean cacheProvider)
at Microsoft.IdentityModel.Tokens.CryptoProviderFactory.CreateForSigning(SecurityKey key, String algorithm, Boolean cacheProvider)
at Microsoft.IdentityModel.JsonWebTokens.JwtTokenUtilities.CreateEncodedSignature(String input, SigningCredentials signingCredentials)
at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.WriteToken(SecurityToken token)
и мой сертификат: MAC: sha1, итерация 1024
Длина MAC: 20, длина соли: 20
Данные PKCS7
Скрытая сумка для ключей: pbeWithSHA1And3-KeyTripleDES -CBC, итерация 1024

Подробнее здесь: https://stackoverflow.com/questions/788 ... erver-2022

Вернуться в «C#»