logo Обзор КриптоПро NGate для защищённого доступа к корпоративным ресурсам
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline two_oceans  
#1 Оставлено : 22 августа 2019 г. 6:04:10(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 33 раз
Поблагодарили: 130 раз в 125 постах
Добрый день.
Возник вопрос про установку 4.0 на Windows XP SP3 (32-разрядная, антивирус Касперского). Да я конечно знаю, что поддержка XP прекращена и в формуляре ее нет. На домашнем компьютере раньше была установлена версия 3.6 R4 - главным образом для отладки своей программы по гост-2001. Вчера решил обновить до 4.0 R3/R4 для отладки и гост-2012 тоже. Сначала было выбрано обновление, потом пробовал удалить, перезагрузиться и поставить снова с установкой сертификатов.

Все как бы работает (сертификаты гост-2001 в хранилище личные видит, сертификат Минкомсвязи по гост-2012 также без ошибок, цепочки проверятся без ошибок, контейнеры тестирует без ошибок, RDP соединяется без ошибок, csptest успешно получает контекст провайдера и с контейнером и с verify_context), но CryptAcquireContext (с флагом verify_context и null в качестве имени контейнера, пробовал и указывать имя провайдера и указывать null) из моей программы возвращает FALSE, в GetLastError код NTE_BAD_SIGNATURE. Сама программа 32-разрядная, имя указывалось в ASCII. Типы криптопровайдера тоже указывал разные (75/80/81), но эффект такой же. Эта же сборка программы (c null в качестве имени криптопровайдера) успешно работает с КриптоПро 4.0 на компьютерах на работе (Windows 7 32, Windows 7 64, Windows Server 2008 R2 64). В итоге, похоже дело или в Windows XP или в конфигурации компьютера.

