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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Иван Тимохин  
#1 Оставлено : 9 апреля 2020 г. 10:33:14(UTC)
Иван Тимохин

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

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

Сказал(а) «Спасибо»: 6 раз
Добрый день.
Может быть кто-то знает причину проблемы или подскажет куда смотреть.

Мы разрабатываем .net приложение, которое занимается скачиванием софта с сервера https:/company.com и его установкой на компьютер клиента.
Вот список софта, который скачивается и устанавливается в указанном порядке:
1. сертификаты GOST
2. CryptoProCSP
3. AdobeReader
4. Некоторые драйвера

После скачивания и установки сертификатов и CryptoProCSP приложение возвращает ошибку при попытке скачать оставшийся софт с company.com.

Код:
System.AggregateException: Произошла одна или несколько ошибок. ---> System.Net.WebException: Запрос был прерван: Не удалось создать защищенный канал SSL/TLS.
   в System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
   в System.Net.WebClient.GetWebResponse(WebRequest request, IAsyncResult result)
   в System.Net.WebClient.DownloadBitsResponseCallback(IAsyncResult result)
   --- Конец трассировки внутреннего стека исключений ---
   в System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   в System.Threading.Tasks.Task.Wait()
   в CompanyInstall.Components.DownloadableComponent.DownloadFile() в D:\Projects\company\company-install-win\CompanyInstall\Components\DownloadableComponent.cs:строка 88
   в CompanyInstall.Components.ExecutableComponent.DownloadFile() в D:\Projects\company\company-install-win\CompanyInstall\Components\ExecutableComponent.cs:строка 209
   в CompanyInstall.AppCode.InstallManager.Install(IEnumerable`1 components) в D:\Projects\company\company-install-win\CompanyInstall\AppCode\InstallManager.cs:строка 82
   в CompanyInstall.AppCode.CompanyInstallWebSocketServer.Install(InstallData command) в D:\Projects\company\company-install-win\CompanyInstall\AppCode\CompanyInstallWebSocketServer.cs:строка 89
   в CompanyInstall.AppCode.CompanyInstallWebSocketServer.OnMessage(MessageEventArgs msg) в D:\Projects\company\company-install-win\CompanyInstall\AppCode\CompanyInstallWebSocketServer.cs:строка 45
---> (Внутреннее исключение #0) System.Net.WebException: Запрос был прерван: Не удалось создать защищенный канал SSL/TLS.
   в System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
   в System.Net.WebClient.GetWebResponse(WebRequest request, IAsyncResult result)
   в System.Net.WebClient.DownloadBitsResponseCallback(IAsyncResult result)<---


Насколько я понимаю, после установки CryptoPro система начинает взаимодействовать с company.com по усиленным алгоритмам, а состояние нашего приложения конфликтует с этим. Кстати, если перезагрузить наше приложение, то ошибка пропадает.

Я уже пробовал, но безрезультатно
1. использовать версию framework 4.7.2 в приложении (говорят, эта версия использует параметры соединения, установленные в ОС)
2. Выставлял использование только протокола TLS1.2
3. записывал ключи SchUseStrongCrypto в реестр, как указано в https://support.microsof...ption-experience-connect

Кто-то может подсказать в чем проблема?
Почему наше приложение требует перезагрузки после установки CryptoPro? Можно ли от этого избавиться?

ps. Вариант сначала все скачать, а потом установить прошу не предлагать.


Offline two_oceans  
#2 Оставлено : 9 апреля 2020 г. 12:04:09(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 393 раз в 366 постах
Автор: Иван Тимохин Перейти к цитате
Кто-то может подсказать в чем проблема?
Почему наше приложение требует перезагрузки после установки CryptoPro? Можно ли от этого избавиться?
Добрый день. Предположу по описанию, что Ваша мысль правильная, изменяется стек вызовов криптографического API, но объекты в памяти его использующие остаются и придется как минимум объекты выгрузить/освободить, затем загрузить/проинициализировать снова. В немалой степени это может зависеть от способа связывания объектов - если все инициализируется где-то в фоне на старте приложения, то можно посочувствовать. Поддерживает ли сервер с которого скачивается алгоритмы гост, используется ли там http или https (или ftp), идут ли редиректы и т.д. Модифицировали ли какие-то классы, связанные с загрузкой? Без конкретики будет сложно ответить детально.
Автор: Иван Тимохин Перейти к цитате
ps. Вариант сначала все скачать, а потом установить прошу не предлагать.
Большинство установщиков (взять того же .NET) так и делает.
В принципе еще есть куча обходов: просто по http скачивать, не идти на поводу у моды все на https переводить.
Или скачивать отдельным скриптом (или приложением - "менеджером закачек") - коряво, могут ругаться антивирусы, но даунлоадер перезапустить никаких проблем не возникнет. Просто к слову, не предлагаю.

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

Offline Иван Тимохин  
#3 Оставлено : 9 апреля 2020 г. 14:51:54(UTC)
Иван Тимохин

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

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

Сказал(а) «Спасибо»: 6 раз
Цитата:
Поддерживает ли сервер с которого скачивается алгоритмы гост, используется ли там http или https (или ftp)

Сервер поддерживает алгоритмы ГОСТ. Насколько я понял, он начинает их использовать после установки CryptoPro.
До установки CryptoPro я могу видеть в IE11 при просмотре RSA-Сертификат, после ГОСТ-сертификат.
Сервер общается только по https.

Цитата:
Модифицировали ли какие-то классы, связанные с загрузкой?

Модификации нет. Скачивание производится через WebClient.DownloadFileTaskAsync, обрамленный в using.
В нем же навешивается обработчик DownloadProgressChanged, чтобы сообщать о прогрессе
Offline two_oceans  
#4 Оставлено : 10 апреля 2020 г. 6:25:21(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 393 раз в 366 постах
Экземпляр WebClient остается один и тот же - или создается каждый раз новый? При соединении по ГОСТ - требует ли сервер клиентского сертификата?

Просто для информации: посмотрел как справляется установщик Веб-диска Контура - там также скачивание следующего компонента может идти после установки предыдущего компонента. Оказалось, что они используют для установщика и всех дистрибутивов сервер c https, но без поддержки ГОСТ. Даже с установленным криптопро показывает сертификат сервера как RSA.

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

Offline Иван Тимохин  
#5 Оставлено : 10 апреля 2020 г. 9:08:09(UTC)
Иван Тимохин

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

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

Сказал(а) «Спасибо»: 6 раз
Цитата:
Экземпляр WebClient остается один и тот же - или создается каждый раз новый?

Каждый раз создается новый.

Цитата:
При соединении по ГОСТ - требует ли сервер клиентского сертификата?

Можете пояснить зачем клиентский сертификат?
Я думал, что для установления https достаточно получить ГОСТ сертификат с сервера и выстроить цепочку до корневого.


Цитата:
сервер c https, но без поддержки ГОСТ

У нас сервер возвращает RSAсерт или ГОСТсерт в зависимости от установленного ПО.

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

Offline Максим Коллегин  
#6 Оставлено : 10 апреля 2020 г. 10:32:58(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 32 раз
Поблагодарили: 706 раз в 614 постах
А вы можете перезапустить процесс скачивания после установки КриптоПро CSP?
Или скачивать отдельным процессом (чтобы переинициализировать библиотеки ssl)?
Знания в базе знаний, поддержка в техподдержке
Offline two_oceans  
#7 Оставлено : 10 апреля 2020 г. 13:22:38(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 393 раз в 366 постах
Автор: Иван Тимохин Перейти к цитате
Можете пояснить зачем клиентский сертификат?
Я думал, что для установления https достаточно получить ГОСТ сертификат с сервера и выстроить цепочку до корневого.
соединение может устанавливаться как с проверкой одного сертификата (сервера), так и с двух сертификатов (и клиента и сервера). Собственно вопрос и был о том односторонняя или двухсторонняя аутентификация используется сервером - возможен вариант что гост настроен только на двухстороннюю (односторонняя отклоняется), а rsa разрешает одностороннюю и тогда это будет дополнительным усложняющим соединение фактором.

С другой стороны, если объект каждый раз разный, то Credentials тоже наверно должны быть разные. Однако на всякий случай попробуйте сравнить значение Credentials до перезапуска приложения и после перезапуска (изначально там строит что использовать данные по умолчанию и возможно умолчание меняется при перезапуске). Если меняется, то предположительный вариант указать новые Credentials без перезапуска.
Цитата:
У нас сервер возвращает RSAсерт или ГОСТсерт в зависимости от установленного ПО.
Да, возможно проблема именно в этом. Вариант проверки: настроить параллельно другой порт https без поддержки гост для автоматического скачивания дистрибутивов и посмотреть нужен ли перезапуск в такой ситуации (когда все скачивание только по https RSA).

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

Offline Иван Тимохин  
#8 Оставлено : 10 апреля 2020 г. 13:42:02(UTC)
Иван Тимохин

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

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

Сказал(а) «Спасибо»: 6 раз
Цитата:
А вы можете перезапустить процесс скачивания после установки КриптоПро CSP?
Или скачивать отдельным процессом (чтобы переинициализировать библиотеки ssl)?

А процесс скачивания и инициируется для каждого компонента отдельно. Т.е. создается WebClient и т.д.
Скачивать отдельным процессом трудоемко.

Цитата:
Однако на всякий случай попробуйте сравнить значение Credentials

Попробую, хорошая мысль


Цитата:
Настроить параллельно другой порт https без поддержки гост для автоматического скачивания дистрибутивов

Неплохо, но не уверен, что пропустят
Offline Максим Коллегин  
#9 Оставлено : 10 апреля 2020 г. 16:53:39(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 32 раз
Поблагодарили: 706 раз в 614 постах
Автор: Иван Тимохин Перейти к цитате

А процесс скачивания и инициируется для каждого компонента отдельно. Т.е. создается WebClient и т.д.

А если не пересоздавать WebClient?
Если выложите код, воспроизводящий проблему, - попробую починить, но это может быть исправлено только в новых версиях CSP.

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