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
Проблема с функцией 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