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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline pavel.kozak  
#1 Оставлено : 10 января 2020 г. 10:23:50(UTC)
pavel.kozak

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

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

Добрый день.

Пока вопрос туманный, т.к. нет полного понимания происходящего.

Есть устоявшийся проект с использованием КриптоПро 4.0 + КриптоПро .NET (6893 работает стабильно), используется для подключения к Web сервису по WCF (Гост 2012).

Начали миграцию проекта на NET Core 3.x + .NET Framework 4.7.2, до этого была смесь Core 2.x + .NET Framework 4.6.1.

Предположительно(т.к. ставим средствами VS 2019, что он там ещё тянет под сомнением) после установки на машину SDK Core 3.x + SDK .NET Framework 4.8 + соответственно сам коре и фреймфорк получаем проблемы с WCF в существующем проекте, т.е. изменений в сам проект ещё не внесли, только установили Core + FrameWork посвежее.

При попытке подключения к сервису с авторизацией по ГОСТ ключу 2012, получаем ошибку:

Коллекция шифрования маркера не поддерживает алгоритм "urn:ietf:params:xml:ns:cpxmlsec:algorithms:transport-gost2012-256".

Т.е. поведение, как будто не установлен КриптоПро .NET. Переустанавливаем весь комплект КриптоПро + КриптоПро .NET. Результата нет.

Проверено на двух машинах Windows 10 И Windows Server 2012 R2.
Сответсвующие лицензии есть и на рабочие станции и на сервер.
Для проверки пришлось VS 2019 на сервер поставить, т.к. думали причина в Windows 10.


Интересный момент, попробовали поднять версию Крипто Про .NET (SDK Крипто Про .NET поднимали соответственно) до 7132

Выше указанная ошибка на этапе подключения пропала, но при вызове получили другую ошибку:
System.ServiceModel.FaultException: An error occurred when verifying security for the message.

Попробую узнать какую версию SDK Крипто Про использует поставщик Web Сервиса.

Отредактировано пользователем 10 января 2020 г. 10:25:30(UTC)  | Причина: Не указана

Offline Максим Коллегин  
#2 Оставлено : 10 января 2020 г. 10:54:47(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,004
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 17 раз
Поблагодарили: 588 раз в 529 постах
Обновлять КриптоПро .Net при обновлении .Net нужно с вероятностью 90%
Для .Net Core мы делаем fork (обсуждается в соседней ветке), но до WCF там ещё далеко.
Знания в базе знаний, поддержка в техподдержке
Offline pavel.kozak  
#3 Оставлено : 10 января 2020 г. 11:02:18(UTC)
pavel.kozak

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

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

Спасибо.

Да, форк видели но не решились, поэтому и смесь Core 98% + Framework 2%.

Сосредоточимся тогда на вопросе почему не работает с .NET КриптоПро 7132.

Попробуем ещё раз пересобрать с новым SDK 7132, может что-то упустил.

Насколько важно, что бы .NET КриптоПро был одинаковый на клиенте и на сервере?
Мне кажется должно быть все равно. На сервер повлиять мы не сможем.
Offline Максим Коллегин  
#4 Оставлено : 10 января 2020 г. 11:11:32(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,004
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 17 раз
Поблагодарили: 588 раз в 529 постах
Автор: pavel.kozak Перейти к цитате

Насколько важно, что бы .NET КриптоПро был одинаковый на клиенте и на сервере?
Мне кажется должно быть все равно. На сервер повлиять мы не сможем.

Не должны быть одинаковыми.

Постарайтесь собрать трассировку WCF - посмотрим.
Знания в базе знаний, поддержка в техподдержке
Offline pavel.kozak  
#5 Оставлено : 10 января 2020 г. 13:10:45(UTC)
pavel.kozak

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

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

Пересобрал с последним SDK.


Если по трейсу, то получается следующий порядок:

Пытаемся вызвать удаленную функцию TestAuthentication

