| 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: | Связано с: | 7891 | |
| Дата напоминания: | |||
| Bug Depends on: | |||
| Bug Blocks: | 502 | ||
| 
        
          Description
        
        
          Александр Морозов
        
        
        
        
          2011-11-23 20:02:30 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 Ошибка вызвана вызовом данной функции:
static BOOL WINAPI CRYPT_RootWriteCert(HCERTSTORE hCertStore,
 PCCERT_CONTEXT cert, DWORD dwFlags)
{
    /* The root store can't have certs added */
    return FALSE;
}Если запускать утилиту без параметра -r localMachine, то сертификат добавляется успешно. Разбирался, как устроены хранилища сертификатов в Wine Добавил поддержку сохранения сертификатов в корневое хранилище в HKLM. Теперь при открытии корневого хранилища локальной машины, предоставляемого провайдером CERT_STORE_PROV_SYSTEM_REGISTRY, создаётся хранилище с новым типом StoreTypeRoot. Это хранилище содержит в себе collection-хранилище, в которое добавлены корневое хранилище в HKLM и старое корневое хранилище, формируемое из сертификатов, установленных в Linux-системе, и доступное только для чтения. Новый тип для хранилища установлен для того, чтобы для него не рабтали функции, предназначенные для collection-хранилища. Флаг CERT_STORE_DELETE_FLAG в CRYPT_RootRegOpenStore специально не обрабатывается, т.к. при его наличии CRYPT_RegOpenStore должна вернуть NULL, и CRYPT_RootRegOpenStore просто не будет вызвана. принято |