Bug 7892

Summary: СБиС++ ЭО: проблема с установкой сертификатов
Product: WINE@Etersoft Reporter: Александр Морозов <amorozov>
Component: Шифрование / ЭЦПAssignee: Александр Морозов <amorozov>
Status: CLOSED FIXED QA Contact: Andrey Vusik <night>
Severity: critical    
Priority: P1 CC: kondratyuk, lav
Version: 2.0   
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 502    

Description Александр Морозов 2011-11-23 20:02:30 MSK
СБиС++ ЭО 2.4.42
WINE@Etersoft SQL 2.0.0-eter0.3/1

После установки СБиС++ ЭО в Wine надо вручную устанавливать сертификат TENSORCA1. При установке в консоли выводятся такие сообщения:
Error: Failed to save to the destination store
Error: Failed to save to the destination store
CertMgr Failed
Error: Failed to save to the destination store
Error: Failed to save to the destination store
CertMgr Failed
Error: Failed to save to the destination store
Error: Failed to save to the destination store
CertMgr Failed
Error: Failed to save to the destination store
Error: Failed to save to the destination store
CertMgr Failed
Error: Failed to save to the destination store
Error: Failed to save to the destination store
CertMgr Failed
Comment 1 Александр Морозов 2011-11-23 20:17:17 MSK
Ошибка выводится утилитой certmgr, расположенной в поддиректории RootCerts директории СБиС++.

$ wine certmgr.exe -add -all CASimpleTest_RootNew.cer -s Root -r localMachine
Error: Failed to save to the destination store
Error: Failed to save to the destination store
CertMgr Failed
Comment 2 Александр Морозов 2011-11-23 20:55:39 MSK
Ошибка вызвана вызовом данной функции:

static BOOL WINAPI CRYPT_RootWriteCert(HCERTSTORE hCertStore,
 PCCERT_CONTEXT cert, DWORD dwFlags)
{
    /* The root store can't have certs added */
    return FALSE;
}
Comment 3 Александр Морозов 2011-11-23 21:35:17 MSK
Если запускать утилиту без параметра -r localMachine, то сертификат добавляется успешно.
Comment 4 Александр Морозов 2011-11-24 21:25:13 MSK
Разбирался, как устроены хранилища сертификатов в Wine
Comment 5 Александр Морозов 2011-11-25 21:46:37 MSK
Добавил поддержку сохранения сертификатов в корневое хранилище в HKLM.

Теперь при открытии корневого хранилища локальной машины, предоставляемого провайдером CERT_STORE_PROV_SYSTEM_REGISTRY, создаётся хранилище с новым типом StoreTypeRoot. Это хранилище содержит в себе collection-хранилище, в которое добавлены корневое хранилище в HKLM и старое корневое хранилище, формируемое из сертификатов, установленных в Linux-системе, и доступное только для чтения. Новый тип для хранилища установлен для того, чтобы для него не рабтали функции, предназначенные для collection-хранилища.
Comment 6 Александр Морозов 2011-11-25 21:51:20 MSK
Флаг CERT_STORE_DELETE_FLAG в CRYPT_RootRegOpenStore специально не обрабатывается, т.к. при его наличии CRYPT_RegOpenStore должна вернуть NULL, и CRYPT_RootRegOpenStore просто не будет вызвана.
Comment 7 Andrey Vusik 2011-12-13 19:42:26 MSK
принято