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

Уведомление

Icon
Error

3 Страницы<123
Опции
К последнему сообщению К первому непрочитанному
Offline city-med.info  
#41 Оставлено : 1 декабря 2021 г. 2:48:53(UTC)
city-med.info

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

Группы: Участники
Зарегистрирован: 25.03.2019(UTC)
Сообщений: 9
Российская Федерация
Откуда: Хабаровск

Сказал(а) «Спасибо»: 1 раз
Автор: Shuraken Перейти к цитате
Благодарю, разобрался. Необходимо выгрузить PCCERT_CONTEXT.pbCertEncoded.


ну вот же, я делаю так:
Result:=ByteArrayToStr(Cert.pbCertEncoded, Cert.cbCertEncoded);

и чет не взлетает.
ты можешь готовую функцию выложить? готов обсудить условия, если в публичный доступ не желаешь делиться
Online Андрей *  
#42 Оставлено : 1 декабря 2021 г. 9:48:08(UTC)
Андрей *

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

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

Сказал «Спасибо»: 393 раз
Поблагодарили: 1611 раз в 1238 постах
Автор: city-med.info Перейти к цитате
Автор: Shuraken Перейти к цитате
Благодарю, разобрался. Необходимо выгрузить PCCERT_CONTEXT.pbCertEncoded.


ну вот же, я делаю так:
Result:=ByteArrayToStr(Cert.pbCertEncoded, Cert.cbCertEncoded);

и чет не взлетает.
ты можешь готовую функцию выложить? готов обсудить условия, если в публичный доступ не желаешь делиться


Кто, что делает?
А что делает ByteArrayToStr, кто-то смотрел?

Ещё раз: что требуется, что на выходе и почему ошибка?
Есть время вчитаться в детали?

Или взять сертификат, открыть в hex редакторе и сравнить, с тем, что на руках от функции?

p.s. а пробелы никак не влияют же?
Техническую поддержку оказываем тут
Наша база знаний
Online Андрей *  
#43 Оставлено : 1 декабря 2021 г. 10:30:36(UTC)
Андрей *

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

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

Сказал «Спасибо»: 393 раз
Поблагодарили: 1611 раз в 1238 постах
Автор: city-med.info Перейти к цитате
ответа нет, придется заново путь проходить
очень жаль что в документации нет примеров на delphi

на данный момент непонятно как получить "Массив байт сертификата, используемого для создания ЭП, в виде строки шестнадцатеричных цифр."
это параметр certificateHEX

использовал два варианта, через CADESCOM.Export и через функции WCrypt2, и не один не сработал. Что сделал не так?

Код:
function StrToHex(source: String): String;
var i:integer;
    c:Char;
    s:String;
begin
    s := '';
    for i:=1 to Length(source) do
    begin
      c := source[i];
      s := s +  IntToHex(Integer(c),2)+' ';
    end;
    result := s;
end;

function ByteArrayToStr(pbData: PByte; cbData: DWORD): String;
var I, J: Integer;
    S: String;
begin
  Result := '';
  if not Assigned(pbData) or (cbData <= 0) then Exit;
  for I := 0 to cbData - 1 do begin
    J := PByteArray(pbData)^[i];
    S := IntToHex(J, 2);
    if (I > 0) and (I and 1 = 0) then
    S := S + ' ';
    Result := S + Result;
  end;
end;

function TForm1.GetCertificateHEX(Thumbprint: String; var Cert: PCCERT_CONTEXT): string;
var
 buf         :   array of byte;
 buflen      :   DWORD;
 hStore      :   HCERTSTORE;
 certHash    :   CRYPT_HASH_BLOB;
 thumb       :   string;
 certValue: string;
begin
 Result      :=  '';
 if Assigned(Cert) then CertFreeCertificateContext(Cert);
 thumb       :=  trim(Thumbprint);
 if length(thumb)=0 then Exit;
 buflen      :=  length(thumb) div 2;
 SetLength(buf,buflen);
 HexToBin(PChar(thumb),PChar(buf),buflen);

 certHash.cbData:= buflen;
 certHash.pbData:= PByte(buf);

 //ищем сертификат в CURRENT_USER\MY\
 hStore  :=  CertOpenSystemStore(0,'MY');
 Cert    :=  CertFindCertificateInStore(hStore,
                                        PKCS_7_ASN_ENCODING or X509_ASN_ENCODING,
                                        0,
                                        CERT_FIND_SHA1_HASH,
                                        @certHash,
                                        nil);
 //Освобождаем ресурсы хранилища
 CertCloseStore(hStore, CERT_CLOSE_STORE_CHECK_FLAG);

 If not Assigned(Cert) then Exit;
 SetLength(certValue, Cert.pCertInfo.SubjectPublicKeyInfo.PublicKey.cbData);
 Result:=ByteArrayToStr(Cert.pbCertEncoded, Cert.cbCertEncoded);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  MyStore,MyCertificates,MyCert:variant;
  Cert: PCCERT_CONTEXT;
  i, cnt: integer;
