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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline koledas  
#1 Оставлено : 11 сентября 2009 г. 0:15:35(UTC)
koledas

Статус: Участник

Группы: Участники
Зарегистрирован: 10.09.2009(UTC)
Сообщений: 12
Мужчина
Откуда: кемерово

Подскажите пожалуйста, как через CryptoAPI получить "дату следующей публикации CRL" (не обновления, а именно публикации).
Контекст CRL получил, а вот что дальше с ним делать не пойму.
Пользователь koledas прикрепил следующие файлы:
1.JPG (36kb) загружен 312 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
Offline Dmitriy3008  
#2 Оставлено : 16 сентября 2009 г. 19:08:19(UTC)
Dmitriy3008

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 2 раз в 2 постах
CertFindExtension ( szOID_CRL_NEXT_PUBLISH "1.3.6.1.4.1.311.21.4", потом CryptDecodeObject, а дальше не знаю, тут посмотрите
Offline koledas  
#3 Оставлено : 16 сентября 2009 г. 20:00:15(UTC)
koledas

Статус: Участник

Группы: Участники
Зарегистрирован: 10.09.2009(UTC)
Сообщений: 12
Мужчина
Откуда: кемерово

Спасибо, попробую!
Offline koledas  
#4 Оставлено : 16 сентября 2009 г. 21:34:27(UTC)
koledas

Статус: Участник

Группы: Участники
Зарегистрирован: 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????????????????).
Чувствую что осталось не много, помогите пожалуйста...
Pray
Offline Dmitriy3008  
#5 Оставлено : 16 сентября 2009 г. 22:15:13(UTC)
Dmitriy3008

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 2 раз в 2 постах
Выложите ваш CRL куда-нибудь, например, сюда. Хочу попробовать, а нет такого расширения.
Offline koledas  
#6 Оставлено : 16 сентября 2009 г. 22:17:19(UTC)
koledas

Статус: Участник

Группы: Участники
Зарегистрирован: 10.09.2009(UTC)
Сообщений: 12
Мужчина
Откуда: кемерово

Offline Dmitriy3008  
#7 Оставлено : 17 сентября 2009 г. 2:01:58(UTC)
Dmitriy3008

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

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

Offline Dmitriy3008  
#8 Оставлено : 17 сентября 2009 г. 2:32:45(UTC)
Dmitriy3008

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 2 раз в 2 постах
raise Exception.CreateFmt('Ошибка: %d', [GetLastError]) лучше убрать, т.к. Win32Check и так вызовет исключение
Offline koledas  
#9 Оставлено : 17 сентября 2009 г. 11:20:12(UTC)
koledas

Статус: Участник

Группы: Участники
Зарегистрирован: 10.09.2009(UTC)
Сообщений: 12
Мужчина
Откуда: кемерово

Applause Applause Applause СУПЕР, СПАСИБО! ВСЁ ПОЛУЧИЛОСЬ Applause Applause Applause
Offline koledas  
#10 Оставлено : 17 сентября 2009 г. 13:35:35(UTC)
koledas

Статус: Участник

Группы: Участники
Зарегистрирован: 10.09.2009(UTC)
Сообщений: 12
Мужчина
Откуда: кемерово

Результатом этого явилась программа для автоматического обновления списков отозванных сертификатов.

Данная программа загружает списки сертификатов, указанные в настройках и устанавливает их.
Загрузка и установка проходят автоматически (можно и в ручную), в зависимости от времени действия CRL. Существует возможность работать через прокси.
Программа может работать как на одном компьютере, так и на 2х. Это необходимо если на том компьютере где нужно установить сертификаты нет доступа в Интернет. В этом случае программа устанавливается на сервер(от куда загружаем) и на клиента(куда устанавливаем). Взаимосвязь между ними происходит через файловую систему(сетевой каталог).
Просьба сообщить если найдете какие-то ошибки, доработаю...
Вложение(я):
UpdateCRL_2.0.rar (272kb) загружен 38 раз(а).

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