Поставщик токена безопасности открыт.
На клиенте запущен сеанс безопасности.
Подлинность EndpointReference была определена.
Успешно выполнена аутентификациа.
Протокол безопасности обеспечил защиту исходящего сообщения.
Через канал отправлено сообщение
Через канал получено сообщение
Через канал запроса получен ответ.

Генерирование исключения
"Процессору безопасности не удалось найти заголовок безопасности в сообщении. Это может быть вызвано тем, что сообщение не защищено или имеет место несоответствия привязки между взаимодействующими сторонами. Это может произойти, если служба настроена с режимом безопасности, а клиент не применяет режим безопасности."

Незащищенное или неправильно защищенное сообщение об ошибке было получено от другой стороны.

Протоколу безопасности не может проверить входящее сообщение.

Конец.

Тот же код с предыдущей версией работает корректно. Пока не возможности проверить на чистой машине свежий SDK КриптоПро на старом фреймвекке.








Offline pavel.kozak  
#6 Оставлено : 10 января 2020 г. 13:19:38(UTC)
pavel.kozak

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

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

Автор: Максим Коллегин Перейти к цитате

Не должны быть одинаковыми.
Постарайтесь собрать трассировку WCF - посмотрим.


Оказывается, все таки есть зависимости.

https://br.so-ups.ru/Pub...ws=%5Bobject%20Object%5D

Как-то упустил эту новость.

Теперь тупичок, придется ещё одну кашу делать и запускать прослойку на машине со старым фремвёрком и старым .NET КриптоПро :(.
Offline Максим Коллегин  
#7 Оставлено : 10 января 2020 г. 20:27:26(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,004
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 17 раз
Поблагодарили: 588 раз в 529 постах
Странно, ничего не слышал про это. Изучим вопрос.
Знания в базе знаний, поддержка в техподдержке
Offline Артём Макаров  
#8 Оставлено : 13 января 2020 г. 8:31:35(UTC)
Артём Макаров

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

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

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

Подскажите, какой сейчас target framework задан в проекте?

Какая привязка используется?

Если возможно приложите файл конфигурации клиента (app.config).

Можете приложить wcf trace и messssage log с ошибкой?

Как собирать можно посмотреть тут - https://docs.microsoft.c...figuring-message-logging
Пример -
Код:
<system.diagnostics>
	<sources>
	  <source name="System.ServiceModel.MessageLogging" switchValue="All">
		<listeners>
		  <add type="System.Diagnostics.DefaultTraceListener" name="Default">
			<filter type="" />
		  </add>
		  <add name="ServiceModelMessageLoggingListener">
			<filter type="" />
		  </add>
		</listeners>
	  </source>
	  <source name="System.ServiceModel" switchValue="All" propagateActivity="true">
		<listeners>
		  <add type="System.Diagnostics.DefaultTraceListener" name="Default">
			<filter type="" />
		  </add>
		  <add name="ServiceModelTraceListener">
			<filter type="" />
		  </add>
		</listeners>
	  </source>
	</sources>
	<sharedListeners>
	  <add initializeData="C:\logs\my_service_web_messages.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelMessageLoggingListener" traceOutputOptions="Timestamp">
		<filter type="" />
	  </add>
	  <add initializeData="C:\logs\my_serice_web_tracelog.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelTraceListener" traceOutputOptions="Timestamp">
		<filter type="" />
	  </add>
	</sharedListeners>
	<trace autoflush="true" />
  </system.diagnostics>
Техническую поддержку оказываем тут
Наша база знаний
Offline pavel.kozak  
#9 Оставлено : 13 января 2020 г. 10:01:40(UTC)
pavel.kozak

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

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

Автор: Максим Коллегин Перейти к цитате
Странно, ничего не слышал про это. Изучим вопрос.


Насколько успел узнать, тикет поставщиком сервиса создавался, примерно в то время когда они писали эту новость.

Offline pavel.kozak  
#10 Оставлено : 13 января 2020 г. 10:11:57(UTC)
pavel.kozak

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

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

Автор: Артём Макаров Перейти к цитате

Подскажите, какой сейчас target framework задан в проекте?


Проверяли несколько, поведение и ошибка одинаковые и на 4.6.2, 4.7.1, 4.8.
Версия .NET Крипто про - 7132. Основной Крипто Про ставился последний 4.0, 9963.


Автор: Артём Макаров Перейти к цитате

Какая привязка используется?

WSHttpBinding

Это пример со стенда, в основном проекте вместо конфига настройка из кода идет. Но значения те же.

<wsHttpBinding>
<binding name="wsHttpCertificateBinding" closeTimeout="01:00:00" openTimeout="01:00:00" receiveTimeout="01:00:00" sendTimeout="01:00:00"
maxBufferPoolSize="52428800" maxReceivedMessageSize="52428800">
<readerQuotas maxStringContentLength="2147483647"/>
<security>
<message clientCredentialType="Certificate" negotiateServiceCredential="false"/>
</security>
</binding>
</wsHttpBinding>


<endpoint address="http://br.so-ups.ru:8091/PersonalApi/PersonalApiService.svc/ByCertificate"
binding="wsHttpBinding" bindingConfiguration="wsHttpCertificateBinding"
contract="PersonalApiService.IPersonalApiService" name="wsHttpCertificateEndpoint">
<identity>
<certificateReference findValue="5cee4b2593de373e184377a718bb5af83dea466b" x509FindType="FindByThumbprint"
storeLocation="LocalMachine" storeName="My" />
</identity>
</endpoint>


Автор: Артём Макаров Перейти к цитате

Можете приложить wcf trace и messssage log с ошибкой?


Я отправлю в личку, то что собрали в пятницу с нашими настройками, если не подойдет, то позже сниму с вашими рекомендациями.
Offline Артём Макаров  
#11 Оставлено : 13 января 2020 г. 10:31:58(UTC)
Артём Макаров

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

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

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

0. Убедиться что версия sdk соответствует версии КриптоПро .NET

1. При использовании целевой версии старше 4.6.2 включительно .NET Framework использует CNG провайдеры по умолчанию, которые не поддерживаются КриптоПро.NET. Для корректной работы необходимо выставить 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);


