CryptoAPI - список сертификатов
От: AlexeyStaf Россия  
Дата: 10.08.05 03:29
Оценка:
Как мне получить имена всех пользователей, чьи сертификаты лежат в папке Личные (MY)? Я понимаю, что сертификат надо получить функцией CertEnumCertificatesInStore. А вот дальше добраться до имени пользователя я не знаю как. Заранее благодарен.
-----
С уважением, Алексей.
Re: CryptoAPI - список сертификатов
От: Аноним  
Дата: 10.08.05 07:19
Оценка:
Здравствуйте, AlexeyStaf, Вы писали:

AS>Как мне получить имена всех пользователей, чьи сертификаты лежат в папке Личные (MY)? Я понимаю, что сертификат надо получить функцией CertEnumCertificatesInStore. А вот дальше добраться до имени пользователя я не знаю как. Заранее благодарен.


CertGetNameString. Описание есть в MSDN, при помощи неё вы можете имея контекст сертификата получить компоненты DN из полей Subject и/или Issuer путём указания OID'а компонента DN'а Например, указав szOID_COMMON_NAME можно получить (если это значение есть в сертификате) значение компонента "CN" из сертификата. Оно?
Re[2]: CryptoAPI - список сертификатов
От: DmSK  
Дата: 10.08.05 07:28
Оценка:
можно вопрос вдогонку: зарегистрировал физическое хранилище (CryptRegisterOIDFunction) но системный (стандартный) "Certificate Import Wizard" не видит его. в чем может быть дело ?!

CertEnumPhysicalStore видит.

спасибо
... << RSDN@Home 1.1.3 stable >>
Re[3]: CryptoAPI - список сертификатов
От: DmSK  
Дата: 10.08.05 07:52
Оценка:
Здравствуйте, DmSK, Вы писали:

CertRegisterPhysicalStore т.е.

DSK>можно вопрос вдогонку: зарегистрировал физическое хранилище (CryptRegisterOIDFunction) но системный (стандартный) "Certificate Import Wizard" не видит его. в чем может быть дело ?!


DSK>CertEnumPhysicalStore видит.


DSK>спасибо
... << RSDN@Home 1.1.3 stable >>
Re[3]: CryptoAPI - список сертификатов
От: Аноним  
Дата: 10.08.05 07:56
Оценка:
Здравствуйте, DmSK, Вы писали:

DSK>можно вопрос вдогонку: зарегистрировал физическое хранилище (CryptRegisterOIDFunction) но системный (стандартный) "Certificate Import Wizard" не видит его. в чем может быть дело ?!


DSK>CertEnumPhysicalStore видит.


DSK>спасибо


Можно поинтересоваться: чем вызвано использование именно этой функции (CryptRegisterOIDFunction), а не CertRegisterPhysicalStore ? У меня была похожая задача, но требовалось создавать хранилище в MY. Я использовал CertRegisterSystemStore, и Certificate Import Wizard, и MMC Snap-In "Certificates" видели созданное хранилище.
Re[4]: CryptoAPI - список сертификатов
От: DmSK  
Дата: 10.08.05 08:40
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Можно поинтересоваться: чем вызвано использование именно этой функции (CryptRegisterOIDFunction), а не CertRegisterPhysicalStore ? У меня была похожая задача, но требовалось создавать хранилище в MY. Я использовал CertRegisterSystemStore, и Certificate Import Wizard, и MMC Snap-In "Certificates" видели созданное хранилище.


в посте ошибка... все правильно — CertRegisterPhysicalStore.

