Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Наши способы организации безопасного удалённого доступа к рабочим местам и корпоративным ресурсам
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline zudwa  
#1 Оставлено : 11 сентября 2018 г. 19:39:40(UTC)
zudwa

Статус: Новичок

Группы: Участники
Зарегистрирован: 11.09.2018(UTC)
Сообщений: 5

Здравствуйте!
Возникает ошибка подписания xml после перехода на fw 4.7.x, с fw 4.6.x и более ранними работает.
Используем
Цитата:
GostAlgorithmSuite.BasicGost

С чем может быть связана проблема?

КриптоПро .NET 1.0.6397.0
Cryptopro csp 4.0.9956

Цитата:

2018-09-11 19:58:37,777 ERROR System.NotSupportedException: В сертификате X.509 отсутствует закрытый ключ.

Server stack trace:
в System.IdentityModel.Tokens.X509AsymmetricSecurityKey.GetSignatureFormatter(String algorithm)
в CryptoPro.Sharpei.IdentityModel.CPX509AsymmetricSecurityKey.GetSignatureFormatter(String algorithm)
в System.IdentityModel.SignedXml.ComputeSignature(SecurityKey signingKey)
в System.ServiceModel.Security.WSSecurityOneDotZeroSendSecurityHeader.CompletePrimarySignatureCore(SendSecurityHeaderElement[] signatureConfirmations, SecurityToken[] signedEndorsingTokens, SecurityToken[] signedTokens, SendSecurityHeade
rElement[] basicTokens, Boolean isPrimarySignature)
в System.ServiceModel.Security.WSSecurityOneDotZeroSendSecurityHeader.CreateSupportingSignature(SecurityToken token, SecurityKeyIdentifier identifier)
в System.ServiceModel.Security.SendSecurityHeader.SignWithSupportingToken(SecurityToken token, SecurityKeyIdentifierClause identifierClause)
в System.ServiceModel.Security.SendSecurityHeader.SignWithSupportingTokens()
в CryptoPro.Sharpei.ServiceModel.CPSendSecurityHeader.SignWithSupportingTokens()
в System.ServiceModel.Security.SendSecurityHeader.CompleteSecurityApplication()
в 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)
в 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)


на самом деле этому исключению предшествует исключение

Цитата:
ThreadID="34 628" FormattedMessage="Создание исключения. Источник: System.IdentityModel 4.0.0.0. Сведения об исключении: System.NotSupportedException: The key algorithm for this private key is not supported. " data1="System.IdentityModel 4.0.0.0" data2="System.NotSupportedException: The key algorithm for this private key is not supported." SerializedException="<Exception><ExceptionType>System.NotSupportedException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType><Message>The key algorithm for this private key is not supported.</Message>

Отредактировано пользователем 13 сентября 2018 г. 14:06:37(UTC)  | Причина: Не указана

Offline Артём Макаров  
#2 Оставлено : 12 сентября 2018 г. 15:17:30(UTC)
Артём Макаров

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 20.02.2017(UTC)
Сообщений: 112

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 26 раз в 26 постах
Добрый день.

Какая версия целевого фреймворка используется при сборке проекта?

Насколько я понимаю ломается WCF. Ошибка возникает на клиенте или на службе? Какая используется привязка?
Техническую поддержку оказываем тут
Наша база знаний
Offline zudwa  
#3 Оставлено : 12 сентября 2018 г. 17:06:33(UTC)
zudwa

Статус: Новичок

Группы: Участники
Зарегистрирован: 11.09.2018(UTC)
Сообщений: 5

Автор: Артём Макаров Перейти к цитате
Добрый день.

Какая версия целевого фреймворка используется при сборке проекта?

Насколько я понимаю ломается WCF. Ошибка возникает на клиенте или на службе? Какая используется привязка?


Версия используется net fw 4.7.1.
Схема такая. Есть портал с которым осуществляется работа с использованием soap. https://irud.gpk.nalog.ru:8733/IRUCWS/IRUCAutoRegService
Конфиг клиента
Код:
			
binding.Security.Mode = BasicHttpSecurityMode.TransportWithMessageCredential;

			binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
			binding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.None;
			binding.Security.Transport.Realm = "";

			binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.Certificate;
			binding.Security.Message.AlgorithmSuite = GostAlgorithmSuite.BasicGost;

			service = new RUCAutoRegServiceInterfaceClient(binding, new EndpointAddress(url));
			service.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindByThumbprint, certTP);


Ошибка возникает на клиенте. Если использовать fw 4.6, то всё работает.
Offline Артём Макаров  
#4 Оставлено : 13 сентября 2018 г. 8:43:45(UTC)
Артём Макаров

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 20.02.2017(UTC)
Сообщений: 112

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 26 раз в 26 постах
Используется ли на клиенте сборка CryptoPro.Sharpei.ServiceModel.dll ?

