Статус: Участник
Группы: Участники
Зарегистрирован: 10.09.2009(UTC) Сообщений: 12  Откуда: кемерово
|
Подскажите пожалуйста, как через CryptoAPI получить "дату следующей публикации CRL" (не обновления, а именно публикации). Контекст CRL получил, а вот что дальше с ним делать не пойму. Пользователь koledas прикрепил следующие файлы:  1.JPG (36kb) загружен 312 раз(а).У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 30.08.2009(UTC) Сообщений: 52
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 2 раз в 2 постах
|
CertFindExtension ( szOID_CRL_NEXT_PUBLISH "1.3.6.1.4.1.311.21.4", потом CryptDecodeObject, а дальше не знаю, тут посмотрите
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 10.09.2009(UTC) Сообщений: 12  Откуда: кемерово
|
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 10.09.2009(UTC) Сообщений: 12  Откуда: кемерово
|
Дошел до следующего: ext:=CertFindExtension('1.3.6.1.4.1.311.21.4',context.pCrlInfo.cExtension, context.pCrlInfo.rgExtension); CryptDecodeObjectEx((X509_ASN_ENCODING or PKCS_7_ASN_ENCODING), X509_UNICODE_NAME_VALUE, ext.Value.pbData, ext.Value.cbData, CRYPT_DECODE_ALLOC_FLAG, nil, @TemplateExtName, TemplateExtNameSiz ); TemplateName := LPWSTR(TemplateExtName.Value.pbData); showmessage(TemplateName); на выходе иероглифы (????H?????????????????????????????????????????????(?????????????????????0????????????????). Чувствую что осталось не много, помогите пожалуйста... 
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 30.08.2009(UTC) Сообщений: 52
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 2 раз в 2 постах
|
Выложите ваш CRL куда-нибудь, например, сюда. Хочу попробовать, а нет такого расширения.
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 10.09.2009(UTC) Сообщений: 12  Откуда: кемерово
|
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 30.08.2009(UTC) Сообщений: 52
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 2 раз в 2 постах
|
Получилось вот так: Код:function GetNextCRLPublish(Context: PCCRL_CONTEXT): TDateTime;
const
szOID_CRL_NEXT_PUBLISH = '1.3.6.1.4.1.311.21.4';
var
pExtension: PCERT_EXTENSION;
cbStructInfo: DWORD;
pvStructInfo: PVOID;
FileTime: PFileTime;
begin
pExtension := CertFindExtension(szOID_CRL_NEXT_PUBLISH, Context^.pCrlInfo^.cExtension, Context^.pCrlInfo^.rgExtension);
if Assigned(pExtension) and Win32Check(CryptDecodeObject(X509_ASN_ENCODING or PKCS_7_ASN_ENCODING,
PKCS_UTC_TIME, pExtension^.Value.pbData, pExtension^.Value.cbData, CRYPT_DECODE_NOCOPY_FLAG, nil, @cbStructInfo)) then
begin
GetMem(pvStructInfo, cbStructInfo);
try
CryptDecodeObject(X509_ASN_ENCODING or PKCS_7_ASN_ENCODING, PKCS_UTC_TIME,
pExtension^.Value.pbData, pExtension^.Value.cbData, 0, pvStructInfo, @cbStructInfo);
FileTime := PFileTime(pvStructInfo);
Result := DecodeFileTime(FileTime^);
finally
FreeMem(pvStructInfo);
end;
end
else begin
raise Exception.CreateFmt('Ошибка: %d', [GetLastError]);
end;
end;
{ Преобразуем TFileTime в TDateTime }
function DecodeFileTime(FileTime : TFileTime): TDateTime;
var
SystemTime : TSystemTime;
ModifiedTime : TFileTime;
begin
FileTimeToLocalFileTime( FileTime, ModifiedTime );
FileTimeToSystemTime( ModifiedTime, SystemTime );
Result := SystemTimeToDateTime( SystemTime );
end;
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 30.08.2009(UTC) Сообщений: 52
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 2 раз в 2 постах
|
raise Exception.CreateFmt('Ошибка: %d', [GetLastError]) лучше убрать, т.к. Win32Check и так вызовет исключение
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 10.09.2009(UTC) Сообщений: 12  Откуда: кемерово
|
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 10.09.2009(UTC) Сообщений: 12  Откуда: кемерово
|
Результатом этого явилась программа для автоматического обновления списков отозванных сертификатов. Данная программа загружает списки сертификатов, указанные в настройках и устанавливает их. Загрузка и установка проходят автоматически (можно и в ручную), в зависимости от времени действия CRL. Существует возможность работать через прокси. Программа может работать как на одном компьютере, так и на 2х. Это необходимо если на том компьютере где нужно установить сертификаты нет доступа в Интернет. В этом случае программа устанавливается на сервер(от куда загружаем) и на клиента(куда устанавливаем). Взаимосвязь между ними происходит через файловую систему(сетевой каталог). Просьба сообщить если найдете какие-то ошибки, доработаю... Вложение(я):  UpdateCRL_2.0.rar (272kb) загружен 38 раз(а).У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close