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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline sania198787  
#1 Оставлено : 23 января 2026 г. 14:53:58(UTC)
sania198787

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

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

Пишу на Delphi 10.4.2 процедуру подписания документа.
Пытаюсь к документу приписать атрибут даты и времени подписи.

Код:

procedure test();
var

  tempSigner: OleVariant;
  tempSigningTimeAttr: OleVariant;
  tempStore: OleVariant;
  tempCertificate, tempCertificates: OleVariant;

const

    CAPICOM_CURRENT_USER_STORE: integer = 2; // 2 - Искать сертификат в ветке "Личное" хранилища.
    CAPICOM_MY_STORE: string = 'My'; // Указываем, что ветку "Личное" берем из хранилища текущего пользователя
    CAPICOM_STORE_OPEN_READ_ONLY: integer = 0; // Открыть хранилище только на чтение

begin

 tempStore:= System.Win.ComObj.CreateOleObject('CAdESCOM.Store'); // Объект описывает хранилище сертификатов
 tempStore.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE, CAPICOM_STORE_OPEN_READ_ONLY); // Открыть хранилище сертификатов
 tempCertificates:= tempStore.Certificates;
 tempCertificate := tempCertificates.Item[1];
 tempStore.Close;
 //
 tempSigner:= System.Win.ComObj.CreateOleObject('CAdESCOM.CPSigner'); // Объект, задающий параметры создания и содержащий информацию об усовершенствованной подписи.
 tempSigner.Certificate:= tempCertificate;
 tempSigningTimeAttr:= System.Win.ComObj.CreateOleObject('CAdESCOM.CPAttribute');
 tempSigningTimeAttr.Name:= 0;
 tempSigningTimeAttr.Value:= VarFromDateTime(now());
 tempSigner.AuthenticatedAttributes2.Add(tempSigningTimeAttr);
end.


На последней строчке при попытке добавить атрибут даты-времени(AuthenticatedAttributes2.Add()) выходит ошибка "Параметр задан неверно".

Пробовал версии КриптоПро CSP 5.0.136 и 5.0.13003.
Пробовал на Delphi XE4, та же ошибка.
Пробовал метод создания com-объекта Vcl.OleAuto.CreateOleObject(), вместо System.Win.ComObj.CreateOleObject(). Не помогло.
Пробовал типы переменных Variant, вместо OleVariant. Не помогло.

Пробовал написать на 1С обработку, с теми же com объектами, теми же методами. Все работает без ошибок.

Отредактировано пользователем 23 января 2026 г. 15:18:03(UTC)  | Причина: Не указана

Offline sania198787  
#2 Оставлено : 26 января 2026 г. 1:53:17(UTC)
sania198787

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

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

Автор: sania198787 Перейти к цитате
Пишу на Delphi 10.4.2 процедуру подписания документа.
Пытаюсь к документу приписать атрибут даты и времени подписи.

Код:

procedure test();
var

  tempSigner: OleVariant;
  tempSigningTimeAttr: OleVariant;
  tempStore: OleVariant;
  tempCertificate, tempCertificates: OleVariant;

const

    CAPICOM_CURRENT_USER_STORE: integer = 2; // 2 - Искать сертификат в ветке "Личное" хранилища.
    CAPICOM_MY_STORE: string = 'My'; // Указываем, что ветку "Личное" берем из хранилища текущего пользователя
    CAPICOM_STORE_OPEN_READ_ONLY: integer = 0; // Открыть хранилище только на чтение

begin

 tempStore:= System.Win.ComObj.CreateOleObject('CAdESCOM.Store'); // Объект описывает хранилище сертификатов
 tempStore.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE, CAPICOM_STORE_OPEN_READ_ONLY); // Открыть хранилище сертификатов
 tempCertificates:= tempStore.Certificates;
 tempCertificate := tempCertificates.Item[1];
 tempStore.Close;
 //
 tempSigner:= System.Win.ComObj.CreateOleObject('CAdESCOM.CPSigner'); // Объект, задающий параметры создания и содержащий информацию об усовершенствованной подписи.
 tempSigner.Certificate:= tempCertificate;
 tempSigningTimeAttr:= System.Win.ComObj.CreateOleObject('CAdESCOM.CPAttribute');
 tempSigningTimeAttr.Name:= 0;
 tempSigningTimeAttr.Value:= VarFromDateTime(now());
 tempSigner.AuthenticatedAttributes2.Add(tempSigningTimeAttr);
end.


На последней строчке при попытке добавить атрибут даты-времени(AuthenticatedAttributes2.Add()) выходит ошибка "Параметр задан неверно".

Пробовал версии КриптоПро CSP 5.0.136 и 5.0.13003.
Пробовал на Delphi XE4, та же ошибка.
Пробовал метод создания com-объекта Vcl.OleAuto.CreateOleObject(), вместо System.Win.ComObj.CreateOleObject(). Не помогло.
Пробовал типы переменных Variant, вместо OleVariant. Не помогло.

Пробовал написать на 1С обработку, с теми же com объектами, теми же методами. Все работает без ошибок.


Нашел решение. Нужно было просто использовать раннее связывание.

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