begin
   MyStore := CreateOLEObject('CADESCOM.Store');
   MyStore.Open(2, 'My', 0);//(CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE, CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);
   MyCertificates := MyStore.Certificates;//.Find(CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME, certSubjectName);
   cnt:=MyCertificates.Count;
   if (cnt = 0) then begin application.messagebox('в личном хранилище ключей не найдено',''); exit; end;

   for i:=1 to cnt do begin
     MyCert := MyCertificates.Item[i];
     Memo1.Lines.Add('');
     Memo1.Lines.Add(MyCert.PrivateKey);
     Memo1.Lines.Add(MyCert.serialnumber);      //добавляем в мемо серийный номер сертификата
     Memo1.Lines.Add(MyCert.SubjectName);
     Memo1.Lines.Add('');
     Memo1.Lines.Add(MyCert.Thumbprint);
     Memo1.Lines.Add('');
     Memo1.Lines.Add(StrToHex(MyCert.[h]Export[/h]));   
     Memo1.Lines.Add('');
     Memo1.Lines.Add([h]GetCertificateHEX[/h](MyCert.Thumbprint, Cert));
   end;
end;



Memo1.Lines.Add(StrToHex(MyCert.Export));

А если проверить, что выдаёт Export?
Задача - перевести байты (сертификата) в hex-строку,
а не отформатированную строку base64 в hex-строку.

Про GetCertificateHEX - почему там пробелы выдаются?

Техническую поддержку оказываем тут
Наша база знаний
Offline city-med.info  
#44 Оставлено : 3 декабря 2021 г. 2:55:01(UTC)
city-med.info

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

Группы: Участники
Зарегистрирован: 25.03.2019(UTC)
Сообщений: 9
Российская Федерация
Откуда: Хабаровск

Сказал(а) «Спасибо»: 1 раз
Автор: Андрей * Перейти к цитате
Задача - перевести байты (сертификата) в hex-строку,
а не отформатированную строку base64 в hex-строку.



с помощью Александра разобрался с hex-сертификатом, ниже рабочий код функции, поиск сертификата в хранилище происходит по отпечатку:



сейчас вопрос про оформление.
можно ли в принципе передать объект в виде строки? типа такого:

Код:
    jso.CPSign(GetCertificateHEX(MyCert.Thumbprint, Cert),      // certificateHEX
               '',                                              // pin
               1,                                               // pdfLockMode
               'Причина: тест',                                 // signReason
               'Местоположение: тестовое',                      // signLocation
               'контакт',                                       // signContactInfo
               'http://qs.cryptopro.ru/tsp/tsp.srf',            // timeStamp
               false,                                           // bShowCertificatesDialog
               false,                                           // bShowSignDialogs
               '{pageNumber: 0, coords: [122, 539, 422, 439], customAppearance: '
               +'{font: "Calibri", borderStyle: border.s, borderColor: color.black, '
               +' borderWidth: 1, textFields: [ {text: " ДОКУМЕНТ ПОДПИСАН \nЭЛЕКТРОННОЙ ПОДПИСЬЮ", '
               +' coords: [50, 100, 250, 60]}, {type: "CN", coords: [10, 60, 300, 40], fontSize: 11}, '
               +'{type: "SerialNumber", coords: [10, 40, 300, 20], fontSize: 11 }, '
               +'{ text: "Компания: ООО \"КРИПТО-ПРО\"", coords: [10, 20, 300, 0], fontSize: 11}]}}'));


или обязательно надо создавать объект
и еще: очень хотелось бы обойтись без правки файлов акробата, как это сделал Александр
Offline city-med.info  
#45 Оставлено : 6 декабря 2021 г. 2:02:40(UTC)
city-med.info

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

Группы: Участники
Зарегистрирован: 25.03.2019(UTC)
Сообщений: 9
Российская Федерация
Откуда: Хабаровск

Сказал(а) «Спасибо»: 1 раз
Автор: city-med.info Перейти к цитате
или обязательно надо создавать объект


похоже что так, ибо все игры со строкой приводят к ответу: Неправильно задан параметр отбражения подписи.

прошу привести рабочий пример создания объекта customAppearance

Offline Shuraken  
#46 Оставлено : 6 декабря 2021 г. 2:20:30(UTC)
Shuraken

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

Группы: Участники
Зарегистрирован: 30.05.2018(UTC)
Сообщений: 36
Российская Федерация

Сказал(а) «Спасибо»: 5 раз
Поблагодарили: 2 раз в 2 постах
Автор: city-med.info Перейти к цитате
Автор: city-med.info Перейти к цитате
или обязательно надо создавать объект


похоже что так, ибо все игры со строкой приводят к ответу: Неправильно задан параметр отбражения подписи.

прошу привести рабочий пример создания объекта customAppearance



Посмотрите начальные посты темы. Там указано, что и как менять в js-файле подписи.
Offline city-med.info  
#47 Оставлено : 6 декабря 2021 г. 2:31:43(UTC)
city-med.info

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

Группы: Участники
Зарегистрирован: 25.03.2019(UTC)
Сообщений: 9
Российская Федерация
Откуда: Хабаровск

Сказал(а) «Спасибо»: 1 раз
Автор: Shuraken Перейти к цитате
Посмотрите начальные посты темы. Там указано, что и как менять в js-файле подписи.


мне это понятно, и такое решение заработает
но хотелось бы обойтись без костылей в виде правки файлов криптоПро
это прям костыль костыльный. Плюс придется делать правленные версии скрипта при выходе каждой новой версии КриптоПро ПДФ.
Очень неудобно будет внедрять решение.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
3 Страницы<123
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.