Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602  Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 396 раз в 366 постах
|
Добрый день. Возник вопрос про установку 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 - за исключением системных файлов, непарные следущие.
Код:На семерке:
cpcng.dll 4.0.5118.0 x86 OK C:\Windows\system32\cpcng.dll 0F802BCBEDBEE9A215B1D90EC3F514B82A349F53380CA474476FC275D1401ECC
cpenroll.dll 4.0.4917.0 x86 OK C:\Program Files\Common Files\Crypto Pro\AppCompat\cpenroll.dll F6B912154E255977C9E336D40260DE746CA792DB8BFB8603785491C5BDA07893
На XP:
cpdrvlib.sys 4.0.6518.0 x86 OK C:\Program Files\Crypto Pro\CSP\cpdrvlib.sys 713570A8DC3773D7CF161D0595B875236064C435BF86AAD4ED8A271F669A776E
Нашел ошибку ЭП только в файле каталога cpdrvlib.ms.cat (выдает, что не удается проверить подпись). Догадка пока в том, что это подпись Майкрософт по sha256RSA, в то время как проходят проверку подписи КриптоПро по sha1RSA. Подумал бы на алгоритм, но сам сертификат Майкрософт подписан по sha256RSA и проверку проходит. По поиску нашел, что был хотфикс sha256RSA для XP от Майкрософт в 2009 году, но сейчас его найти проблематично. Коллеги, может быть еще что-то посоветуете.
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,404  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 719 раз в 623 постах
|
XP мы стараемся пока поддержвивать. В вашем приложении отключены патчи? Тогда нужно установить обновление (kb2836198 или 3121918) или прописать Код:Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\WPA\PosReady]
"Installed"=dword:00000001
|
|
 1 пользователь поблагодарил Максим Коллегин за этот пост.
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602  Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 396 раз в 366 постах
|
Добрый день. Спасибо за совет. Если патчи - замена функций Майкрософт, то каких-то действий по отключению в конкретном приложении не предпринимал, так что ответ "не знаю", разве что зацепило каким-то другим действием. Приложение на 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)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,404  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 719 раз в 623 постах
|
Под патчами я имел в виду нашу компоненту Расширенная Совместимость с MSFT. Про обратимость PosReady - не знаю. Найти оригинальные обновления на все нужные версии XP у меня не получилось несколько лет назад. Но больше всего меня смущает, что основные сценарии работают у вас. Может проблема в отладчике, или антивирусе? Попробуйте слинковаться с advapi32.dll статически (или наоборот динамически или через delay load). Отредактировано пользователем 23 августа 2019 г. 14:09:23(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602  Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 396 раз в 366 постах
|
Автор: Максим Коллегин  Под патчами я имел в виду нашу компоненту Расширенная Совместимость с 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)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,404  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 719 раз в 623 постах
|
cpdrvlib.ms.cat содержит несколько подписей, некоторые не должны проверяться - не нужно обращать внимание. Честно говоря с ОС без поддержки производителя разбираться совсем не хочется, используйте пока PosReady в подобных ситуациях. Если будет критично - готов вернуться к этому вопросу. |
|
 1 пользователь поблагодарил Максим Коллегин за этот пост.
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602  Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 396 раз в 366 постах
|
Хорошо, спасибо за уточнение. Утилиту все же когда-нибудь напишу, так как нечто отдаленно похожее бывает и на Семерке (сначала выполняется SetLastError(0); потом CryptAcquireContext возвращает действительный HCRYPTPROV и TRUE, но GetLastError = 5), но про семерку лучше наверно в новой теме.
Технически у меня сейчас все же не PosReady, так как Installed=0. После перезагрузки изменить/удалить значение из самой ОС под администратором уже невозможно, защищено от изменения. Хотя это уже совсем другая история.
Скопировал и сохранил измененную advapi32.dll (других измененных обновлением файлов не нашел) на случай если у кого-то будут аналогичные трудности.
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,404  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 719 раз в 623 постах
|
Если функция вернула TRUE, GetLastError может быть любым - значение неопределёно. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 05.07.2018(UTC) Сообщений: 13  Сказал(а) «Спасибо»: 3 раз Поблагодарили: 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, а только затем устанавливать эти обновления.
|
 1 пользователь поблагодарил Wmffre за этот пост.
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close