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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Сергей_1970_05_20  
#1 Оставлено : 28 сентября 2023 г. 19:49:31(UTC)
Сергей_1970_05_20

Статус: Новичок

Группы: Участники
Зарегистрирован: 27.09.2023(UTC)
Сообщений: 7

Сказал(а) «Спасибо»: 3 раз
Здравствуйте! Понадобилось мне сделать, чтобы программным путём можно было получать значения поля «Следующее обновление» определённого (сымпортированного) списка отзыва сертификатов (СОС) из хранилища сертификатов. Желательно, конечно, (но не обязательно) чтобы можно было это делать без экспорта СОС в файл. Как это сделать программным путём? Может, можете привести листинг программы для этого (желательно на Delphi) или утилиту какую-нибудь, с помощью которой можно это делать?
Offline Андрей *  
#2 Оставлено : 28 сентября 2023 г. 23:37:30(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
Сергей_1970_05_20 оставлено 29.09.2023(UTC)
Offline Сергей_1970_05_20  
#3 Оставлено : 29 сентября 2023 г. 5:45:54(UTC)
Сергей_1970_05_20

Статус: Новичок

Группы: Участники
Зарегистрирован: 27.09.2023(UTC)
Сообщений: 7

Сказал(а) «Спасибо»: 3 раз
Спасибо за ответ!

Автор: Андрей * Перейти к цитате
или переделать на чтение из хранилища
А как обратиться к конкретному СОС в хранилище?
Offline Андрей *  
#4 Оставлено : 29 сентября 2023 г. 10:07:58(UTC)
Андрей *

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

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

Сказал «Спасибо»: 579 раз
Поблагодарили: 2307 раз в 1807 постах
Автор: Сергей_1970_05_20 Перейти к цитате
Спасибо за ответ!

Автор: Андрей * Перейти к цитате
или переделать на чтение из хранилища
А как обратиться к конкретному СОС в хранилище?


По реквизитам в цикле пройти?
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
Сергей_1970_05_20 оставлено 29.09.2023(UTC)
Offline Сергей_1970_05_20  
#5 Оставлено : 29 сентября 2023 г. 19:43:31(UTC)
Сергей_1970_05_20

Статус: Новичок

Группы: Участники
Зарегистрирован: 27.09.2023(UTC)
Сообщений: 7

Сказал(а) «Спасибо»: 3 раз
Да, спасибо! Буду пробовать...
Offline Сергей_1970_05_20  
#6 Оставлено : 12 октября 2023 г. 22:57:36(UTC)
Сергей_1970_05_20

Статус: Новичок

Группы: Участники
Зарегистрирован: 27.09.2023(UTC)
Сообщений: 7

Сказал(а) «Спасибо»: 3 раз
Автор: Андрей * Перейти к цитате
По реквизитам в цикле пройти?
А как получить значение поля Издатель (Поставщик, Эмитент) СОС исходя из CRL_INFO? Что-то не получается...

Отредактировано пользователем 13 октября 2023 г. 19:51:27(UTC)  | Причина: Не указана

Offline Андрей *  
#7 Оставлено : 12 октября 2023 г. 23:20:55(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-ам ...

 


Выбирайте на вкус...
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
Сергей_1970_05_20 оставлено 13.10.2023(UTC)
Offline Сергей_1970_05_20  
#8 Оставлено : 13 октября 2023 г. 10:52:02(UTC)
Сергей_1970_05_20

Статус: Новичок

Группы: Участники
Зарегистрирован: 27.09.2023(UTC)
Сообщений: 7

Сказал(а) «Спасибо»: 3 раз
Спасибо! Всё получилось! После некоторой возни с типами данных...
Offline Сергей_1970_05_20  
#9 Оставлено : 13 октября 2023 г. 12:32:50(UTC)
Сергей_1970_05_20

Статус: Новичок

Группы: Участники
Зарегистрирован: 27.09.2023(UTC)
Сообщений: 7

Сказал(а) «Спасибо»: 3 раз
А можно привести ещё функцию Get_OID? Нигде не нашёл. А самому написать ─ займёт времени прилично.

Отредактировано пользователем 13 октября 2023 г. 19:51:02(UTC)  | Причина: Не указана

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.