задачи очень похожи: мне нужно создать хранилище для доверенных сертификатов в "trust" и корневых "root" реализовав его как библиотеку т.к. сертификаты должны хранится на внешнем носители. тут и обратил внимание на CertRegisterPhysicalStore.
на первом же этапе завалил все дело — зарегистрированного хранилища не видно (
может я пошел не тем путем ?! а дело горит, срочно надо

    fResult = CryptRegisterOIDFunction(
        X509_ASN_ENCODING|PKCS_7_ASN_ENCODING,
        CRYPT_OID_OPEN_STORE_PROV_FUNC,
        "TEST.OID.777",
        L"testcsd.dll",
        NULL);

    ZeroMemory(&PhysicalStore, sizeof(PhysicalStore));

    PhysicalStore.cbSize = sizeof(PhysicalStore);
    PhysicalStore.pszOpenStoreProvider = "TEST.OID.777";        // OID
    PhysicalStore.dwFlags = 
        CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG|
        CERT_PHYSICAL_STORE_REMOTE_OPEN_DISABLE_FLAG;
    PhysicalStore.dwPriority = 1;

              
    fResult = CertRegisterPhysicalStore(
         L"My\0",
        CERT_STORE_CREATE_NEW_FLAG|MASK_CERT_STORE_TYPE,
        L"Test store\0",
        &PhysicalStore,
        NULL);
... << RSDN@Home 1.1.3 stable >>
Re[5]: CryptoAPI - список сертификатов
От: AlexeyStaf Россия  
Дата: 10.08.05 10:02
Оценка:
Подскажите, пожалуйста, какой параметр надо поставить в CertOpenSystemStore, чтобы получить список сертификатов в "Другие пользователи"? Пробовал MY, ROOT, SPC, CA.
-----
С уважением, Алексей.
Re[6]: CryptoAPI - список сертификатов
От: DmSK  
Дата: 10.08.05 12:03
Оценка:
Здравствуйте, AlexeyStaf, Вы писали:

AS>Подскажите, пожалуйста, какой параметр надо поставить в CertOpenSystemStore, чтобы получить список сертификатов в "Другие пользователи"? Пробовал MY, ROOT, SPC, CA.


прямо не отвечу (
но еще есть: ACRS, AddressBook, REQUEST, UserDS.

можно посмотреть в "HKEY_CURRENT_USER\Software\Microsoft\SystemCertificates"
... << RSDN@Home 1.1.3 stable >>
Re[4]: CryptoAPI - список сертификатов
От: DmSK  
Дата: 10.08.05 12:16
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Можно поинтересоваться: чем вызвано использование именно этой функции (CryptRegisterOIDFunction), а не CertRegisterPhysicalStore ? У меня была похожая задача, но требовалось создавать хранилище в MY. Я использовал CertRegisterSystemStore, и Certificate Import Wizard, и MMC Snap-In "Certificates" видели созданное хранилище.


системное хранилище видно. проблема с физическим — его не видно.

можно поинтересоваться: Вы связывали запись в реестре о системном хранилище с библиотекой, которая его собственно и реализует?! такое возможно?! при условии что регистрация происходит с CertRegisterSystemStore.

просто у меня сложилось впечатление, что такого рода связь "хранилище-библиотека" возможно только при условии — что хранилище физическое т.е. CertRegisterPhysicalStore.
... << RSDN@Home 1.1.3 stable >>
Re[7]: CryptoAPI - список сертификатов
От: AlexeyStaf Россия  
Дата: 10.08.05 12:37
Оценка:
Спасибо, AddressBook — то, что нужно.
-----
С уважением, Алексей.
Re[5]: CryptoAPI - список сертификатов
От: AlexeyStaf Россия  
Дата: 11.08.05 05:14
Оценка:
Не могу расшифровать файл. В pbMessage записываю зашифрованные данные из файла,
cbMessage — их размер. Вот как заполняю соответствующие структуры для CryptDecryptAndVerifyMessageSignature:

CRYPT_VERIFY_MESSAGE_PARA VerifyPara;
memset(&VerifyPara, 0, sizeof(CRYPT_VERIFY_MESSAGE_PARA));
VerifyPara.cbSize = sizeof(CRYPT_VERIFY_MESSAGE_PARA);
VerifyPara.dwMsgAndCertEncodingType = X509_ASN_ENCODING | PKCS_7_ASN_ENCODING;

CRYPT_DECRYPT_MESSAGE_PARA DecryptPara;
HCERTSTORE CertStoreArray[] = {hSystemStore};
memset(&DecryptPara, 0, sizeof(CRYPT_DECRYPT_MESSAGE_PARA));
DecryptPara.cbSize = sizeof(CRYPT_DECRYPT_MESSAGE_PARA);
DecryptPara.dwMsgAndCertEncodingType = PKCS_7_ASN_ENCODING | X509_ASN_ENCODING;
DecryptPara.cCertStore = 1;
DecryptPara.rghCertStore = CertStoreArray;

DWORD cbBufferSize;
BYTE *pbBuffer = NULL;
if (!CryptDecryptAndVerifyMessageSignature(&DecryptPara, &VerifyPara, 0, pbMessage, cbMessage, NULL, &cbBufferSize, NULL, NULL))
return false;

if(!(pbBuffer = (BYTE*)malloc(cbBufferSize)))
return false;

if (!CryptDecryptAndVerifyMessageSignature(&DecryptPara, &VerifyPara, 0, pbMessage, cbMessage, pbBuffer, &cbBufferSize, NULL, NULL))
return false;

Все проходит нормально, но в файл записывается какая-то абра-кадабра, если так можно сказать. Но эта абра-кадабра сходит с исходными данными по размеру. Я думаю, что проблема в формате представления данных, но не знаю в чем именно. Заренее благодарен.
-----
С уважением, Алексей.
Re[6]: CryptoAPI - список сертификатов
От: AlexeyStaf Россия  
Дата: 11.08.05 10:07
Оценка:
Все, уже сам разобрался. Просто руки немного кривые
-----
С уважением, Алексей.
Re: CryptoAPI - список сертификатов
От: AlexeyStaf Россия  
Дата: 12.08.05 02:09
Оценка:
Вот еще один вопросик: мне теперь необходимо получить имя организации. В принципе саму строку, где содержится информация об "субъекте" (поле Субъект) я могу получить, т.е. оттуда, отсчитывая запятые, вытащить название организации можно. Но может есть какая-то специальная функция? Заранее благодарен.
-----
С уважением, Алексей.
Re: CryptoAPI - список сертификатов
От: AlexeyStaf Россия  
Дата: 16.08.05 10:40
Оценка:
Какой функцией я могу вытащить из сертификата название криптопровайдера, для которого этот сертификат предназначен?
-----
С уважением, Алексей.
Re[2]: CryptoAPI - список сертификатов
От: NoFate Россия  
Дата: 16.08.05 19:41
Оценка:
Здравствуйте, AlexeyStaf, Вы писали:

AS>Какой функцией я могу вытащить из сертификата название криптопровайдера, для которого этот сертификат предназначен?


BOOL WINAPI CertGetCertificateContextProperty(
  PCCERT_CONTEXT pCertContext,
  DWORD dwPropId,
  void* pvData,
  DWORD* pcbData
);


CERT_KEY_PROV_INFO_PROP_ID — второй параметр.

И курить возвращаемую в pvData структуру.

typedef struct _CRYPT_KEY_PROV_INFO {
  LPWSTR pwszContainerName;
  LPWSTR pwszProvName;
  DWORD dwProvType;
  DWORD dwFlags; 
    DWORD cProvParam; 
    PCRYPT_KEY_PROV_PARAM rgProvParam;
  DWORD dwKeySpec;
} CRYPT_KEY_PROV_INFO, *PCRYPT_KEY_PROV_INFO;
С уважением, Сергей.
<< RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.