Проверил список криптопровайдеров - помимо стандартных и криптопро там только какие-то смарткарты, судя по поиску специфичные для XP. По поиску же - вроде как этот код ошибки означает неправильную подпись библиотеки криптопровайдера. Электронные подписи на файлах КриптоПро (и установщике и установленных файлах проверяются без ошибок. Хэши файлов на закладке "Дополнительно" панели управления КриптоПро все в состоянии "ОК". Сверил со значениями на Windows 7 32 - за исключением системных файлов, непарные следущие.
Нашел ошибку ЭП только в файле каталога cpdrvlib.ms.cat (выдает, что не удается проверить подпись). Догадка пока в том, что это подпись Майкрософт по sha256RSA, в то время как проходят проверку подписи КриптоПро по sha1RSA. Подумал бы на алгоритм, но сам сертификат Майкрософт подписан по sha256RSA и проверку проходит. По поиску нашел, что был хотфикс sha256RSA для XP от Майкрософт в 2009 году, но сейчас его найти проблематично.

Коллеги, может быть еще что-то посоветуете.
Offline Максим Коллегин  
#2 Оставлено : 23 августа 2019 г. 11:57:35(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 11 раз
Поблагодарили: 536 раз в 486 постах
XP мы стараемся пока поддержвивать.
В вашем приложении отключены патчи? Тогда нужно установить обновление (kb2836198 или 3121918) или прописать
Код:
Windows Registry Editor Version 5.00 
[HKEY_LOCAL_MACHINE\SYSTEM\WPA\PosReady] 
"Installed"=dword:00000001
Знания в базе знаний, поддержка в техподдержке
thanks 1 пользователь поблагодарил Максим Коллегин за этот пост.
two_oceans оставлено 23.08.2019(UTC)
Offline two_oceans  
#3 Оставлено : 23 августа 2019 г. 13:26:32(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 33 раз
Поблагодарили: 130 раз в 125 постах
Добрый день. Спасибо за совет.
Если патчи - замена функций Майкрософт, то каких-то действий по отключению в конкретном приложении не предпринимал, так что ответ "не знаю", разве что зацепило каким-то другим действием. Приложение на XP работало с КриптоПро 3.6. Если патчи - имеются ввиду обновления ОС, на домашнем компьютере действительно были отключены очень давно по принципу "не сломалось - не чини", вручную поставлено несколько из недавних, включая Anti-WannaCry и поддержку новых версий RDP.

Насколько помню была похожая проблема в моей программе на windows 7 32 с 4.0.9842, там при запросе криптопровайдера возвращало TRUE, хотя в getLastError после CryptAcquireContext оставалось значение NTE_BAD_SIGNATURE. Решилось переходом на 4.0.9944, предположительно дистрибутив 4.0.9842 был поврежден. Поэтому на XP я попробовал две разных версии, но симптомы одинаковые (FALSE с NTE_BAD_SIGNATURE).

Обновление 2836198 нашлось у Майкрософт для 2003 сервера, 3121918 в каталоге для PosReady, оба отказались ставиться. Правка реестра насколько помню сделает ОС псевдо-PosReady и после перезагрузки обратима только через LiveCD? Попробую внести правку и установить 3121918.

Отредактировано пользователем 23 августа 2019 г. 13:27:10(UTC)  | Причина: Не указана

Offline Максим Коллегин  
#4 Оставлено : 23 августа 2019 г. 14:08:11(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 11 раз
Поблагодарили: 536 раз в 486 постах
Под патчами я имел в виду нашу компоненту Расширенная Совместимость с MSFT.
Про обратимость PosReady - не знаю.
Найти оригинальные обновления на все нужные версии XP у меня не получилось несколько лет назад.
Но больше всего меня смущает, что основные сценарии работают у вас. Может проблема в отладчике, или антивирусе?
Попробуйте слинковаться с advapi32.dll статически (или наоборот динамически или через delay load).

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

Знания в базе знаний, поддержка в техподдержке
Offline two_oceans  
#5 Оставлено : 23 августа 2019 г. 16:29:52(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 33 раз
Поблагодарили: 130 раз в 125 постах
Автор: Максим Коллегин Перейти к цитате
Под патчами я имел в виду нашу компоненту Расширенная Совместимость с MSFT.
Про обратимость PosReady - не знаю.
Найти оригинальные обновления на все нужные версии XP у меня не получилось несколько лет назад.
Но больше всего меня смущает, что основные сценарии работают у вас. Может проблема в отладчике, или антивирусе?
Попробуйте слинковаться с advapi32.dll статически (или наоборот динамически или через delay load).

Компонента "Расширенная Совместимость с MSFT" включена, на всякий случай уже и "Криптопровайдер уровня ядра" включен, хотя в режиме службы (точнее вариант запуска программы из службы Apache) работу не тестировал.
Раньше антивирус не мешал, так что наверно маловероятный сценарий. Запускаю без отладчика в общем-то (хотя собрано с отладочными символами и компилятор автоматом вставляет функцию их получения, программа выводит стек при исключениях). Линковано полагаю статически. Немного сложно сделать динамически или отложено этой программе, потому что какой-то из unit ов по зависимости тянет unit windows, а тот тянет огромное количество импортов winapi функций, в том числе advapi32. Наверно проще написать отдельную мини-утилиту без unit ов только с LoadLibrary, GetProcAddress, CreateEvent, WaitForSingleObject и CryptAcquireContext, чем разруливать зависимости unit ов.

В общем, совет про kb3121918 сработал, спасибо огромное.

Сделал так: поставил в реестре PosReady c Installed=1, поставил kb3121918 из каталога для Embedded and PosReady, отложил перезагрузку, вернул Installed=0, перезагрузился. Проверил на старте программы отладочные сообщения в консоль об ошибках 75/80/81 исчезли - далее пошла штатно проверка подписи. В логе
Код:
CryptAcquireContext 75 TRUE: 0
CryptAcquireContext 80 TRUE: 0
CryptAcquireContext 81 TRUE: 0
На закладке дополнительно пересчитал хэши, был измененный хэш advapi32.dll.
Посмотрю как будет дальше. К слову, файл каталога cpdrvlib.ms.cat все еще показывает проверку с ошибкой. На всякий случай отмечу, что пока искал обновления поставил еще kb4500331 (поисковик выдал на запрос kb3121918), по описанию наверно дело не в нем, но для полноты информации о действиях.

Если все же интересно отладить ошибку с помощью delay load - есть оригинал системного раздела икспи на старом жестком диске до переноса на новый жесткий диск пару месяцев назад, можно попробовать воспроизвести ситуацию на нем. Правда займет некоторое время - заморочки с AHCI (грузится только на определенном чипсете, универсального AHCI драйвера в XP не было) и с ходу завести на втором системнике не выйдет.

Отредактировано пользователем 27 августа 2019 г. 11:47:18(UTC)  | Причина: Не указана

Offline Максим Коллегин  
#6 Оставлено : 27 августа 2019 г. 11:52:44(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 11 раз
Поблагодарили: 536 раз в 486 постах
cpdrvlib.ms.cat содержит несколько подписей, некоторые не должны проверяться - не нужно обращать внимание.
Честно говоря с ОС без поддержки производителя разбираться совсем не хочется, используйте пока PosReady в подобных ситуациях. Если будет критично - готов вернуться к этому вопросу.
Знания в базе знаний, поддержка в техподдержке
thanks 1 пользователь поблагодарил Максим Коллегин за этот пост.
two_oceans оставлено 27.08.2019(UTC)
Offline two_oceans  
#7 Оставлено : 27 августа 2019 г. 12:36:11(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 33 раз
Поблагодарили: 130 раз в 125 постах
Хорошо, спасибо за уточнение. Утилиту все же когда-нибудь напишу, так как нечто отдаленно похожее бывает и на Семерке (сначала выполняется SetLastError(0); потом CryptAcquireContext возвращает действительный HCRYPTPROV и TRUE, но GetLastError = 5), но про семерку лучше наверно в новой теме.

Технически у меня сейчас все же не PosReady, так как Installed=0. После перезагрузки изменить/удалить значение из самой ОС под администратором уже невозможно, защищено от изменения. Хотя это уже совсем другая история.

Скопировал и сохранил измененную advapi32.dll (других измененных обновлением файлов не нашел) на случай если у кого-то будут аналогичные трудности.
Offline Максим Коллегин  
#8 Оставлено : 27 августа 2019 г. 12:47:34(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 11 раз
Поблагодарили: 536 раз в 486 постах
Если функция вернула TRUE, GetLastError может быть любым - значение неопределёно.
Знания в базе знаний, поддержка в техподдержке
Offline Wmffre  
#9 Оставлено : 28 августа 2019 г. 0:21:46(UTC)
Wmffre

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

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

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 3 раз в 3 постах
Автор: two_oceans Перейти к цитате
По поиску нашел, что был хотфикс sha256RSA для XP от Майкрософт в 2009 году, но сейчас его найти проблематично.

Коллеги, может быть еще что-то посоветуете.


Можете попробовать установить собранные мной обновления по ссылке для Windows XP SP3, обновляющие системные файлы Windows XP SP3, контроль целостности которых осуществляет Криптопро CSP 4.0, и некоторые вспомогательные системные файлы до последних возможных лицензией Microsoft версий (Обновлений для XP PosReady здесь нет, только обновления для XPSP3).

Обратите внимание на следующие файлы:
1.cmd - запускает filesVersion.cmd и устанавливает обновления;
filesVersion.cmd - определяет версии обновляемых системных файлов и записывает их в текстовый файл. После установки обновлений и перезагрузки запустите этот файл, чтобы в текстовый файл записались уже новые версии системных файлов. Если они будут меньше тех, которые указаны в папках, значит, необходимо откатиться на точку восстановления до установки этих обновлений и установить последний имеющийся Service Pack 3 для Windows XP, а только затем устанавливать эти обновления.
thanks 1 пользователь поблагодарил Wmffre за этот пост.
two_oceans оставлено 28.08.2019(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.