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

Уведомление

Icon
Error

4 Страницы<1234>
Опции
К последнему сообщению К первому непрочитанному
Offline tonax  
#11 Оставлено : 22 июля 2021 г. 11:58:35(UTC)
tonax

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

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

Сказал(а) «Спасибо»: 6 раз
Автор: Андрей * Перейти к цитате
смотрите в документацию, описание интерфейсов, методов\свойств.
В данном случае - GetSignerCertificate в примере: Создание подписанного сообщения



Что-то не получается на Delphi перевести
Offline Андрей *  
#12 Оставлено : 22 июля 2021 г. 12:27:41(UTC)
Андрей *

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

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

Сказал «Спасибо»: 494 раз
Поблагодарили: 2035 раз в 1579 постах
На тестовой странице присоединенная подпись формируется. В чем ещё отличие?
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#13 Оставлено : 22 июля 2021 г. 12:35:19(UTC)
Андрей *

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

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

Сказал «Спасибо»: 494 раз
Поблагодарили: 2035 раз в 1579 постах
Автор: tonax Перейти к цитате
Автор: Андрей * Перейти к цитате
смотрите в документацию, описание интерфейсов, методов\свойств.
В данном случае - GetSignerCertificate в примере: Создание подписанного сообщения



Что-то не получается на Delphi перевести


Вот готовый пример
https://www.cryptopro.ru...&m=113010#post113010

Техническую поддержку оказываем тут
Наша база знаний
Offline tonax  
#14 Оставлено : 22 июля 2021 г. 13:04:40(UTC)
tonax

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

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

Сказал(а) «Спасибо»: 6 раз
Автор: Андрей * Перейти к цитате
Автор: tonax Перейти к цитате
Автор: Андрей * Перейти к цитате
смотрите в документацию, описание интерфейсов, методов\свойств.
В данном случае - GetSignerCertificate в примере: Создание подписанного сообщения



Что-то не получается на Delphi перевести


Вот готовый пример
https://www.cryptopro.ru...&m=113010#post113010



По серийный номер не находит, а вот по отпечатку находит :)
Offline tonax  
#15 Оставлено : 22 июля 2021 г. 13:08:18(UTC)
tonax

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

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

Сказал(а) «Спасибо»: 6 раз
Автор: Андрей * Перейти к цитате
На тестовой странице присоединенная подпись формируется. В чем ещё отличие?


Разные результаты подписания строки, например KZEKPLILATPSQLIFKVVYILQFEPIZAW

Вот первая строка программное полученной подписанной строки:
MIIfHwYJKoZIhvcNAQcCoIIfEDCCHwwCAQExDjAMBggqhQMHAQECAgUAMAsGCSqGSIb3DQEHAaCC

А вот правильная с https://www.cryptopro.ru.../cades_bes_sample.html#:
MIIfbQYJKoZIhvcNAQcCoIIfXjCCH1oCAQExDjAMBggqhQMHAQECAgUAMC0GCSqGSIb3DQEHAaAg

и так в каждой строчке какие-то отличия
Offline Андрей *  
#16 Оставлено : 22 июля 2021 г. 13:22:54(UTC)
Андрей *

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

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

Сказал «Спасибо»: 494 раз
Поблагодарили: 2035 раз в 1579 постах
Автор: tonax Перейти к цитате
Автор: Андрей * Перейти к цитате
На тестовой странице присоединенная подпись формируется. В чем ещё отличие?


Разные результаты подписания строки, например KZEKPLILATPSQLIFKVVYILQFEPIZAW

Вот первая строка программное полученной подписанной строки:
MIIfHwYJKoZIhvcNAQcCoIIfEDCCHwwCAQExDjAMBggqhQMHAQECAgUAMAsGCSqGSIb3DQEHAaCC

А вот правильная с https://www.cryptopro.ru.../cades_bes_sample.html#:
MIIfbQYJKoZIhvcNAQcCoIIfXjCCH1oCAQExDjAMBggqhQMHAQECAgUAMC0GCSqGSIb3DQEHAaAg

и так в каждой строчке какие-то отличия



Разные типы CMS, разный размер структур => разный base64
+ в конце всегда будет разное значение ЭП.



Техническую поддержку оказываем тут
Наша база знаний
Offline tonax  
#17 Оставлено : 22 июля 2021 г. 13:44:36(UTC)
tonax

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

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

Сказал(а) «Спасибо»: 6 раз
Автор: Андрей * Перейти к цитате
Автор: tonax Перейти к цитате
Автор: Андрей * Перейти к цитате
На тестовой странице присоединенная подпись формируется. В чем ещё отличие?


Разные результаты подписания строки, например KZEKPLILATPSQLIFKVVYILQFEPIZAW

Вот первая строка программное полученной подписанной строки:
MIIfHwYJKoZIhvcNAQcCoIIfEDCCHwwCAQExDjAMBggqhQMHAQECAgUAMAsGCSqGSIb3DQEHAaCC

