Статус: Новичок
Группы: Участники
Зарегистрирован: 27.09.2023(UTC) Сообщений: 7
Сказал(а) «Спасибо»: 3 раз
|
Здравствуйте! Понадобилось мне сделать, чтобы программным путём можно было получать значения поля «Следующее обновление» определённого (сымпортированного) списка отзыва сертификатов (СОС) из хранилища сертификатов. Желательно, конечно, (но не обязательно) чтобы можно было это делать без экспорта СОС в файл. Как это сделать программным путём? Может, можете привести листинг программы для этого (желательно на Delphi) или утилиту какую-нибудь, с помощью которой можно это делать?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,766   Сказал «Спасибо»: 579 раз Поблагодарили: 2307 раз в 1807 постах
|
Здравствуйте. +проверку результатов функций добавить Код:
uses jwawincrypt
const
szOID_CRL_NEXT_PUBLISH = '1.3.6.1.4.1.311.21.4';
var
Context: PCCRL_CONTEXT;
pExtension: PCERT_EXTENSION;
cbStructInfo: DWORD;
pvStructInfo: POINTER;
FileTime: PFileTime;
lpszStructType: LPCSTR;
чтение из файла (или переделать на чтение из хранилища)
CryptQueryObject(CERT_QUERY_OBJECT_FILE, CRLFileName, CERT_QUERY_CONTENT_FLAG_CRL, CERT_QUERY_FORMAT_FLAG_ALL , 0, 0, 0, 0, 0, 0, @CRL_CONTEXT)
pExtension := CertFindExtension(szOID_CRL_NEXT_PUBLISH, Context^.pCrlInfo^.cExtension, Context^.pCrlInfo^.rgExtension);
CryptDecodeObject(ENCODING_TYPE, lpszStructType, pExtension^.Value.pbData, pExtension^.Value.cbData, 0 , nil, cbStructInfo)
GetMem(pvStructInfo, cbStructInfo);
CryptDecodeObject(ENCODING_TYPE, lpszStructType, pExtension^.Value.pbData, pExtension^.Value.cbData, 0, pvStructInfo, cbStructInfo)
FileTime := PFileTime(pvStructInfo);
DT := DecodeFileTime(FileTime^);
FreeMem(pvStructInfo);
Отредактировано пользователем 28 сентября 2023 г. 23:38:01(UTC)
| Причина: Не указана |
|
 1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 27.09.2023(UTC) Сообщений: 7
Сказал(а) «Спасибо»: 3 раз
|
Спасибо за ответ! Автор: Андрей *  или переделать на чтение из хранилища А как обратиться к конкретному СОС в хранилище?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,766   Сказал «Спасибо»: 579 раз Поблагодарили: 2307 раз в 1807 постах
|
Автор: Сергей_1970_05_20  Спасибо за ответ! Автор: Андрей *  или переделать на чтение из хранилища А как обратиться к конкретному СОС в хранилище? По реквизитам в цикле пройти? |
|
 1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 27.09.2023(UTC) Сообщений: 7
Сказал(а) «Спасибо»: 3 раз
|
Да, спасибо! Буду пробовать...
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 27.09.2023(UTC) Сообщений: 7
Сказал(а) «Спасибо»: 3 раз
|
Автор: Андрей *  По реквизитам в цикле пройти? А как получить значение поля Издатель (Поставщик, Эмитент) СОС исходя из CRL_INFO? Что-то не получается... Отредактировано пользователем 13 октября 2023 г. 19:51:27(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,766   Сказал «Спасибо»: 579 раз Поблагодарили: 2307 раз в 1807 постах
|
Автор: Сергей_1970_05_20  Автор: Андрей *  По реквизитам в цикле пройти? А как получить значение поля Издадель (Поставщик, Эмитент) СОС исходя из CRL_INFO? Что-то не получается... Код:
function DecodeName(Source: PCERT_NAME_BLOB; dwStrType: DWORD = CERT_OID_NAME_STR): AnsiString;
var
iLength: DWORD;
begin
iLength := CertNameToStr(MY_ENCODING_TYPE, PCERT_NAME_BLOB(Source), dwStrType, nil, 0);
SetLength(Result, iLength);
iLength := CertNameToStrA(MY_ENCODING_TYPE, PCERT_NAME_BLOB(Source), dwStrType, PAnsiChar(Result), iLength);
SetLength(Result, iLength);
end;
варианты:
Info1:= DecodeName(@CRL_CONTEXT.pCrlInfo.Issuer, 1);
Info2:= DecodeName(@CRL_CONTEXT.pCrlInfo.Issuer, 2);
Info3:= DecodeName(@CRL_CONTEXT.pCrlInfo.Issuer, 3);
CommonName := Get_OID(Info2, szOID_COMMON_NAME);
EMail := Get_OID(Info2, szOID_RSA_emailAddr);
...
и другие по OID-ам ...
Выбирайте на вкус... |
|
 1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 27.09.2023(UTC) Сообщений: 7
Сказал(а) «Спасибо»: 3 раз
|
Спасибо! Всё получилось! После некоторой возни с типами данных...
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 27.09.2023(UTC) Сообщений: 7
Сказал(а) «Спасибо»: 3 раз
|
А можно привести ещё функцию Get_OID? Нигде не нашёл. А самому написать ─ займёт времени прилично. Отредактировано пользователем 13 октября 2023 г. 19:51:02(UTC)
| Причина: Не указана
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close