Добрый день!
Пытаюсь наладить подпись сообщений с WCF-сервисом, используя сертификаты Крипто-Про: клиенский с приватным и серверный с пабликом.
wcf-клиент - вполне обычный, с одним но: кастомный бехавиор на endpoitn, добавляющий некий хедер в соап-сообщение.
но, полагаю, это вряд ли имеет значение.
биндинг и конфигурация полностью строится на .net-коде (т.е. не из конфига), если необходимо - выложу код.
оба сертификата привязываются так же стандартно, через clientBase<T>.ClientCredentials.Client/ServerCertificate.SetCertificate()
При отправке сообщения в сервис, вылетает эксепшен:
System.Security.Cryptography.CryptographicException: The Keyset parameter is invalid.
Server stack trace:
at CryptoPro.Sharpei.CPUtils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer)
at CryptoPro.Sharpei.CPUtils.GetKeyPairHelper(CPCspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContainer, Int32 dwKeySize, SafeProvHandleCP& safeProvHandle, SafeKeyHandleCP& safeKeyHandle)
at CryptoPro.Sharpei.Gost3410CryptoServiceProvider.GetKeyPair()
at CryptoPro.Sharpei.NetDetours.CPX509Certificate2.get_PrivateKey()
at System.IdentityModel.Tokens.X509AsymmetricSecurityKey.get_PrivateKey()
at System.IdentityModel.Tokens.X509AsymmetricSecurityKey.GetSignatureFormatter(String algorithm)
at CryptoPro.Sharpei.IdentityModel.CPX509AsymmetricSecurityKey.GetSignatureFormatter(String algorithm)
at System.IdentityModel.SignedXml.ComputeSignature(SecurityKey signingKey)
at System.ServiceModel.Security.WSSecurityOneDotZeroSendSecurityHeader.CompletePrimarySignatureCore(SendSecurityHeaderElement[] signatureConfirmations, SecurityToken[] signedEndorsingTokens, SecurityToken[] signedTokens, SendSecurityHeaderElement[] basicTokens, Boolean isPrimarySignature)
at System.ServiceModel.Security.SendSecurityHeader.CompleteSignature()
at System.ServiceModel.Security.SendSecurityHeader.CompleteSecurityApplication()
at System.ServiceModel.Security.SecurityAppliedMessage.OnWriteMessage(XmlDictionaryWriter writer)
at Rkis.Rsmev.RsmevActorMessageEncoder.WriteMessage(Message message, Int32 maxMessageSize, BufferManager bufferManager, Int32 messageOffset)
at System.ServiceModel.Channels.HttpOutput.SerializeBufferedMessage(Message message)
at System.ServiceModel.Channels.HttpOutput.Send(TimeSpan timeout)
at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.SendRequest(Message message, TimeSpan timeout)
at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
Из доп. информации:
Сертификаты - все тестовые.
CSP 3.6.6497
Win2k8 64bit
Клиенский сертификат - LocalMachine/My
Серверный: LocalMachine/Trusted root cert.auth.
Есть подозрение, что что-то не так с самими сертификатами, клиент не причем.
В какую сторону копать?
Какую информацию еще можно/нужно предоставить ?
Заранее спасибо!