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

Уведомление

Icon
Error

2 Страницы<12
Опции
К последнему сообщению К первому непрочитанному
Offline Syrkov Sergey  
#11 Оставлено : 13 сентября 2010 г. 22:23:20(UTC)
Syrkov Sergey

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

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

Кстати, вот так получилось вытащить серийник, топорно, тупо, но работает

Код:

st,st1,str:String;

...
str:='0123456789ABCDEF';

st1:='';
 for i:=pUsercert.pCertInfo.SerialNumber.cbData-1 downto 0 do
    Begin
     st:=str[trunc(pUserCert.pCertInfo.SerialNumber.pbData[i]/16)+1]+ str[(pUserCert.pCertInfo.SerialNumber.pbData[i]-trunc(pUserCert.pCertInfo.SerialNumber.pbData[i]/16)*16)+1];
     st1:=st1+' '+st;
    End;
    memo1.Lines.Add('Serial Number: '+st1);
Offline Helior  
#12 Оставлено : 24 декабря 2010 г. 18:58:54(UTC)
Helior

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

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

А не подскажете, как получить из сертификата список расширений в виде strings?
Offline Kirill Sobolev  
#13 Оставлено : 24 декабря 2010 г. 19:30:21(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,732
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
Если это вопрос про использование CryptoAPI, то расширения хранятся в массиве CERT_CONTEXT::pCertInfo->rgExtension[]
Техническую поддержку оказываем тут
Наша база знаний
Offline Helior  
#14 Оставлено : 24 декабря 2010 г. 21:22:36(UTC)
Helior

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

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

Меня интересуют эти расширения


[IMG]http://www.imghost.in/?di=512932073348[/IMG]


А в cert.pCertInfo.rgExtension.pszObjId совершенно другое.
Или это надо CryptDecodeObject`ом вытаскивать, или я совсем не в ту сторону смотрю...
Есть ли где-нибудь наглядный пример подобной разборки сертификата?

Отредактировано пользователем 24 декабря 2010 г. 21:23:41(UTC)  | Причина: Не указана

Offline Dmitriy3008  
#15 Оставлено : 24 декабря 2010 г. 23:22:54(UTC)
Dmitriy3008

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 2 раз в 2 постах
Helior, два примерно одинаковых способа:

1)

Код:
type
  PCharArr = ^TCharArr;
  TCharArr = array[0..0] of PChar;

procedure CertGetEnhKeyUsage(Context: PCCERT_CONTEXT; Strings: TStrings);
var
  pEnhKeyUsage: PCERT_ENHKEY_USAGE;
  cbStructInfo: DWORD;
  I: Cardinal;
begin
  if not Assigned(Strings) then
    raise Exception.Create('ругаемся, что объект не создан...');

  if CertGetEnhancedKeyUsage(Context, 0, nil, @cbStructInfo) then
  begin
    GetMem(pEnhKeyUsage, cbStructInfo);
    try
      if CertGetEnhancedKeyUsage(Context, 0, pEnhKeyUsage, @cbStructInfo) then
      begin
        for I := 0 to pEnhKeyUsage^.cUsageIdentifier -1 do
          Strings.Add(PCharArr(pEnhKeyUsage^.rgpszUsageIdentifier)[I]);
      end;
    finally
      FreeMem(pEnhKeyUsage, cbStructInfo);
    end;
  end;
end;


2)
Код:
type
  PCharArr = ^TCharArr;
  TCharArr = array[0..0] of PChar;

procedure CertGetEnhKeyUsage(Context: PCCERT_CONTEXT; Strings: TStrings);
var
  pExtension: PCERT_EXTENSION;
  pEnhKeyUsage: PCERT_ENHKEY_USAGE;
  pvStructInfo: PVOID;
  cbStructInfo: DWORD;
  I: Cardinal;
begin
  if not Assigned(Strings) then
    raise Exception.Create('ругаемся, что объект не создан...');

  pExtension := CertFindExtension(szOID_ENHANCED_KEY_USAGE,
    Context^.pCertInfo^.cExtension, Context^.pCertInfo^.rgExtension);

  if Assigned(pExtension) and Win32Check(CryptDecodeObject(X509_ASN_ENCODING,
    X509_ENHANCED_KEY_USAGE, pExtension^.Value.pbData, pExtension^.Value.cbData, CRYPT_DECODE_NOCOPY_FLAG, nil, @cbStructInfo)) then
  begin
    GetMem(pvStructInfo, cbStructInfo);
    try
      CryptDecodeObject(X509_ASN_ENCODING, X509_ENHANCED_KEY_USAGE,
        pExtension^.Value.pbData, pExtension^.Value.cbData, 0, pvStructInfo, @cbStructInfo);

      pEnhKeyUsage := PCERT_ENHKEY_USAGE(pvStructInfo);

      for I := 0 to pEnhKeyUsage^.cUsageIdentifier -1 do
        Strings.Add(PCharArr(pEnhKeyUsage^.rgpszUsageIdentifier)[I]);

    finally
      FreeMem(pvStructInfo, cbStructInfo);
    end;
  end;
end;

Ты не из казначейства?
thanks 1 пользователь поблагодарил Dmitriy3008 за этот пост.
MotoArhangel оставлено 18.04.2015(UTC)
Offline Helior  
#16 Оставлено : 25 декабря 2010 г. 2:28:39(UTC)
Helior

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

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

Спасибо, товарищ )))))
Ты меня прям спас, а то я спать не мог.
Сижу теперь курю код.
Да, из казначейства. По расширениям понял?
Offline Dmitriy3008  
#17 Оставлено : 29 декабря 2010 г. 3:46:11(UTC)
Dmitriy3008

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 2 раз в 2 постах
Да, по расширениям. Рад помочь коллеге.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
2 Страницы<12
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.