2. При использовании целевой версии старше 4.5 включительно, в случае использования в проекте сборок CryptoPro.Sharpei.ServiceModel.dll и CryptoPro.Sharpei.IdentityModel.dll их необходимо заменить на сборки CryptoPro.Sharpei.ServiceModel45.dll и CryptoPro.Sharpei.IdentityModel45.dll соответственно и пересобрать проект.
Техническую поддержку оказываем тут
Наша база знаний
Offline pavel.kozak  
#12 Оставлено : 13 января 2020 г. 10:41:43(UTC)
pavel.kozak

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

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

0. Да при каждой смене, перепроверяли SDK + референсы на SDK в проекте.

1. DisableCngCertificates=true стоит достаточно давно в продукт версии, без неё не работает совсем.

2. Да они у нас прилеплены к проекту и референсы ведут на них, иначе для WCF не указать гостовские сертификаты, enum то описан в них.

Это все сделано и работает с версией SDK .NET КриптоПро 6ххх.

При замене SDK:
1. Переустанавливаем сам SDK
2. Заменяем в проекте CryptoPro.Sharpei.ServiceModel45.dll и CryptoPro.Sharpei.IdentityModel45.dll
3. Пересобираем проект

Offline Артём Макаров  
#13 Оставлено : 13 января 2020 г. 10:48:31(UTC)
Артём Макаров

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 26 раз в 26 постах
удалено. Некорректная информация.

Отредактировано пользователем 13 января 2020 г. 10:49:43(UTC)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
Offline Артём Макаров  
#14 Оставлено : 13 января 2020 г. 10:52:06(UTC)
Артём Макаров

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

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

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