Если да, то необходимо заменить на CryptoPro.Sharpei.ServiceModel45.dll
Техническую поддержку оказываем тут
Наша база знаний
Offline zudwa  
#5 Оставлено : 13 сентября 2018 г. 9:56:04(UTC)
zudwa

Статус: Новичок

Группы: Участники
Зарегистрирован: 11.09.2018(UTC)
Сообщений: 5

Автор: Артём Макаров Перейти к цитате
Используется ли на клиенте сборка CryptoPro.Sharpei.ServiceModel.dll ?

Если да, то необходимо заменить на CryptoPro.Sharpei.ServiceModel45.dll

Используется, пробовал заменять и так и так. Результат один...
Offline Артём Макаров  
#6 Оставлено : 13 сентября 2018 г. 11:24:19(UTC)
Артём Макаров

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 20.02.2017(UTC)
Сообщений: 112

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 26 раз в 26 постах
При использовании CryptoPro.Sharpei.ServiceModel45.dll стек точно такой же?

В том стеке что вы отправили используется CryptoPro.Sharpei.ServiceModel.dll.

Правильно я понимаю, что на ошибка возникает и пропадает именно при смене целевого фреймворка, без установки\отката реально установленного?
Техническую поддержку оказываем тут
Наша база знаний
Offline zudwa  
#7 Оставлено : 13 сентября 2018 г. 11:42:44(UTC)
zudwa

Статус: Новичок

Группы: Участники
Зарегистрирован: 11.09.2018(UTC)
Сообщений: 5

Автор: Артём Макаров Перейти к цитате
При использовании CryptoPro.Sharpei.ServiceModel45.dll стек точно такой же?

В том стеке что вы отправили используется CryptoPro.Sharpei.ServiceModel.dll.

Правильно я понимаю, что на ошибка возникает и пропадает именно при смене целевого фреймворка, без установки\отката реально установленного?


Стеки одинаковые и в них нет указания на сборку.
Да, понимаете правильно, переключаю целевой фреймворк конечной сборки на 4.7.x и получаю ошибку. Возвращаю на 4.6.x ошибка пропадает.

Привожу стеки.
Для CryptoPro.Sharpei.ServiceModel45.dll
Цитата:

2018-09-13 13:38:17,110 ERROR System.NotSupportedException: В сертификате X.509 отсутствует закрытый ключ.

Server stack trace:
в System.IdentityModel.Tokens.X509AsymmetricSecurityKey.GetSignatureFormatter(String algorithm)
в CryptoPro.Sharpei.IdentityModel.CPX509AsymmetricSecurityKey.GetSignatureFormatter(String algorithm)
в System.IdentityModel.SignedXml.ComputeSignature(SecurityKey signingKey)
в System.ServiceModel.Security.WSSecurityOneDotZeroSendSecurityHeader.CompletePrimarySignatureCore(SendSecurityHeaderElement[] signatureConfirmations, SecurityToken[] signedEndorsingTokens, SecurityToken[] signedTokens, SendSecurityHeaderElement[] basicTokens, Boolean isPrimarySignature)
в System.ServiceModel.Security.WSSecurityOneDotZeroSendSecurityHeader.CreateSupportingSignature(SecurityToken token, SecurityKeyIdentifier identifier)
в System.ServiceModel.Security.SendSecurityHeader.SignWithSupportingToken(SecurityToken token, SecurityKeyIdentifierClause identifierClause)
в System.ServiceModel.Security.SendSecurityHeader.SignWithSupportingTokens()
в CryptoPro.Sharpei.ServiceModel.CPSendSecurityHeader.SignWithSupportingTokens()
в System.ServiceModel.Security.SendSecurityHeader.CompleteSecurityApplication()
в 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)
в 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)


Для CryptoPro.Sharpei.ServiceModel.dll
Цитата:
2018-09-13 13:37:17,038 ERROR System.NotSupportedException: В сертификате X.509 отсутствует закрытый ключ.

Server stack trace:
в System.IdentityModel.Tokens.X509AsymmetricSecurityKey.GetSignatureFormatter(String algorithm)
в CryptoPro.Sharpei.IdentityModel.CPX509AsymmetricSecurityKey.GetSignatureFormatter(String algorithm)
в System.IdentityModel.SignedXml.ComputeSignature(SecurityKey signingKey)
в System.ServiceModel.Security.WSSecurityOneDotZeroSendSecurityHeader.CompletePrimarySignatureCore(SendSecurityHeaderElement[] signatureConfirmations, SecurityToken[] signedEndorsingTokens, SecurityToken[] signedTokens, SendSecurityHeaderElement[] basicTokens, Boolean isPrimarySignature)
в System.ServiceModel.Security.WSSecurityOneDotZeroSendSecurityHeader.CreateSupportingSignature(SecurityToken token, SecurityKeyIdentifier identifier)
в System.ServiceModel.Security.SendSecurityHeader.SignWithSupportingToken(SecurityToken token, SecurityKeyIdentifierClause identifierClause)
в System.ServiceModel.Security.SendSecurityHeader.SignWithSupportingTokens()
в CryptoPro.Sharpei.ServiceModel.CPSendSecurityHeader.SignWithSupportingTokens()
в System.ServiceModel.Security.SendSecurityHeader.CompleteSecurityApplication()
в 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)
в 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)
Offline Артём Макаров  
#8 Оставлено : 13 сентября 2018 г. 13:05:20(UTC)
Артём Макаров

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 20.02.2017(UTC)
Сообщений: 112

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 26 раз в 26 постах
Похоже дело в том, что в версиях старше 4.6.2 .NET очень хочет использовать CNG провайдеры, которые КриптоПро.NET не поддерживает.