А вот правильная с https://www.cryptopro.ru.../cades_bes_sample.html#:
MIIfbQYJKoZIhvcNAQcCoIIfXjCCH1oCAQExDjAMBggqhQMHAQECAgUAMC0GCSqGSIb3DQEHAaAg

и так в каждой строчке какие-то отличия



Разные типы CMS, разный размер структур => разный base64
+ в конце всегда будет разное значение ЭП.



Дело в том, что честный знак не принимают программную подпись, а с https://www.cryptopro.ru...ge/cades_bes_sample.html прекрасно принимает... Видимо что-то все-таки неправильно формируется ч-з function SignData(), только не могу понять что. Base64 верная, проверял в https://helpers.work/ru/encription/base64
Offline Андрей *  
#18 Оставлено : 22 июля 2021 г. 13:51:27(UTC)
Андрей *

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

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

Сказал «Спасибо»: 494 раз
Поблагодарили: 2035 раз в 1579 постах
Автор: tonax Перейти к цитате
Автор: Андрей * Перейти к цитате
Автор: tonax Перейти к цитате
Автор: Андрей * Перейти к цитате
На тестовой странице присоединенная подпись формируется. В чем ещё отличие?


Разные результаты подписания строки, например KZEKPLILATPSQLIFKVVYILQFEPIZAW

Вот первая строка программное полученной подписанной строки:
MIIfHwYJKoZIhvcNAQcCoIIfEDCCHwwCAQExDjAMBggqhQMHAQECAgUAMAsGCSqGSIb3DQEHAaCC

А вот правильная с https://www.cryptopro.ru.../cades_bes_sample.html#:
MIIfbQYJKoZIhvcNAQcCoIIfXjCCH1oCAQExDjAMBggqhQMHAQECAgUAMC0GCSqGSIb3DQEHAaAg

и так в каждой строчке какие-то отличия



Разные типы CMS, разный размер структур => разный base64
+ в конце всегда будет разное значение ЭП.



Дело в том, что честный знак не принимают программную подпись, а с https://www.cryptopro.ru...ge/cades_bes_sample.html прекрасно принимает... Видимо что-то все-таки неправильно формируется ч-з function SignData(), только не могу понять что. Base64 верная, проверял в https://helpers.work/ru/encription/base64




Еще раз.
Ответ выше был дан.
На тестовой странице - присоединенная подпись.

В коде на Delphi\Lazarus:

SignData(True, si, so, null, ''); - что делает этот вызов?


Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
tonax оставлено 22.07.2021(UTC)
Offline Андрей *  
#19 Оставлено : 22 июля 2021 г. 13:53:00(UTC)
Андрей *

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

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

Сказал «Спасибо»: 494 раз
Поблагодарили: 2035 раз в 1579 постах
Автор: tonax Перейти к цитате
Автор: Андрей * Перейти к цитате
Автор: tonax Перейти к цитате
Автор: Андрей * Перейти к цитате
смотрите в документацию, описание интерфейсов, методов\свойств.
В данном случае - GetSignerCertificate в примере: Создание подписанного сообщения



Что-то не получается на Delphi перевести


Вот готовый пример
https://www.cryptopro.ru...&m=113010#post113010



По серийный номер не находит, а вот по отпечатку находит :)


Предполагаю, что ошибка в 17 строке, на вашей стороне.
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
tonax оставлено 22.07.2021(UTC)
Offline tonax  
#20 Оставлено : 22 июля 2021 г. 14:14:49(UTC)
tonax

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

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

Сказал(а) «Спасибо»: 6 раз
Автор: Андрей * Перейти к цитате
Автор: tonax Перейти к цитате
Автор: Андрей * Перейти к цитате
Автор: tonax Перейти к цитате
Автор: Андрей * Перейти к цитате
На тестовой странице присоединенная подпись формируется. В чем ещё отличие?


Разные результаты подписания строки, например KZEKPLILATPSQLIFKVVYILQFEPIZAW

Вот первая строка программное полученной подписанной строки:
MIIfHwYJKoZIhvcNAQcCoIIfEDCCHwwCAQExDjAMBggqhQMHAQECAgUAMAsGCSqGSIb3DQEHAaCC

А вот правильная с https://www.cryptopro.ru.../cades_bes_sample.html#:
MIIfbQYJKoZIhvcNAQcCoIIfXjCCH1oCAQExDjAMBggqhQMHAQECAgUAMC0GCSqGSIb3DQEHAaAg

и так в каждой строчке какие-то отличия



Разные типы CMS, разный размер структур => разный base64
+ в конце всегда будет разное значение ЭП.



Дело в том, что честный знак не принимают программную подпись, а с https://www.cryptopro.ru...ge/cades_bes_sample.html прекрасно принимает... Видимо что-то все-таки неправильно формируется ч-з function SignData(), только не могу понять что. Base64 верная, проверял в https://helpers.work/ru/encription/base64