С сервера как я понимаю нет возможности его получить?
Техническую поддержку оказываем тут
Наша база знаний
Offline pavel.kozak  
#15 Оставлено : 13 января 2020 г. 10:52:44(UTC)
pavel.kozak

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

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

Успел ответить на удаленный вепрос ...

Это возможно, надо посмотреть.

Трейс снят с демонстрационного клиента от поставщика услуг. Ошибка точно такая же, поэтому не стал его препарировать.

Снять с нашего проекта будет не просто, т.к. это связка нескольких сервисов по WCF, там в трейсе будет каша.

Сейчас попробую по быстрому набросать небольшое свое демо и снять другой трейс.



По поводу трейса от поставщика, то с нашей стороны нет. Но от них был тикет, я сейчас скину ссылку на это обсуждение, возможно смогут помочь.

Отредактировано пользователем 13 января 2020 г. 10:54:46(UTC)  | Причина: Не указана

Offline pavel.kozak  
#16 Оставлено : 13 января 2020 г. 11:34:57(UTC)
pavel.kozak

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

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

Вот это обсуждение со стороны поставщика.

https://www.cryptopro.ru...aspx?g=posts&t=16270

С трейсами сервера смогут помочь только они.
Offline pavel.kozak  
#17 Оставлено : 13 января 2020 г. 11:53:51(UTC)
pavel.kozak

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

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

Автор: Артём Макаров Перейти к цитате
Попробуйте собрать message wcf trace с клиента.


Отправил в личку трейс с клиента от поставщика, с вашими настройками диагностики.

Если не подойдет, то позже сделаю свою демку и сниму лог.

Offline Артём Макаров  
#18 Оставлено : 13 января 2020 г. 12:31:43(UTC)
Артём Макаров

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 26 раз в 26 постах
Спасибо. Пока больше с клиентской стороны ничего не нужно. Попробуем разобраться с серверной в соответствующей теме.
Техническую поддержку оказываем тут
Наша база знаний
Offline Артём Макаров  
#19 Оставлено : 14 января 2020 г. 13:17:51(UTC)
Артём Макаров

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

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

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

Похоже дело в том, что из-за несовпадения версий КриптоПро.NET на клиенте и сервера не получается использовать общий алгоритм экспорта ключа.
Сервер со старым КриптоПро.NET пытается импортировать ключ на старом алгоритме, а клиент экспортирует и отправляет на новом.

Как только на сервере обновят версию КриптоПро.NET до актуальной, проблема должна исчезнуть.

Пока можете попробовать сборку из вложения. Добавили возможность указывать алгоритм экспорта для клиента через app.config. Нужно добавить в секцию "configuration" подсекцию "CryptoProNetSettings" и в ней задать ключик DefaultKeyWrappingMethod.

Пример:
Код:
<configuration>
  <configSections>
    <section name="CryptoProNetSettings" type="System.Configuration.NameValueSectionHandler"/>
  </configSections>
 <CryptoProNetSettings>
 <add key="DefaultKeyWrappingMethod" value ="CryptoProKeyWrap"/>
 </CryptoProNetSettings>
</configuration>


Попробуйте пожалуйста, воспроизводится ли ошибка в версии из вложения и проставленным ключиком в app.config.

Пароль на архив - 1.
net-keyWrapFix.zip (1,690kb) загружен 7 раз(а).

Отредактировано пользователем 14 января 2020 г. 15:13:09(UTC)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
Offline pavel.kozak  
#20 Оставлено : 14 января 2020 г. 14:01:28(UTC)
pavel.kozak

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

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

Быстро проверить не получилось. Если указать выше приведённые настройки, то при вызове стандартного диалога выбора сертификата из хранилища, клиент вылетает с исключением.
Если просто обновить .NET Криптопро, без указанных настроек приложения, то диалог работает, но по WCF ошибка старая (что ожидаемо)
Сейчас сделаю демку без выбора сертификата, проверить сам WCF.

Отредактировано пользователем 14 января 2020 г. 14:02:32(UTC)  | Причина: Не указана

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.