Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

14 Страницы«<56789>»
Опции
К последнему сообщению К первому непрочитанному
Offline SeregaZ  
#61 Оставлено : 6 августа 2012 г. 1:47:14(UTC)
SeregaZ

Статус: Активный участник

Группы: Участники
Зарегистрирован: 23.06.2012(UTC)
Сообщений: 65
Откуда: Almaty, KZ

знаю я про фильтр... по фильтру и смотрел... их мнооооого, даже с фильтром.

ну вот... в процессе отладки опять косяки полезли:
hStoreHandle = CertOpenStore_(#CERT_STORE_PROV_PHYSICAL, 0, 0, #CERT_SYSTEM_STORE_CURRENT_USER, mem)
hStoreHandle возвращает, то есть функция как бы работает, но если сделать сразу проверку на GetLastError, то выдаст ошибку - Объект или свойство не найдено. опять тоже недразумение - то есть вроде и работает, и в тоже время пишет ошибку какую-то...

ага! в описании приписка:
Note CreateFile, ReadFile, or registry errors might be propagated and their error codes returned. CertOpenStore has a single error code of its own, the ERROR_FILE_NOT_FOUND code, which indicates that the function was unable to find the provider specified by the lpszStoreProvider parameter.
то есть ничего страшного? и это вылазит не совсем правильный GetLastError, правильный же GetLastError следует ставить только если hStoreHandle будет null?

Отредактировано пользователем 6 августа 2012 г. 2:00:56(UTC)  | Причина: Не указана

Offline Андрей Писарев  
#62 Оставлено : 6 августа 2012 г. 2:23:13(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,847
Мужчина
Российская Федерация

Сказал «Спасибо»: 584 раз
Поблагодарили: 2320 раз в 1818 постах
SeregaZ написал:
знаю я про фильтр... по фильтру и смотрел... их мнооооого, даже с фильтром.

ну вот... в процессе отладки опять косяки полезли:
hStoreHandle = CertOpenStore_(#CERT_STORE_PROV_PHYSICAL, 0, 0, #CERT_SYSTEM_STORE_CURRENT_USER, mem)
hStoreHandle возвращает, то есть функция как бы работает, но если сделать сразу проверку на GetLastError, то выдаст ошибку - Объект или свойство не найдено. опять тоже недразумение - то есть вроде и работает, и в тоже время пишет ошибку какую-то...

ага! в описании приписка:
Note CreateFile, ReadFile, or registry errors might be propagated and their error codes returned. CertOpenStore has a single error code of its own, the ERROR_FILE_NOT_FOUND code, which indicates that the function was unable to find the provider specified by the lpszStoreProvider parameter.
то есть ничего страшного? и это вылазит не совсем правильный GetLastError, правильный же GetLastError следует ставить только если hStoreHandle будет null?




в mem - там что "лежит" у тебя ? путь в Unicode ?

Отредактировано пользователем 6 августа 2012 г. 2:36:29(UTC)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
Offline SeregaZ  
#63 Оставлено : 6 августа 2012 г. 5:37:34(UTC)
SeregaZ

Статус: Активный участник

Группы: Участники
Зарегистрирован: 23.06.2012(UTC)
Сообщений: 65
Откуда: Almaty, KZ

да юникод. пришлось заметно потрахаца чтобы перевести кучу уже написаного кода в unicodный вариант, а еще в процессе были найдены кучи мелких недочетов в дополнительной библиотеке для PureBasica в юникодных вариантах дополнительных функций, которые потом поправили :)

SeregaZ написал:

mem это что-то типа указателя, в котором хитрым мне не понятным образом записано
MY_STORE.s = "My\.Default"
mem = @MY_STORE

попробую просто "My" указать... тож самое.



насчет ошибки все дело в приписке к описанию функции что GetLastError вернет ошибки, которые напрямую не связаны с работой CertOpenStore. их я полагаю можно будет увидеть в procmon, например:
UserPostedImage
то есть функции предписано проверить эти ветки, она проверяет, не находит, GetLastError ругается... но ошибка не критическая и процессу открытия не мешает. я так понял что если функция возвращает положительный результат, значит в этом случае у нее приоритет перед GetLastError, и тогда на GetLastError можно не обращать внимание.

я делал как:
функция
GetLastError
другая функция
GetLastError

а надо было так:
если функция сработала, то ничего
если же не сработала, то GetLastError
если вторая функция сработала, то ничего
если не сработала, то GetLastError

а поскольку одна функция перетекает из другой, то даже надо было сделать так:
если функция сработала, то переходим ко второй
если несработала, то GetLastError и перехода на вторую нет.

Отредактировано пользователем 6 августа 2012 г. 5:43:54(UTC)  | Причина: Не указана

Offline SeregaZ  
#64 Оставлено : 30 августа 2013 г. 14:14:38(UTC)
SeregaZ

Статус: Активный участник

Группы: Участники
Зарегистрирован: 23.06.2012(UTC)
Сообщений: 65
Откуда: Almaty, KZ

решил я свою программу немного проапгрейдить. дело в том, что один тип сертификатов моя программа читает, а вот второй несколько другой и четкого алгоритма чтения его я пока не представляю. точнее я вообще не представляю как эти сертификаты читаются и тому подобное... в моем случае программа читает все файлы в папки виндовс, где лежат мои сертификаты и как только в одном из файлов попались, друг за другом, 12 цифр - значит это рнн и дальше файл можно не читать :) я конечно понимаю что система просто ужасна - однако она работает и я понимаю как она работает. изучать же всякие криптоапи просто боюсь... однако со вторым типом сертификатов такого не получится и придется засесть за штудирование материалов.

