Summary: | Установка КриптоПро CSP 3.6 завершается с ошибкой | ||
---|---|---|---|
Product: | WINE@Etersoft | Reporter: | Александр Морозов <amorozov> |
Component: | Установка программ / MSI | Assignee: | Александр Морозов <amorozov> |
Status: | CLOSED FIXED | QA Contact: | Svetlana Zhukova <svzhu> |
Severity: | minor | ||
Priority: | P4 | CC: | baraka, djam5, DjSpiker, kondratyuk, lav, shpigor, svzhu |
Version: | 1.0.12 | ||
Target Milestone: | --- | ||
Hardware: | PC | ||
OS: | All | ||
Whiteboard: | |||
Заявки RT: | Связано с: | 7438 | |
Дата напоминания: | |||
Bug Depends on: | |||
Bug Blocks: | 11068, 42, 1161, 7206 | ||
Deadline: | 2011-12-02 |
Description
Александр Морозов
2010-03-25 17:23:33 MSK
При установке вызывается функция SslRegInstall, экспортируемая бинарником C:\windows\temp\msi973a.tmp Для нормальной работы этой функции нужен отсутствующий в реестре WINE параметр. Если создать многострочный параметр HKLM\System\CurrentControlSet\Control\Lsa\Security Packages, то строка err:msi:custom_get_thread_return Invalid Return Code 2 при установке не появляется. Возможно, проблема вызвана тем, что RSAENH_CPCreateHash возвращает FALSE. Это в свою очередь происходит из-за того, что get_algid_info возвращает NULL. 004a:Call advapi32.CryptCreateHash(00132970,0000801e,00000000,00000000,0033fd64) ret=79677a66 004a:Call rsaenh.CPCreateHash(00000001,0000801e,00000000,00000000,00135d9c) ret=7e72e3c0 004a:Call KERNEL32.SetLastError(80090008) ret=7e01dfb7 004a:Ret KERNEL32.SetLastError() retval=80090008 ret=7e01dfb7 004a:Ret rsaenh.CPCreateHash() retval=00000000 ret=7e72e3c0 004a:Ret advapi32.CryptCreateHash() retval=00000000 ret=79677a66 0000801e - это, видимо, CALG_GR3411, определённый в WinCryptEx.h в КриптоПро SDK. То, о чём говорится в комментариях #2 и #3 - это установка с crypt32.dll из Win2000. КриптоПро CSP можно установить вот так: wine msiexec -i csp-win32-kc1-rus.msi DISABLEDRIVERTEST=1 Перед этим надо не забыть создать в реестре многостроковый параметр HKLM\System\CurrentControlSet\Control\Lsa\Security Packages > Перед этим надо не забыть создать в реестре
> многостроковый параметр
> HKLM\System\CurrentControlSet\Control\Lsa\Security Packages
Добавил соответствующий reg-файл в закрытую часть.
(In reply to comment #6) > > Перед этим надо не забыть создать в реестре > > многостроковый параметр > > HKLM\System\CurrentControlSet\Control\Lsa\Security Packages > > Добавил соответствующий reg-файл в закрытую > часть. Если есть стандартная часть, лучше также отправить патч на wine.inf в winehq > Если есть стандартная часть, лучше также
> отправить патч на wine.inf в winehq
Что такое стандартная часть?
> HKLM\System\CurrentControlSet\Control\Lsa\Security Packages Про этот параметр реестра: http://msdn.microsoft.com/en-us/library/aa379392(VS.85).aspx (In reply to comment #8) > > Если есть стандартная часть, лучше также > > отправить патч на wine.inf в winehq > > Что такое стандартная часть? * s/есть/это Ну я имел в виду, что если эта ветка присутствует в Windows по умолчанию, её надо добавить в wine.inf В апстримовом wine в реестре отсутствует параметр HKLM\System\CurrentControlSet\Control\Lsa\Security Packages, но есть пустая ветка HKLM\System\CurrentControlSet\Control\Lsa. При этом установка с параметром DISABLEDRIVERTEST=1 завершается успешно даже если удалить HKLM\System\CurrentControlSet\Control\Lsa. Значок КриптоПро CSP в апстримовом wine гораздо менее функционален: вылезают ошибки, отображается меньше вкладок. Создание параметра HKLM\System\CurrentControlSet\Control\Lsa\Security Packages ни к какому улучшению в работе установщика в апстримовом wine не приводит, так что не вижу смысла посылать патч. При установке без DISABLEDRIVERTEST=1 (со встроенной crypt32.dll) запускается "C:\Program Files\Crypto Pro\CSP\setuptest.exe" cpcspi.dll При выполнении данного процеесса вызывается функция CryptHashMessage, которая завершается с ошибкой. Эта ошибка вызвана неудачным завершением CryptFindOIDInfo. В Windows можно добавить ключ в ветку HKLM\SOFTWARE\Microsoft\Cryptography\OID\EncodingType 0\CryptDllFindOIDInfo и с помощью функции CryptFindOIDInfo получить информацию об OID. В WINE эта функция берёт данные из списка oidInfo, который формируется на основе жёстко прописанного в oid.c массива данных. Реализовал обновление списка oidInfo на основе данных из реестра. Теперь при установке со встроенной crypt32.dll наблюдается та же проблема, что и при установке с версией из Windows: 003a:Ret rsaenh.CPCreateHash() retval=00000000 ret=7e3d13c0 003a:Ret advapi32.CryptCreateHash() retval=00000000 ret=7e745879 Функция из rsaenh.dll скорее всего вызывается по ошибке: используется не тот криптопровайдер. Удалил reg-файл, создающий HKLM\System\CurrentControlSet\Control\Lsa\Security Packages, из закрытой части. Отправил в рассылку патчи, добавляющие этот параметр в wine.inf.in. Сделал, чтобы при выполнении CryptHashMessage использовался не дефолтный криптопровайдер, а тот, который поддерживающий нужный алгоритм. Теперь установка с дефолтным выбором устанавливаемых компонентов завершается успешно. Установка завершается с ошибкой, если отметить галочкой "Использовать службу хранения ключей (можно настроить позже)". При установке с "Использовать службу хранения ключей (можно настроить позже)" вызывается '"C:\Program Files\Crypto Pro\CSP\setuptest.exe" cpcspr.dll' Если запустить эту программу вручную, то она возвращает ненулевой код возврата, что скорее всего и воспринимается инсталлятором как ошибка. В логах при этом видно следующее: 005c:Call KERNEL32.LoadLibraryW(00409230 L"cpcrypt.dll") ret=004010ab ............ 005c:Ret KERNEL32.LoadLibraryW() retval=611b0000 ret=004010ab 005c:Call KERNEL32.GetProcAddress(611b0000,00409248 "SetThreadDefaultCryptProv") ret=004010bd 005c:Ret KERNEL32.GetProcAddress() retval=611bb310 ret=004010bd ............ 005c:Call crypt32.I_CryptGetDefaultCryptProv(00000000) ret=004010e2 005c:Call advapi32.CryptAcquireContextW(0033fd4c,00000000,0033fcee L"Microsoft Enhanced Cryptographic Provider v1.0",00000001,f0000000) ret=7e739b59 ............ 005c:Ret advapi32.CryptAcquireContextW() retval=00000001 ret=7e739b59 ............ 005c:Ret crypt32.I_CryptGetDefaultCryptProv() retval=00132658 ret=004010e2 ............ 005c:Call KERNEL32.ExitProcess(8009001e) ret=0040150f cpcrypt.dll входит в состав КриптоПро CSP. По-видимому, cpcrypt.SetThreadDefaultCryptProv должна как-то менять поведение crypt32.I_CryptGetDefaultCryptProv, а в WINE этого не происходит. При выполнении setuptest.exe cpcspr.dll cpcrypt.SetThreadDefaultCryptProv вызывается с аргументом -1. После этого вызывается crypt32.I_CryptGetDefaultCryptProv. Если эта функция возвращает -1, то программа завершается с кодом возврата 0, иначе она завершается с кодом 8009001Eh. cpcrypt.SetThreadDefaultCryptProv(arg) вызывает TlsSetValue(index, arg), index - некая переменная, хранящаяся в cpcrypt.dll. Перед вызовом TlsSetValue проверяется, что она не равна -1. В wine index оказывается равным 4: 003c:Call KERNEL32.TlsSetValue(00000004,ffffffff) ret=611bb32d 003c:Ret KERNEL32.TlsSetValue() retval=00000001 ret=611bb32d wine 1.0.12-eter5.2/4. КриптоПро версия 3.6.1. Установку запустил командой: msiexec /i csp-win32-kc1-rus.msi Установка с параметрами по умолчанию прошла без проблем. После этого запустил wine control и выбрал КриптоПро пощелкал по всем пунктам меню. В чем проблема его запуска ? Что искать ? Проблема не в запуске а в самой работе КриптоПРО 1. попробуйте добавить любой сертификат 2. попробуйте добавить контейнеры 3. попробуйте просмотреть сертификаты в контейнерах (если конечно они имеются) Дополнительно не выстраиваются цепочки сертификатов при их добавлении. Для примера есть корневые сертификаты и личные сертификаты с контейнером закрытого ключа. При добавлении личного сертификата и корневого должен выстроиться путь сертификата. Этого не происходит. Также при добавлении личного сертификата с контейнером закрытого ключа должен выстроиться путь к контейнеру закрытого ключа. Этого не происходит. В итоге все части при просмотре отображаются разрозненно. При добавлении нового сертификата программа при выборе файла сертификата не отображает сертификаты в папке. После нескольких щелчков по окну выбора сертификата виснет намертво. КриптоПРО 2.0 (Build 2104) с постоянной лицензией настроены считыватели: дисковод, а: - физический floppy дисковод, b: - виртуальный флоппи реестр Предложенный метод http://www.cryptopro.ru/cryptopro/forum2/default.aspx?g=posts&t=87 [quote] Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\OID\EncodingType 0\CryptDllFindOIDInfo\1.2.643.2.2.3!4] "ExtraInfo"=hex:23,2e,00,00,04,00,00,00,4b,00,00,00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\OID\EncodingType 0\CryptDllFindOIDInfo\1.2.643.2.2.4!4] "ExtraInfo"=hex:1e,2e,00,00,04,00,00,00,4b,00,00,00[/quote] не работает. > В чем проблема его запуска ? Что искать ? См. http://bugs.etersoft.ru/show_bug.cgi?id=5348#c16 > Проблема не в запуске а в самой работе > КриптоПРО > 1. попробуйте добавить любой сертификат > 2. попробуйте добавить контейнеры > 3. попробуйте просмотреть сертификаты в > контейнерах (если конечно они имеются) > > Дополнительно не выстраиваются цепочки > сертификатов при их добавлении. Если у вас есть время и вы хотите поспособствовать решению данных проблем, создайте по ним отдельные баги с подробным пошаговым описанием того, как их воспроизвести. Создал отдельную ошибку http://bugs.etersoft.ru/show_bug.cgi?id=5587 Функция cpcrypt.SetThreadDefaultCryptProv работает (меняет значение, возвращаемое I_CryptGetDefaultCryptProv) в WINE после выполнения cpcrypt.CProDllPatch. В Windows она работает всегда. Тест: wine-etersoft-devel/crypt/cprotest.c При запуске WINE с установленным КриптоПро выполняются cpcrypt.CProDllPatch и cpadvai.CProDllPatch. Это видно в логе +snoop. Так получилось,что нужно было проверить установку именно этой версии программы. на WINE@Etersoft 1.0 SQL 1.0.12-eter11.13/21 fixme:exec:SHELL_execute flags ignored: 0x00000100 на WINE@Etersoft version 1.3.14-eter1.3 установка не запускается: wine: ������ � ������� EXE ��� P:\Windows\��������\Argos-Nalogoplatelchik\csp-win32-kc1-rus.msi fixme:process:__wine_kernel_init 1: L"P:\\Windows\\Правовые\\Argos-Nalogoplatelchik\\"(L"C:\\windows") wine@cellar bottle bugs/7206-1 > Установка завершается с ошибкой, если отметить галочкой "Использовать службу > хранения ключей (можно настроить позже)". Эту проблему вынес в отдельный баг: https://bugs.etersoft.ru/show_bug.cgi?id=7438 Установка с настройками по умолчанию завершается успешно. В текущем eterhack (1.3.18-alt1.2) установщик не запускается: $ ww msiexec -i csp-win32-kc1-rus.msi fixme:storage:create_storagefile Storage share mode not implemented. err:ole:CoGetClassObject class {6c736db1-bd94-11d0-8a23-00aa00b58e10} not registered err:ole:CoGetClassObject no class object {6c736db1-bd94-11d0-8a23-00aa00b58e10} could be created for context 0x1 err:ole:CoGetClassObject class {6c736db1-bd94-11d0-8a23-00aa00b58e10} not registered err:ole:CoGetClassObject no class object {6c736db1-bd94-11d0-8a23-00aa00b58e10} could be created for context 0x1 err:ntdll:RtlpWaitForCriticalSection section 0x690795c0 "x11drv_main.c: X11DRV_CritSection" wait timed out in thread 0035, blocked by 003a, retrying (60 sec) err:ntdll:RtlpWaitForCriticalSection section 0x690795c0 "x11drv_main.c: X11DRV_CritSection" wait timed out in thread 0035, blocked by 003a, retrying (60 sec) wine: Critical section 690795c0 wait failed at address 0x7bc37a5b (thread 0035), starting debugger... Unhandled exception: wait failed on critical section 0x690795c0 X11DRV_CritSection in 32-bit code (0x7bc37a5b). err:seh:raise_exception Unhandled exception code c0000194 flags 0 addr 0x7bc37a5b Проблема была вызвана коммитом commit 308c05371f47566f05c6755cd3251cfebd1b3e2c Author: Alexander Morozov <amorozov@etersoft.ru> Date: Thu Aug 12 15:50:34 2010 +0400 winex11.drv: Do not call user32 functions if wine_tsx11_lock is called (eterbug #5799). Conflicts: dlls/winex11.drv/mouse.c Исправил. На 1.3.19-alt1.1 установка снова завершается с ошибкой. Исправил. Патч: msi: Fix a regression in installing CryptoPro CSP 3.6 (eterbug #5348). wine@eterhack bottle bugs/5348 WINE@Etersoft version 1.3.25-eter1.3 ww msiexec -i csp-win32-kc1-rus.msi - ставится WINE@Etersoft 1.0 SQL 1.7.1-eter1.2/2 wine csp-win32-kc1-rus.msi - не ставится: Warning: there are some errors in winediag output. Run winediag command and check it. err:usbhub:initialize_usbhub failed to initialize libusb fixme:exec:SHELL_execute flags ignored: 0x00000100 1.0.12 - ставится как через wine так и через ww msiexec -i На последней сборки wine@etersof 2.0.2 eter4/15 Установка КриптоПро CSP 3.6 проходит без проблем. Так же пробовал установить КрпитоПРО 3.6 R3 , она также установилась без проблем. Принято. wine@eter-2 bottle bugs/5348-1 WINE@Etersoft SQL 2.0.2-eter15/4 |