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

Уведомление

Icon
Error

2 Страницы<12
Опции
К последнему сообщению К первому непрочитанному
Offline AlexEr81  
#11 Оставлено : 24 января 2014 г. 21:55:48(UTC)
AlexEr81

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

Группы: Участники
Зарегистрирован: 09.11.2012(UTC)
Сообщений: 65
Откуда: Ростовская область

Сказал(а) «Спасибо»: 9 раз
Поблагодарили: 1 раз в 1 постах
добрый день. у меня не получается прочитать данные из расширения 1.2.643.100.112
вот код:
Код:

function issuerSigNToolToStr(rgExtension:PCERT_EXTENSION;cExtension:dword):string;
var     pExtension:PCERT_EXTENSION;
 cbStructInfo, i: Cardinal;
         pvStructInfo: Cardinal;
type   PIssuerSigNTool=^IssuerSigNTool;
       IssuerSigNTool = record
       sigNTool     :String[200];
       cATool       :string[200];
       signToolCert :String[100];
       cAToolCert   :String[100];
end;
  var szOID: LPSTR;
         ISNT:  pIssuerSigNTool;
begin
szOid:='1.2.643.100.112';
 pExtension := CertFindExtension(szOID,cExtension,rgExtension);

 if (Assigned(pExtension) and CryptDecodeObject(X509_ASN_ENCODING or PKCS_7_ASN_ENCODING, X509_ANY_STRING,
      pExtension^.Value.pbData, pExtension^.Value.cbData, 0, nil, @cbStructInfo)) then
  begin
   pvStructInfo := LocalAlloc(LMEM_FIXED, cbStructInfo);
   if pvStructInfo <> 0 then
    begin
     CryptDecodeObject(X509_ASN_ENCODING or PKCS_7_ASN_ENCODING, X509_ANY_STRING, pExtension^.Value.pbData,
                       pExtension^.Value.cbData, 0, Pointer(pvStructInfo), @cbStructInfo);

     ISNT := pIssuerSigNTool(pvStructInfo);
          result:=isnt.cATool+', '+isnt.cAToolCert+', '+isnt.sigNTool+', '+isnt.signToolCert;

    end;
     LocalFree(pvStructInfo);
  end;
end;



брал серт. криптопро ‎02 ce b5 a6 20 bc 28 9e 4e 36 b7 7c 47 42 1f b5
получаю результат функции:
Цитата:
/121-1859 от 17.06.2012 OСертификат соответствия № СФ/128-1822 от 01.06.2012««««««««○�

подскажите пожалуйста что не так ?
Offline Юрий  
#12 Оставлено : 25 января 2014 г. 8:05:11(UTC)
Юрий

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

Группы: Участники
Зарегистрирован: 22.01.2008(UTC)
Сообщений: 675
Мужчина
Российская Федерация
Откуда: Йошкар-Ола

Сказал «Спасибо»: 3 раз
Поблагодарили: 95 раз в 68 постах
Автор: AlexEr81 Перейти к цитате
подскажите пожалуйста что не так ?

Retrieving Data of Unknown Length

С уважением,
Юрий Строжевский
Offline AlexEr81  
#13 Оставлено : 25 января 2014 г. 23:56:25(UTC)
AlexEr81

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

Группы: Участники
Зарегистрирован: 09.11.2012(UTC)
Сообщений: 65
Откуда: Ростовская область

Сказал(а) «Спасибо»: 9 раз
Поблагодарили: 1 раз в 1 постах
наверно с помощью CryptDecodeObject структуру IssuerSigNTool не получить т.к. для Crypt32 это
"Неизвестный тип расширения"(как пишет certutil.exe)

сделал так:
Код:
....
var size: dword;
 nameString: PChar;
 
szOid:='1.2.643.100.112';
 pExtension := CertFindExtension(szOID,cExtension,rgExtension);
 CryptBinaryToString(pExtension^.Value.pbData, pExtension^.Value.cbData,CRYPT_STRING_BINARY,nil,size);
 if size > 1 then
 begin
 nameString := StrAlloc(size);
 CryptBinaryToString(pExtension^.Value.pbData, pExtension^.Value.cbData,CRYPT_STRING_BINARY,namestring,size);
end;

получилось
namestring=0‚$ +"КриптоПро CSP" (версия 3.6) S"Удостоверяющий центр "КриптоПро УЦ" версии 1.5 OСертификат соответствия № СФ/121-1859 от 17.06.2012 OСертификат соответствия № СФ/128-1822 от 01.06.20121�
а как получить в виде структуры?
Цитата:

type PIssuerSigNTool=^IssuerSigNTool;
IssuerSigNTool = record
sigNTool :String[200];
cATool :string[200];
signToolCert :String[100];
cAToolCert :String[100];
end;

