Здравствуйте, помогите разобраться, в чем проблема:
Есть приложение, которое взаимодействует с сервисами СМЭВ. Написано на C# + WCF.
Для перехода с ГОСТ 2001 на ГОСТ 2012 выполнили следующие манипуляции:
1. Установили сертификат ГОСТ 2012 (256)
2. В binding.config убрали атрибут defaultAlgorithmSuite в элементе security.
3. Присвоили DigestMethod
значение"urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256".
4. Присвоили SignatureMethod
"urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256".
5. В функции вычисления хэша Gost3411 gost3411 = new Gost3411CryptoServiceProvider() заменили на
var gost3411 = new Gost3411_2012_256CryptoServiceProvider();
return gost3411.ComputeHash(data);
Во время подписания сообщения выдается ошибка:
System.InvalidOperationException: 'Токен подписывания System.IdentityModel.Tokens.X509SecurityToken не имеет ключа, поддерживающего набор алгоритмов Basic256.'
в System.ServiceModel.Security.SecurityAlgorithmSuite.GetSignatureAlgorithmAndKey(SecurityToken token, String& signatureAlgorithm, SecurityKey& key, XmlDictionaryString& signatureAlgorithmDictionaryString)
в System.ServiceModel.Security.WSSecurityOneDotZeroSendSecurityHeader.StartPrimarySignatureCore(SecurityToken token, SecurityKeyIdentifier keyIdentifier, MessagePartSpecification signatureParts, Boolean generateTargettableSignature)
в System.ServiceModel.Security.SendSecurityHeader.StartSignature()
в CryptoPro.Sharpei.ServiceModel.CPSendSecurityHeader.StartSignature()
в System.ServiceModel.Security.SendSecurityHeader.StartSecurityApplication()
в System.ServiceModel.Security.SecurityAppliedMessage.OnWriteMessage(XmlDictionaryWriter writer)
в System.ServiceModel.Channels.BufferedMessageWriter.WriteMessage(Message message, BufferManager bufferManager, Int32 initialOffset, Int32 maxSizeQuota)
в System.ServiceModel.Channels.TextMessageEncoderFactory.TextMessageEncoder.WriteMessage(Message message, Int32 maxMessageSize, BufferManager bufferManager, Int32 messageOffset)
в SMEVI.Platform.Infrastructure.Wcf.Clients.SmevExtensions.SmevMessageEncoder.WriteMessage(Message message, Int32 maxMessageSize, BufferManager bufferManager, Int32 messageOffset) в D:\SMEVI_DEV\Solution\Platform\SMEVI.Platform.Infrastructure.Wcf.Clients\SmevExtensions\SmevMessageEncoder.cs:строка 181
в System.ServiceModel.Channels.HttpOutput.SerializeBufferedMessage(Message message, Boolean shouldRecycleBuffer)
в System.ServiceModel.Channels.HttpOutput.Send(TimeSpan timeout)
в System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.SendRequest(Message message, TimeSpan timeout)
в System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
в System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.Request(Message message, TimeSpan timeout)
в System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
в System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
в System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
в System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)