посему задача:
прочитать все "мои" сертификаты с помощью криптоапи, а не чтением физического файла как я сейчас делаю. чтение из этих сертификатов каких-то данных - например "понятное имя", и также чтения срока годности такого сертификата.
что вбивать в графу поиск я не представляю, посему был бы рад правильным ссылкам по моей задаче.
Offline Андрей Писарев  
#65 Оставлено : 30 августа 2013 г. 14:31:32(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,847
Мужчина
Российская Федерация

Сказал «Спасибо»: 584 раз
Поблагодарили: 2320 раз в 1818 постах
загрузить в память, воспользоваться несколькими функциями...
CertGetNameString ( ..CERT_NAME_ATTR_TYPE...)
CertGetCertificateContextProperty
pCertContext->pCertInfo ...
еще можно SDK посмотеть...
Техническую поддержку оказываем тут
Наша база знаний
Offline SeregaZ  
#66 Оставлено : 30 августа 2013 г. 14:51:55(UTC)
SeregaZ

Статус: Активный участник

Группы: Участники
Зарегистрирован: 23.06.2012(UTC)
Сообщений: 65
Откуда: Almaty, KZ

"загрузить в память" - это имеется ввиду загрузка файла сертификата? это не совсем то - я об уже установленных в виндовсе "моих" сертификатах, то есть мне нужно что-то типа certmgr.msc - там читает и имя и срок годности, точнее даже не имя - а поле "кому выдан". имя там порой абру кадабру пишет...

Отредактировано пользователем 30 августа 2013 г. 14:55:17(UTC)  | Причина: Не указана

Offline Андрей Писарев  
#67 Оставлено : 30 августа 2013 г. 15:00:11(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,847
Мужчина
Российская Федерация

Сказал «Спасибо»: 584 раз
Поблагодарили: 2320 раз в 1818 постах
Автор: SeregaZ Перейти к цитате
"загрузить в память" - это имеется ввиду загрузка файла сертификата? это не совсем то - я об уже установленных в виндовсе "моих" сертификатах, то есть мне нужно что-то типа certmgr.msc - там читает и имя и срок годности, точнее даже не имя - а поле "кому выдан". имя там порой абру кадабру пишет...



Автор: SeregaZ Перейти к цитате
в моем случае программа читает все файлы в папки виндовс, где лежат мои сертификаты и как только в одном из файлов попались, друг за другом, 12 цифр - значит это рнн и дальше файл можно не читать :)


ответил дословно, если Вы имели ввиду стиль визуализации информации о сертификатах в ПО от MS тогда:
открыть нужное хранилище сертификатов (MY)
перечисляя все сертификаты, получать контекст каждого и прочитать свойства...
Техническую поддержку оказываем тут
Наша база знаний
Offline SeregaZ  
#68 Оставлено : 30 августа 2013 г. 15:04:33(UTC)
SeregaZ

Статус: Активный участник

Группы: Участники
Зарегистрирован: 23.06.2012(UTC)
Сообщений: 65
Откуда: Almaty, KZ

это я таким образом пытаюсь получить рнны уже установленных сертификатов - когда сертификат установлен, то в особой служебной папке, в моих документах, создается файл с длинным аброкадабрным названием без расширения. то есть это не оригинальный rsa.p12, а уже его установленная часть. и этот механизм работает, ошибок еще не было - но теоретическая возможность ошибки определения рнн там есть. поэтому я хотел бы переделать свою систему вместо чтения этих файлов на чтение средствами крипто апи - там возможность ошибки гораздо меньше, то есть точность гораздо выше. особенно со вторым типом сертификатов, которые я не могу прочитать тем моим топорным методом.

и можно пример?

Отредактировано пользователем 30 августа 2013 г. 15:05:55(UTC)  | Причина: Не указана

Offline Андрей Писарев  
#69 Оставлено : 30 августа 2013 г. 15:14:48(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,847
Мужчина
Российская Федерация

Сказал «Спасибо»: 584 раз
Поблагодарили: 2320 раз в 1818 постах
Пример?

CertOpenSystemStore
CertEnumCertificatesInStore
pCertContext - получили и читаем информацию...
Какую информацию и как декодировать - следующий пункт.

Напомните OID РНН?
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей Писарев  
#70 Оставлено : 30 августа 2013 г. 15:18:46(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,847
Мужчина
Российская Федерация

Сказал «Спасибо»: 584 раз
Поблагодарили: 2320 раз в 1818 постах
У нас аналог ИНН=1.2.643.3.131.1.1

Извлекается так:
CertGetNameString ( ... CERT_NAME_ATTR_TYPE,.., '1.2.643.3.131.1.1' ..)
Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
14 Страницы«<56789>»
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.