Summary: | Проблема с проверкой подписи сертификата GNIVC FNS RUS | ||
---|---|---|---|
Product: | WINE@Etersoft | Reporter: | Александр Морозов <amorozov> |
Component: | Шифрование / ЭЦП | Assignee: | Александр Морозов <amorozov> |
Status: | CLOSED FIXED | QA Contact: | Александр Морозов <amorozov> |
Severity: | minor | ||
Priority: | P4 | CC: | lav |
Version: | 1.0.12 | ||
Target Milestone: | --- | ||
Hardware: | PC | ||
OS: | All | ||
Whiteboard: | |||
Заявки RT: | Связано с: | ||
Дата напоминания: | |||
Bug Depends on: | |||
Bug Blocks: | 1161, 7438 | ||
Attachments: | Сертификат GNIVC FNS RUS |
Проблема с функцией CryptVerifyCertificateSignatureEx, вызываемой из CRYPT_CheckRootCert При выполнении CryptVerifyCertificateSignatureEx вызывается CryptImportPublicKeyInfoEx. При вызове последней функции с теми же аргументами в Windows, она завершается неудачно. Если в Windows передавать CryptImportPublicKeyInfoEx другой ALG_ID, то она завершается успешно. Это из-за бага в update_oid_info. Там не заполнялось поле cbData для ExtraInfo. Таким образом, проблема где-то в CryptImportPublicKeyInfoEx http://www.cryptopro.ru/cryptopro/forum/view.asp?q=1980 http://www.cryptopro.ru/CryptoPro/forum/view.asp?q=814 Судя по всему, в Windows для декодирования открытого ключа могут использоваться специальные функции, записи о которых хранятся в реестре в ключе HKLM\Software\Microsoft\Cryptography\OID\EncodingType 1\CryptDllConvertPublicKeyInfo. Патчи: crypt32: Fix ExtraInfo initialization (eterbug #5665). crypt32: Add support for CryptDllConvertPublicKeyInfo (eterbug #5665). crypt32: Find a provider for used algorithm (eterbug #5665). Последний патч делает так, чтобы выбирался подходящий криптопровайдер. Не факт, что такое поведение соответствует поведению Windows. КриптоПро CSP, по-видимому, как-то патчит виндовые dll (судя по описанию и экспортам некоторых dll из состава КриптоПро CSP). Бутылка crypto/cpro36 wine-etersoft-1.0.12-alt11.15 wine-etersoft-gl-1.0.12-alt11.15 wine-etersoft-sql-1.0.12-alt21 Всё ОК Бутылка crypto/cpro36 в контейнере eterhack Текущий eterhack (fca472b2a9a5f620f30a0cdc202127ff2249d998) На вкладке 'Путь сертификации' выводится 'Подпись сертификата неверна.' > Бутылка crypto/cpro36 в контейнере eterhack
> Текущий eterhack (fca472b2a9a5f620f30a0cdc202127ff2249d998)
> На вкладке 'Путь сертификации' выводится 'Подпись сертификата неверна.'
В бутылке, созданной в 1.0.12, работает (КриптоПро там также установлен с помощью 1.0.12).
При установке КриптоПро с помощью eterhack не создаётся запись о криптопровайдере в HKLM\Software\Microsoft\Cryptography\Defaults. Удаление ключей реестра происходит при выполнении действия DelCPCSPs внутри действия InstallFinalize. В логе установки, полученном на Windows, это действие также присутствует, но ключи в реестре после установки появляются. > Удаление ключей реестра
Нужные ключи в реестре сначала создаются, а затем почему-то удаляются. В том, что они создаются, можно убедиться, если подправить код msi так, чтобы действие DelCPCSPs не выполнялось.
Сделал, чтобы реальное создание записей в реестре происходило при выполнении InstallFinalize. Работает на 1.0.12-eter13.4/27 и 1.3.27/1.7.1-eter1.15/3 |
Created attachment 1734 [details] Сертификат GNIVC FNS RUS При просмотре сертификата GNIVC FNS RUS на вкладке "Certification Path" почему-то выводится "This certificate has an invalid signature." В Windows с установленным КриптоПро CSP 3.6 такой проблемы нет. Утилита для работы с сертификатами: wine-etersoft-devel/cert/cert.c