Отредактировано пользователем 26 января 2014 г. 0:06:39(UTC)  | Причина: Не указана

Offline Kirill Sobolev  
#14 Оставлено : 27 января 2014 г. 9:55:51(UTC)
Кирилл Соболев

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

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

Поблагодарили: 177 раз в 168 постах
IssuerSignTool ::= SEQUENCE {
signTool UTF8String SIZE(1.200),
cATool UTF8String SIZE(1..200),
signToolCert UTF8String SIZE(1.. 100),
cAToolCert UTF8String SIZE(1.100) }.
Соответственно CryptDecodeObject(..,X509_SEQUENCE_OF_ANY,..) и дальше каждое поле декодировать из UTF8String.
Техническую поддержку оказываем тут
Наша база знаний
Offline AlexEr81  
#15 Оставлено : 29 января 2014 г. 12:47:12(UTC)
AlexEr81

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

Группы: Участники
Зарегистрирован: 09.11.2012(UTC)
Сообщений: 65
Откуда: Ростовская область

Сказал(а) «Спасибо»: 9 раз
Поблагодарили: 1 раз в 1 постах
спасибо!
сделал так:
Код:

type        PCRYPT_DER_BLOB = array of CRYPT_DER_BLOB;
var     pExtension:PCERT_EXTENSION;   
 cbStructInfo, i: Cardinal;
pvStructInfo: Cardinal;
szOID: LPSTR;
CSOA: PCRYPT_SEQUENCE_OF_ANY;
        F: PCRYPT_DER_BLOB;
begin
szOid:='1.2.643.100.112';
pExtension := CertFindExtension(szOID,cExtension,rgExtension);  
 if (Assigned(pExtension) and CryptDecodeObject(X509_ASN_ENCODING or PKCS_7_ASN_ENCODING, X509_SEQUENCE_OF_ANY,
      pExtension^.Value.pbData, pExtension^.Value.cbData, 0, nil, @cbStructInfo)) then
  begin
   pvStructInfo := LocalAlloc(LMEM_FIXED, cbStructInfo);
   if pvStructInfo <> 0 then
    begin
     CryptDecodeObject(X509_ASN_ENCODING or PKCS_7_ASN_ENCODING, X509_SEQUENCE_OF_ANY, pExtension^.Value.pbData,
                       pExtension^.Value.cbData, 0, pointer(pvStructInfo), @cbStructInfo);

       CSOA := PCRYPT_SEQUENCE_OF_ANY(pvStructInfo);
     f:=PCRYPT_DER_BLOB(CSOA.rgValue);
     IssuerSigNTool.sigNTool:=ByteArrayToUTF8(f[0].pbData,f[0].cbData);
      IssuerSigNTool.cATool:=ByteArrayToUTF8(f[1].pbData,f[1].cbData);
      IssuerSigNTool.signToolCert:=ByteArrayToUTF8(f[2].pbData,f[2].cbData);
     IssuerSigNTool.cAToolCert:=ByteArrayToUTF8(f[3].pbData,f[3].cbData);
.....
function ByteArrayToUTF8(pbData: PByte; cbData: DWORD): String;
type PByteArray = ^TByteArray;
   TByteArray = Array[0..32767] of Byte;
var
I: Integer;
S: String;
begin
Result := '';
if not Assigned(pbData) or (cbData <= 0) then
Exit;
for I := cbData - 1 downto 2 do
begin
S := chr(PByteArray(pbData)^[i]);
Result := S + Result
end;
end;         


получаю то что надо, но смущают 2 лишних байта в полях, потому их откидываю при переводе с PByte в символы. правилен ли такой код?
Offline Kirill Sobolev  
#16 Оставлено : 29 января 2014 г. 13:30:10(UTC)
Кирилл Соболев

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

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

Поблагодарили: 177 раз в 168 постах
Неправилен.
Для декодирования из UTF8String есть своя константа в CryptDecodeObject - X509_ANY_STRING.
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Кирилл Соболев за этот пост.
AlexEr81 оставлено 29.01.2014(UTC)
Offline AlexEr81  
#17 Оставлено : 29 января 2014 г. 23:42:25(UTC)
AlexEr81

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

Группы: Участники
Зарегистрирован: 09.11.2012(UTC)
Сообщений: 65
Откуда: Ростовская область

Сказал(а) «Спасибо»: 9 раз
Поблагодарили: 1 раз в 1 постах
Автор: Kirill Sobolev Перейти к цитате
Неправилен.
Для декодирования из UTF8String есть своя константа в CryptDecodeObject - X509_ANY_STRING.

спасибо! понял наконец-то
с помощью CryptDecodeObject - X509_ANY_STRING получил PCERT_NAME_VALUE
потом CertRDNValueToStr(CERT_RDN_UTF8_STRING... и получаю то что надо
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы<12
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.