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

Уведомление

Icon
Error

4 Страницы123>»
Опции
К последнему сообщению К первому непрочитанному
Offline wwq  
#1 Оставлено : 22 апреля 2021 г. 8:04:01(UTC)
wwq

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

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

пытаюсь подписать сообщение на lazarus с помощью cades plugin:


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

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

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;

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;

на этапе v_SignedData.Content := s_in; получаю ошибку "Параметр задан не верно".

на входе:
s_in := 'LTHNSNHGVUSLTDARDNXDKZATUJHTBK';

в base64:
TFRITlNOSEdWVVNMVERBUkROWERLWkFUVUpIVEJL

что я делаю не так? уже голову сломал...
в delphi вся конструкция работает нормально.
Online Андрей *  
#2 Оставлено : 23 апреля 2021 г. 23:12:06(UTC)
Андрей *

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

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

Сказал «Спасибо»: 494 раз
Поблагодарили: 2035 раз в 1579 постах
Автор: wwq Перейти к цитате
пытаюсь подписать сообщение на lazarus с помощью cades plugin:


function SignData(bl_Detached: boolean; S_in: ANSIString; var S_out: AnsiString; g_Cert:OleVariant; g_Cert_Pass:string) :boolean;
что я делаю не так? уже голову сломал...
в delphi вся конструкция работает нормально.




ANSIString нет в COM.

Цитата:

S_in: ANSIString; var S_out: AnsiString


Заменить на WideString и всё заработает.


Snimok ehkrana ot 2021-04-24 00-11-42.png (19kb) загружен 15 раз(а).
Техническую поддержку оказываем тут
Наша база знаний
Offline wwq  
#3 Оставлено : 26 мая 2021 г. 17:55:47(UTC)
wwq

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

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

да, спасибо, все получилось, проблемы была не совсем в этом, я 2 раза преобразовывал в base64 )))
Online Андрей *  
#4 Оставлено : 26 мая 2021 г. 18:00:07(UTC)
Андрей *

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

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

Сказал «Спасибо»: 494 раз
Поблагодарили: 2035 раз в 1579 постах
Автор: wwq Перейти к цитате
да, спасибо, все получилось, проблемы была не совсем в этом, я 2 раза преобразовывал в base64 )))


а теперь попробовать с ANSIString запустить код...
Техническую поддержку оказываем тут
Наша база знаний
Offline wwq  
#5 Оставлено : 26 мая 2021 г. 18:02:22(UTC)
wwq

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

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

Автор: Андрей * Перейти к цитате
Автор: wwq Перейти к цитате
да, спасибо, все получилось, проблемы была не совсем в этом, я 2 раза преобразовывал в base64 )))


а теперь попробовать с ANSIString запустить код...


уже в работе gateway для честного знака (подписывает/преобразует запросы и т.д.), клиенты на win2k3/winxp/linux сервер на win10
Online Андрей *  
#6 Оставлено : 26 мая 2021 г. 18:14:34(UTC)
Андрей *

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

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

Сказал «Спасибо»: 494 раз
Поблагодарили: 2035 раз в 1579 постах
Автор: wwq Перейти к цитате
Автор: Андрей * Перейти к цитате
Автор: wwq Перейти к цитате
да, спасибо, все получилось, проблемы была не совсем в этом, я 2 раза преобразовывал в base64 )))


а теперь попробовать с ANSIString запустить код...


уже в работе gateway для честного знака (подписывает/преобразует запросы и т.д.), клиенты на win2k3/winxp/linux сервер на win10


и там указано как есть в коде и ничего больше не менялось?

Т.е. Я зря ставил\собирал и воспроизвёл? Не может быть такого)

Lazarus "из коробки" и код при вызове приведёт к такому:
Snimok ehkrana ot 2021-05-26 19-07-02.png (51kb) загружен 10 раз(а).

обращаем внимание на 65 строку, меняем всё и в функции на правильный тип - WideString и получаем подпись:

Snimok ehkrana ot 2021-05-26 19-13-17.png (37kb) загружен 9 раз(а).

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

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

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

Сказал(а) «Спасибо»: 6 раз
Автор: wwq Перейти к цитате
пытаюсь подписать сообщение на lazarus с помощью cades plugin:


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

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

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;

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;


Подскажите, а параметр g_Cert:OleVariant как заполнить? Т.е. как получить сертификат? И g_Cert_Pass:string - это пароль на подпись?
Online Андрей *  
#8 Оставлено : 20 июля 2021 г. 13:37:07(UTC)
Андрей *

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

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

Сказал «Спасибо»: 494 раз
Поблагодарили: 2035 раз в 1579 постах
g_Cert - получить перечислением с сверкой нужных атрибутов или через .Find у хранилища сертификатов.
Если не указывать - будет диалог ОС выбора сертификата.

Цитата:

с помощью cades plugin

Это CAdESCOM, плагин это для браузеров...
Техническую поддержку оказываем тут
Наша база знаний
Online Андрей *  
#9 Оставлено : 20 июля 2021 г. 13:40:05(UTC)
Андрей *

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

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

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

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

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

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

Сказал(а) «Спасибо»: 6 раз
Автор: Андрей * Перейти к цитате
g_Cert - получить перечислением с сверкой нужных атрибутов или через .Find у хранилища сертификатов.
Если не указывать - будет диалог ОС выбора сертификата.

Цитата:

с помощью cades plugin

Это CAdESCOM, плагин это для браузеров...


Пробую без указания сертификата, на выходе вроде красиво, но результат не соответствует ожидаемому и в процессе не запрашивает выбор сертификата :(

Не запрашивает, возможно потому, что он единственный, но почему подпись отличается от подписи ч-з https://www.cryptopro.ru...ge/cades_bes_sample.html непонятно... Подскажете, где искать ошибку? Может надо конвертировать ч-то ещё?

Код:

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; [b]// Сертификат не указан[/b]

    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_in := Base64.Encode(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;


так вызываю ф-цию SignData и результат отличается от https://www.cryptopro.ru...e/cades_bes_sample.html#

Код:

procedure TForm1.btn1Click(Sender: TObject);
var
  si,so: WideString;
begin
  si := edtString.Text;
  SignData(True, si, so, null, '');
  mmo1.Text := so;
end;

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