Bug 1161

Summary: Нет поддержки КриптоПро CSP в WINE
Product: WINE@Etersoft Reporter: Vitaly Lipatov <lav>
Component: СобирательныеAssignee: Vitaly Lipatov <lav>
Status: CLOSED INVALID QA Contact: Константин Кондратюк <kondratyuk>
Severity: normal    
Priority: P3 CC: akv, amorozov, bogara, boris, darkdan, DjSpiker, kondratyuk, mikhail.v.gavrilov, olezha
Version: -   
Target Milestone: ---   
Hardware: PC   
OS: Linux   
Whiteboard:
Заявки RT: 12394 Связано с:
Дата напоминания:
Bug Depends on: 14504, 776, 5348, 5528, 5587, 5662, 5665, 5672, 7119, 7436, 7438, 7441, 8777, 13466    
Bug Blocks: 502, 961, 4838, 8900    
Attachments: Часть лога WINEDEBUG=relay,advapi,reg,seh wine cpload.exe -runserver
Установка КриптоПро CSP 3.6 завершается с ошибкой
КриптоПро CSP 3.0
КриптоПро основаная закладка

Description Vitaly Lipatov 2008-02-16 20:16:15 MSK
Например СБИС+ для криптографии использует CryptoPRO, обращаясь к нему
через стандартный для Windows интерфейс - CryptoAPI.
Есть два варианта:
1. написать враппер для линуксового CryptoPRO
2. дописать поддержку USB в Wine, чтобы заработал виндовый CryptoPRO
Comment 1 Александр Морозов 2008-03-21 18:45:35 MSK
wine cpload.exe -runserver выводит окно с сообщением:
"Во время запуска службы была выявлена
ошибка установки КриптоПро CSP на Ваш компьютер.
Попробуйте переустановить КриптоПро CSP.
Если это не устранит ошибку, возможно,
Ваша операционная система не поддерживается.
За поддержкой обратитесь к разработчику КриптоПро CSP на сайт www.cryptopro.ru."
Comment 2 Александр Морозов 2008-03-21 19:32:49 MSK
По-видимому, ошибка связана с неудачей при загрузке cpshar.dll:

[wine@cellar CSP]$ WINEDEBUG=relay,advapi,reg wine cpload.exe -runserver 2>&1 | grep LoadLibrary
001f:Call KERNEL32.LoadLibraryA(7fdefd44 "C:\\Program Files\\Crypto Pro\\CSP\\cpshar.dll") ret=004037f8
001f:Ret  KERNEL32.LoadLibraryA() retval=00000000 ret=004037f8
[wine@cellar CSP]$ pwd
/home/wine/.wine-sbis-crypto/dosdevices/c:/Program Files/Crypto Pro/CSP
[wine@cellar CSP]$ ls -l cpshar.dll
-rw-rw-r-- 1 wine winedevel 94208 Окт 25  2002 cpshar.dll
Comment 3 Александр Морозов 2008-03-21 19:58:01 MSK
Created attachment 338 [details]
Часть лога WINEDEBUG=relay,advapi,reg,seh wine cpload.exe -runserver
Comment 4 Stanislav_Soukhoroukov 2008-05-15 00:03:40 MSD
Подскажите пож-ста, об оставшихся вопросах и сроках ввода в эксплуатацию СБИС++?...Заранее СПАСИБО!!!...
Comment 5 Vitaly Lipatov 2009-08-02 14:01:14 MSD
CryptoPro CSP 3.6 поддерживает Linux:
http://www.cryptopro.ru/cryptopro/products/csp/beta.htm
Comment 6 Vitaly Lipatov 2009-12-14 16:10:24 MSK
Нужно разобраться глобально - какая сейчас ситуация, каково отношение фирмы-разработчика (они брали на тестирование - был ли ответ?), что технически мешает работать, как проверить, что всё работает...
Comment 7 Александр Морозов 2009-12-21 18:13:04 MSK
Так как есть CryptoPro для Linux, то можно написать обёртку, через которую с ним будут работать Windows-программы. Библиотеки CryptoPro для Linux экспортируют ряд Windows-функций, которые реализованы или будут в будущем реализованы в WINE. Это, например, GetLastError, SetLastError, ряд функций из crypt32.dll. По-видимому, придётся сделать переменную окружения, переключающую crypt32 на использование реализаций из библиотек CryptoPro. Что касается GetLastEror, то видимо надо будет из каждой обёртки, вызывающей функцию CryptoPro, вызывать CryptoPro-версию GetLastError, а затем wine-версию SetLastError.