Заставить не использовать CNG можно выставив switch DisableCngCertificates=true. Сделать для клиента это можно следующим образом:

В app.config файле:

Цитата:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.IdentityModel.DisableCngCertificates=true" />
</runtime>
</configuration>


Или в коде

Цитата:
private const string DisableCngCertificates = @"Switch.System.IdentityModel.DisableCngCertificate";
AppContext.SetSwitch(disableCngCertificates, true);


Попробуйте один из вариантов.
Техническую поддержку оказываем тут
Наша база знаний
Offline zudwa  
#9 Оставлено : 13 сентября 2018 г. 13:47:58(UTC)
zudwa

Статус: Новичок

Группы: Участники
Зарегистрирован: 11.09.2018(UTC)
Сообщений: 5

Автор: Артём Макаров Перейти к цитате
Похоже дело в том, что в версиях старше 4.6.2 .NET очень хочет использовать CNG провайдеры, которые КриптоПро.NET не поддерживает.

Заставить не использовать CNG можно выставив switch DisableCngCertificates=true. Сделать для клиента это можно следующим образом:

В app.config файле:

Цитата:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.IdentityModel.DisableCngCertificates=true" />
</runtime>
</configuration>


Или в коде

Цитата:
private const string DisableCngCertificates = @"Switch.System.IdentityModel.DisableCngCertificate";
AppContext.SetSwitch(disableCngCertificates, true);


Попробуйте один из вариантов.


Спасибо, помогло!!
Offline archimed7592  
#10 Оставлено : 10 сентября 2020 г. 11:51:53(UTC)
archimed7592

Статус: Участник

Группы: Участники
Зарегистрирован: 26.02.2014(UTC)
Сообщений: 24
Российская Федерация
Откуда: Москва

Поблагодарили: 3 раз в 3 постах
Автор: Артём Макаров Перейти к цитате
Похоже дело в том, что в версиях старше 4.6.2 .NET очень хочет использовать CNG провайдеры, которые КриптоПро.NET не поддерживает.

Заставить не использовать CNG можно выставив switch DisableCngCertificates=true. Сделать для клиента это можно следующим образом:

В app.config файле:

Цитата:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.IdentityModel.DisableCngCertificates=true" />
</runtime>
</configuration>


Или в коде

Цитата:
private const string DisableCngCertificates = @"Switch.System.IdentityModel.DisableCngCertificate";
AppContext.SetSwitch(disableCngCertificates, true);


Попробуйте один из вариантов.


Здравствуйте.
Добавил и в конфигурацию и в коде, не помогает.
Переключаю с 4.6.2 на 4.7.2, получаю ошибку:
Код:
System.NotSupportedException: The private key is not present in the X.509 certificate.

Server stack trace: 
   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 System.ServiceModel.Channels.BufferedMessageWriter.WriteMessage(Message message, BufferManager bufferManager, Int32 initialOffset, Int32 maxSizeQuota)
   at System.ServiceModel.Channels.TextMessageEncoderFactory.TextMessageEncoder.WriteMessage(Message message, Int32 maxMessageSize, BufferManager bufferManager, Int32 messageOffset)
   at CryptoPro.Sharpei.ServiceModel.SMEVTextMessageEncoder.WriteMessage(Message message, Int32 maxMessageSize, BufferManager bufferManager, Int32 messageOffset)


Проблема проявляется и на CryptoPro.Sharpei.ServiceModel и на CryptoPro.Sharpei.ServiceModel45.
Есть ли ещё варианты, в чем дело?
Offline archimed7592  
#11 Оставлено : 10 сентября 2020 г. 11:57:36(UTC)
archimed7592

Статус: Участник

Группы: Участники
Зарегистрирован: 26.02.2014(UTC)
Сообщений: 24
Российская Федерация
Откуда: Москва

Поблагодарили: 3 раз в 3 постах
Хм, нашел прекрасный документ https://support.cryptopr...4/reshenie-problem-s-wcf
Оттуда узнал, что в web.config нужно добавить appSettings вместо runtime.
Помогло, заработало вплоть до 4.8.
Не понятно, почему не срабатывал вариант в коде, ну да ладно.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.