Еще раз.
Ответ выше был дан.
На тестовой странице - присоединенная подпись.

В коде на Delphi\Lazarus:

SignData(True, si, so, null, ''); - что делает этот вызов?



Не могу понять ход мысли :) На тестовой странице https://www.cryptopro.ru...ge/cades_bes_sample.html мы используем подпись и результат получается верный.

Если мы пытаемся выполнить подпись аналогичной строки, той же самой подписью, что и используется для проверки подписи на тестовой странице, но из программы Delphi, то получаем другой (неверный) результат

SignData(True, si, so, null, ''); как раз выполняет вызов функции подписи строки si и возвращает результат в so. null указывали, до того, как смогли получить сертификат.

Сейчас весь год выглядит так:

Код:


//Поиск сертификата по отпечатку
function GetCertificateOfStamp(thumbprint: string; var oCertificate: olevariant; var onErr: string): boolean;
const
  CAPICOM_MY_STORE = 'MY';
  CAPICOM_CERTIFICATE_FIND_SHA1_HASH = $00000000;
  CAPICOM_CURRENT_USER_STORE = 2;
  CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED = 2;
var
  oStore, oCertificates: olevariant;
  x: integer;
begin
  onErr := '';
  result := false;
  try
    oStore := CreateOleObject('CAdESCOM.Store');
    oStore.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE, CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);

    oCertificates := oStore.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SHA1_HASH, widestring(thumbprint));

    x := oCertificates.Count;
    if x = 0 then
    begin
      onErr := 'Не найден сертификат с отпечатком: [' + thumbprint + ']';
      exit;
    end;
    oCertificate := oCertificates.Item[1]; // oCertificates.Item(1);
    result := true;
  except
    on e: exception do
    begin
      onErr := 'Не удалось получить доступ к сертификату с отпечатком: [' + thumbprint + '] ' + e.Message;
    end;
  end;
end;


Поиск проходит успешно, т.к. по отпечатку после поиска получаем верный серийный номер

Ниже идет основная функция подписания, в параметры которой передаются True(bl_Detached), строка для подписания, ссылка на переменную для подписанной строки, Сертификат и его пароль. А на что влияет первый параметр bl_Detached ?

Код:


//Функция подписания строки
function SignData(bl_Detached: boolean; S_in: WideString; var S_out: WideString ; g_Cert:OleVariant; g_Cert_Pass:string) :boolean;
const
  CADESCOM_CADES_TYPE = 1; // Тип усовершенствованной подписи
  CADESCOM_BASE64_TO_BINARY = 1;
var
  v_Signer, v_SignedData : Variant;

  s, Encoded: string;
  Base64: TBase64Encoding;

begin
  Result := False;
  try
    v_Signer := CreateOLEObject('CadesCOM.CPSigner');
    v_Signer.Certificate := g_Cert;

    //v_Signer.Certificate := GetSignerCertificate('0171ed4800daab20a54de41e513396cbae');

    if g_Cert_Pass<>'' then
    v_Signer.KeyPin := g_Cert_Pass;

    v_Signer.Options := 1;// CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN := 1;

    V_SignedData := CreateOLEObject('CAdESCOM.CadesSignedData');

    v_SignedData.ContentEncoding := CADESCOM_BASE64_TO_BINARY;

    Base64 := TBase64Encoding.Create(0);

  //s := 'Some larger text that needs to be encoded in Base64 encoding';
  //Base64 := TBase64Encoding.Create(10, '');

    s_in := Base64.Encode(s_in);

    //s_in := EncodeStringBase64(s_in);
    v_SignedData.Content := s_in;
    s_out := v_SignedData.SignCades(v_Signer, CADESCOM_CADES_TYPE, bl_Detached, 0);

    Result := True;
  finally
    if not VarIsNull(v_Signer) then v_Signer := Unassigned;
    if not VarIsNull(v_SignedData) then v_SignedData := Unassigned;
  end;
end;



Затем вызов: Сначала ищем сертификат по отпечатку, после чего выполняем подписание строки

Код:


procedure TForm1.btn1Click(Sender: TObject);
const
  certStamp = 'тут указываем отпечаток сертификата';
var
  si,so: WideString;
  Cert: OleVariant;
  errStr: string;
  crtRes: boolean;
begin
  si := edtString.Text; //Строка для подписания

  crtRes := GetCertificateOfStamp(certStamp, Cert, errStr); //поиск по сертификату

  if not crtRes then //Если сертификат не найден
    begin
      ShowMessage(errStr);
      exit;
    end;

  ShowMessage('Серийный номер: ' + Cert.SerialNumber); //Печатаем серийный номер найденного по отпечатку сертификата

  SignData(True, si, so, Cert, ''); //Подписываем строку si сертификатом Cert, пароль не указываем, т.к. его нет

  mmo1.Text := so; //Результат подписания выводим по поле формы
end;



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