> как проверить, что всё работает...
Есть примеры программ. Но я не уверен, что они все функции покрывают. Вообще API не такое уж маленькое, так что, ИМХО, желательно для начала ориентироваться на какое-то Win-приложение, использующее CryptoPro, и сделать для начала ту часть обёрток, которая этим приложением используется.
Comment 8 Vitaly Lipatov 2009-12-21 19:51:40 MSK
(In reply to comment #7)
> Так как есть CryptoPro для Linux, то можно написать
Всё-таки, что с работой нативных библиотек? Мне кажется это более перспективным.
Возможно, стоит связаться с теми, кто тестировал в КриптоКоме.
Я пока не нашёл переписку правда...
Comment 9 Александр Морозов 2009-12-21 21:15:02 MSK
Created attachment 1435 [details]
Установка КриптоПро CSP 3.6 завершается с ошибкой
Comment 10 Александр Морозов 2009-12-21 21:17:32 MSK
Created attachment 1436 [details]
КриптоПро CSP 3.0

При запуске установщика появляется такая ошибка. После нажатия на ОК установщик завершается. В консоли при этом:
fixme:shell:SHAutoComplete SHAutoComplete stub
fixme:exec:SHELL_execute flags ignored: 0x00000180
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:ITypeInfo_fnInvoke did not find member id 0, flags 0x2!
Comment 11 Александр Морозов 2009-12-21 21:19:20 MSK
КриптоПро CSP 2.0 устанавливается успешно. Но при следующем запуске wine происходит ошибка при вызове нереализованной функции rpcrt4.dll.RpcSsDontSerializeContext.
Comment 12 Александр Морозов 2009-12-22 16:22:56 MSK
В wine невозможно установить сертификат. Как это делается в Windows, можно почитать здесь: http://ereport.sbis.ru/polzovat/cert_change/korn-cert
В Windows при открытии сертификата выполняется
rundll32.exe cryptext.dll,CryptExtOpenCER center_cert.cer
В wine не реализована библиотека cryptext.dll.
Comment 13 Александр Морозов 2010-01-12 20:59:25 MSK
Кроме описанного выше способа в Windows можно импортировать сертификаты через "Свойства обозревателя" в панели управления (Содержание -> Сертификаты) и с помощью утилиты CertMgr из MS Platform SDK. Диалог в обоих случаях стандартный, но из какой он dll-ки не ясно.

В wine можно поставить IE6 и после этого использовать "Свойства обозревателя" из панели управления. Но в wine нельзя добавить сертификат в "Доверенные корневые центры сертификации". Такого хранилища нету.
Comment 14 Александр Морозов 2010-01-13 19:00:59 MSK
(In reply to comment #13)
> Кроме описанного выше способа в Windows можно
> импортировать сертификаты через "Свойства
> обозревателя" в панели управления
> (Содержание -> Сертификаты) и с помощью
> утилиты CertMgr из MS Platform SDK. Диалог в обоих
> случаях стандартный, но из какой он dll-ки не
> ясно.

Диалог создаётся функцией CryptUIDlgCertMgr из cryptui.dll. Встроенная в wine реализация не очень надёжна, падает при ряде действий.
Comment 15 Александр Морозов 2010-01-22 17:38:03 MSK
Сделал программу, создающую диалог с помощью CryptUIDlgCertMgr: wine-etersoft-devel/cert
С её помощью на свежесозданной .wine можно добавить сертификат в "Trusted Root Certification Authorities" (это то же, что и "Доверенные корневые центры сертификации"). При установке IE6 ставится ряд Win-бибилотек и в "Доверенные корневые центры сертификации" добавить сертификат уже не удаётся.
Comment 16 Vitaly Lipatov 2010-03-17 18:16:37 MSK
Тема на форуме CryptoPro
http://www.cryptopro.ru/cryptopro/forum2/default.aspx?g=posts&t=87
Comment 17 Александр Морозов 2010-03-18 20:34:03 MSK
В WINE не работает программа-пример из SDK, создающая контейнер секретного ключа.

$ WINEDEBUG=+crypt wine CreatingKeyContainer.exe Test
Warning: there are some errors in winediag output. Run winediag command and check it.
trace:crypt:CryptAcquireContextA (0x453480, Test, (null), 75, 00000000)
trace:crypt:CryptAcquireContextW (0x453480, L"Test", (null), 75, 00000000)
trace:crypt:CryptAcquireContextA (0x453480, Test, (null), 75, 00000008)
trace:crypt:CryptAcquireContextW (0x453480, L"Test", (null), 75, 00000008)
A new key container has been created.
trace:crypt:CryptGetProvParam (0x1317a8, 6, (nil), 0x33fe9c, 00000000)
trace:crypt:CryptGetProvParam (0x1317a8, 6, 0x571498, 0x33fe9c, 00000000)
A crypto context has been acquired and
The name on the key container is Test

trace:crypt:CryptGetUserKey (0x1317a8, 2, 0x453484)
No signature key is available.
Error number     : 0x5
Error description: An error other than NTE_NO_KEY getting signature key.

trace:crypt:CryptReleaseContext (0x1317a8, 00000000)
Comment 18 Александр Морозов 2010-03-19 17:26:03 MSK
Оказалось, что CreatingKeyContainer.exe не создаёт контейнер из-за того, что завершается с ошибкой GetConsoleMode. Если сделать, чтобы она всегда возвращала TRUE, то контейнер создаётся.
Comment 19 Александр Морозов 2010-03-19 17:26:58 MSK
Проблема не проявляется при запуске с перенаправлением вывода:
$ wine CreatingKeyContainer.exe Test_container > ckc.log
$ wine CreatingKeyContainer.exe Test_container | cat
Comment 20 Александр Морозов 2010-03-22 21:44:33 MSK
Для работы некоторых программ-примеров из SDK надо кое-что создать. Разбираюсь, как это сделать в WINE.
Comment 21 Александр Морозов 2010-03-23 21:28:06 MSK
Сделал утилиту для создания сертификатов с помощью КриптоПро: wine-etersoft-devel/cert/mkcert.c Но в WINE она не работает:

$ wine mkcert.exe Container1 anonymous
CertCreateSelfSignCertificate failed: 57

57 - это ERROR_ADAP_HDW_ERR
Comment 22 Александр Морозов 2010-03-23 22:03:35 MSK
> 57 - это ERROR_ADAP_HDW_ERR
Упс... номер ошибки выводится в 16-ричной системе счисления, так что это ERROR_INVALID_PARAMETER
Comment 23 Vitaly Lipatov 2010-03-24 14:33:16 MSK
Нельзя ли для начала максимально использовать dll из Windows.
Comment 24 Александр Морозов 2010-03-24 14:58:06 MSK
> Нельзя ли для начала максимально
> использовать dll из Windows.
Вроде бы нет лицензионно чистого способа установить виндовую crypt32.dll. Даже если с ней всё будет работать, какой от этого толк?
Comment 25 Vitaly Lipatov 2010-03-24 15:28:04 MSK
(In reply to comment #24)
> > Нельзя ли для начала максимально
> > использовать dll из Windows.
> Вроде бы нет лицензионно чистого способа
> установить виндовую crypt32.dll. Даже если с ней
> всё будет работать, какой от этого толк?
Хочется в первую очередь работающую схему. Детали типа DLL мы подберём, это уже другая задача.

Comment 26 Александр Морозов 2010-03-24 18:32:57 MSK
Скопировал crypt32.dll и msasn1.dll из Win2000.
Написанная мной утилита для создания сертификатов работает.
Не работает копирование контейнеров в Панель управления -> КриптоПро CSP -> Сервис -> Скопировать контейнер... Выдаётся ошибка "Invalid parameter".

Протестировал работу c КриптоПро 2.0 программ-примеров из директории CSP в SDK для КриптоПро 3.6.
CEnvelop - vbs-скрипт, пока пропустил
CodingData - работает
CreatingHash - работает
CreatingKeyContainer - работает
CryptAcquireContext - работает только при запуске без аргументов, при запуске с -silent выдаёт ошибку "Error occurred creating a signature key", в Win2000 то же самое
CryptMessages - ошибка "Encryption failed"
CryptMsgSign - работает
CSignData - vbs-скрипт, пока пропустил
DecryptFile - работает
DerivingSessionKey - работает
DuplicatingHash - работает
DuplicatingSessionKey - работает
EncryptFile - работает
EnumeratingProviders - работает
ExportInFile - работает
ExportingCertificate - работает
ExportingSessionKey - работает
KernelMode - драйвер, пока пропустил
KeyCopy - ошибка "Error during CryptSetKeyParam"
Request - vbs-скрипт, пока пропустил
SessionKeyParameters - работает
SigningHash - работает
SILENT - работает
WordSignCheck - .NET, пока пропустил
XMLSignForVerify - для работы нужен msxml5, пока пропустил
XMLVerify - для работы нужен msxml5, пока пропустил
XMLVerifyTwoSigs - для работы нужен msxml5, пока пропустил
Comment 27 Александр Морозов 2010-03-24 20:43:53 MSK
Добавил стаб для RpcSsDontSerializeContext, чтобы не происходило падения при запуске wine с установленным КриптоПро CSP 2.0. Исправил баг, не дававший копировать контейнер.
Comment 28 Александр Морозов 2010-03-24 21:01:12 MSK
> Исправил баг, не дававший копировать контейнер.
Проблема с CryptMessages также ушла.
Comment 29 Александр Морозов 2010-09-06 21:11:05 MSD
Пофиксил поддержку PP_CLIENT_HWND в CryptSetProvParam.
Comment 30 Александр Морозов 2010-09-06 22:12:28 MSD
В нативной и встроенной crypt32.dll, судя по всему, не полностью совместимо организуется хранение сертификатов. При запуске cert.exe (wine-etersoft-devel/cert/cert.c) с нативной и встроенной библиотеками отличается видимый набор сертификатов.

При использовании нативной crypt32.dll не работает утилита для перечисления доверенных корневых сертификатов certenum.exe (wine-etersoft-devel/cert/certenum.c):

$ ww certenum.exe
fixme:ole:NdrCorrelationInitialize (0x60f894, 0x60f494, 1024, 0x0): stub
fixme:ole:NdrCorrelationInitialize (0x60f858, 0x60f458, 1024, 0x0): stub
CertOpenStore failed: 80092004

$ WINEDLLOVERRIDES="rpcrt4=n" ww certenum.exe
err:service:MACHINE_HANDLEW_bind Couldn't connect to services.exe: error code 1703
err:service:MACHINE_HANDLEW_bind Couldn't connect to services.exe: error code 1703
CertOpenStore failed: 80092004
Comment 31 Александр Морозов 2010-09-06 22:24:49 MSD
Написанное выше относится к crypt32.dll (и msasn1.dll) из Win2000.
Comment 32 Абросимов Виктор 2011-04-11 12:41:48 MSK
Created attachment 2167 [details]
КриптоПро основаная закладка

wine eter8.20-19.
Установка КриптоПро CSP прошла без проблем.  
через wine control захожу в настройку КриптоПРо.
1) На закладке "Общее" не отображается версия КриптоПРО
2) Нет возможности настроить считываетели 
3) Нет возможности просмотреть контейнеры. (и соответственно скопировать их)
Comment 33 Данил Плешаков 2012-10-24 17:20:23 MSK
Вынес последнее сообщение в отдельный баг #8777.
Comment 34 mikhail.v.gavrilov 2013-06-19 11:14:27 MSK
Перечитал тред и так и не понял на каком уровне сейчас поддержка КриптоПРО в wine. И какой КриптоПРО надо ставить для работы с токенами (родной под Linux или Windows версию через wine)

Хочу поставить КЛИЕНТСКИЙ ТЕРМИНАЛ СИСТЕМЫ АЛЬФА-ДИРЕКТ 3.5 http://www.alfadirect.ru/download/AD3/ADSetup.exe отсюда и заставить его работать с токеном под линуксом.
Comment 35 mikhail.v.gavrilov 2013-07-10 11:53:25 MSK
Есть живые в этом треде?
Comment 36 Абросимов Виктор 2013-07-10 12:17:40 MSK
(В ответ на comment #35)
> Есть живые в этом треде?

КриптоПРО CSP 3.6, работает в wine.  Устанавливать надо windows версию.
Comment 37 mikhail.v.gavrilov 2013-07-10 14:22:26 MSK
(In reply to comment #36)
> КриптоПРО CSP 3.6, работает в wine.  Устанавливать надо windows версию.

у меня инстальник КриптоПРО CSP 3.6 скрещенный с рутокеном
https://docs.google.com/file/d/0B0nwzlfiB4aQZ256bDI0cHU0OW8/edit?usp=sharing

Взят отсюда http://www.alfadirect.ru/?page=ad_soft поэтому в свободной доступе нет.

Соответствующий баг завел на багзилле вайна http://bugs.winehq.org/show_bug.cgi?id=33896
Comment 38 mikhail.v.gavrilov 2013-07-11 09:06:23 MSK
Никто не смотрел что там за ошибки?
Comment 39 mikhail.v.gavrilov 2013-08-31 15:24:39 MSK
Походу никому нет дела до этого?
Comment 40 Vitaly Lipatov 2014-09-11 18:45:20 MSK
Откладываем задачи, к которым не обращались более 100 дней.
Comment 41 mikhail.v.gavrilov 2014-09-11 18:56:01 MSK
так никто и не берется этим занятся :(
Comment 44 Олег Шевченко 2024-03-20 23:39:57 MSK
Проект больше не ведётся. Закрываю задачу.
Comment 45 Олег Шевченко 2024-03-20 23:40:24 MSK
Закрыта.