2148073504 внутренняя ошибка арм фсс ошибка при шифровании

Форум КриптоПро
 » 
Средства криптографической защиты информации
 » 
Встраивание
 » 
CryptSignMessage — внутренняя ошибка 2148073504 при втором вызове


Offline

Alex_Prodigy

 


#1
Оставлено
:

29 октября 2013 г. 6:37:47(UTC)

Alex_Prodigy

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

Группы: Участники

Зарегистрирован: 29.10.2013(UTC)
Сообщений: 11
Российская Федерация
Откуда: г. Чита

Здравствуйте!
Сделал по примерам MSDN подпись файла с помощью функции CryptSignMessage.
После первого вызова CryptSignMessage получаю размер необходимого буфера — всё ОК!
А вот при втором вызове — FALSE и GetLastError = 2148073504 (Внутренняя ошибка).

Пользовался и Wcryp2.pas, и JwaWincrypt.pas — одна и та же ошибка.

Сначала ищу сертификат по его отпечатку:
cert := CertFindCertificateInStore(store, encType, 0, CERT_FIND_SHA1_HASH, @certhash, nil);
Здесь всё ОК — находит правильный сертификат (проверял получением субъекта, серийного №, поставщика…).

Первый вызов CryptSignMessage отрабатывает всегда,
а вот второй вызов:

Код:


pStreamOut := TMemoryStream.Create;
try
  pStreamOut.SetSize(cbSignedMessageBlob);
  if (not (CryptSignMessage(@SigParams,
    True {для Detached},
    1,
    @MessageArray,
    @MessageSize,
    pStreamOut.Memory,
    cbSignedMessageBlob))) then
  begin
    // сваливается сюда с кодом 2148073504
    ShowMessage(SysErrorMessage(GetLastError) + ' - ' + IntToStr(GetLastError));
    Exit;
  end;
  pStreamOut.SetSize(cbSignedMessageBlob);
  if FileExists(AFile + '.sig') then
    DeleteFile(AFile + '.sig');
  pStreamOut.SaveToFile(AFile + '.sig');
finally
  FreeAndNil(pStreamOut);
end;

Понять не могу, чем ему поток не угодил…


Вверх


Offline

Kirill Sobolev

 


#2
Оставлено
:

29 октября 2013 г. 9:51:46(UTC)

Кирилл Соболев

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

Группы: Участники

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

Поблагодарили: 177 раз в 168 постах

Значение cbSignedMessageBlob похоже на правду после первого вызова?

Цитата:

@MessageArray
@MessageSize

Что это такое?

Техническую поддержку оказываем тут
Наша база знаний


Вверх

WWW


Offline

Alex_Prodigy

 


#3
Оставлено
:

30 октября 2013 г. 2:48:29(UTC)

Alex_Prodigy

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

Группы: Участники

Зарегистрирован: 29.10.2013(UTC)
Сообщений: 11
Российская Федерация
Откуда: г. Чита

Автор: Kirill Sobolev Перейти к цитате

Значение cbSignedMessageBlob похоже на правду после первого вызова?

Цитата:

@MessageArray
@MessageSize

Что это такое?

1.
cbSignedMessageBlob всегда точно такой же, как при подписи файла через csptest.exe — 2273 (после подписи должен стать 2257)
если не включать сертификат в подпись, то cbSignedMessageBlob меньше, но опять такой же, как и при вызове csptest

2.

Код:

var
MessageArray: array of PByte;
MessageSize: array of DWORD;
...
pStreamIn := TMemoryStream.Create;
try
  pStreamOut := TMemoryStream.Create;
  try
    SetLength(MessageArray, 1);
    SetLength(MessageSize, 1);
    pStreamIn.LoadFromFile(AFile);
    MessageArray[0] := pStreamIn.Memory;
    MessageSize[0] := pStreamIn.Size;

                          FillChar(SigParams, SizeOf(CRYPT_SIGN_MESSAGE_PARA), #0);
                          //ZeroMemory(@SigParams, SizeOf(CRYPT_SIGN_MESSAGE_PARA));
                          SigParams.cbSize := SizeOF(CRYPT_SIGN_MESSAGE_PARA);
                          SigParams.dwMsgEncodingType := encType; //PKCS_7_ASN_ENCODING; //encType;
                          SigParams.pSigningCert := cert; //pSignerCert;
                          SigParams.HashAlgorithm.pszObjId := cert^.pCertInfo^.SignatureAlgorithm.pszObjId;
                          SigParams.cMsgCert := 1;
                          SigParams.rgpMsgCert := @cert;

                          cbSignedMessageBlob := 0;
                          // первый вызов CryptSignMessage отрабатывает, как положено, без нареканий
                          if (not (CryptSignMessage(@SigParams,
                            True {для Detached},
                            1,
                            @MessageArray,
                            @MessageSize, nil,
                            cbSignedMessageBlob))) then
                            begin
                              ShowMessage(SysErrorMessage(GetLastError) + ' - ' + IntToStr(GetLastError));
                              Exit;
                            end;

    pStreamOut.SetSize(cbSignedMessageBlob);
    if (not (CryptSignMessage(@SigParams,
             True {для Detached},
             1,
             @MessageArray,
             @MessageSize,
             pStreamOut.Memory,
             cbSignedMessageBlob))) then
    begin
// сваливается сюда с кодом 2148073504
ShowMessage(SysErrorMessage(GetLastError) + ' - ' + IntToStr(GetLastError));
Exit;
end;
pStreamOut.SetSize(cbSignedMessageBlob);
if FileExists(AFile + '.sig') then
DeleteFile(AFile + '.sig');
pStreamOut.SaveToFile(AFile + '.sig');
  finally
    FreeAndNil(pStreamOut);
  end;
finally
  FreeAndNil(pStreamIn);
end;

Вверх


Offline

Kirill Sobolev

 


#4
Оставлено
:

30 октября 2013 г. 8:12:54(UTC)

Кирилл Соболев

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

Группы: Участники

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

Поблагодарили: 177 раз в 168 постах

Цитата:

SigParams.cbSize := SizeOF(CRYPT_SIGN_MESSAGE_PARA);

Какое реально значение?

Цитата:

SigParams.HashAlgorithm.pszObjId := cert^.pCertInfo^.SignatureAlgorithm.pszObjId;

Так делать нельзя. OID ГОСТ Р.34-11 — 1.2.643.2.2.9.

Техническую поддержку оказываем тут
Наша база знаний


Вверх

WWW


Offline

Alex_Prodigy

 


#5
Оставлено
:

30 октября 2013 г. 8:21:52(UTC)

Alex_Prodigy

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

Группы: Участники

Зарегистрирован: 29.10.2013(UTC)
Сообщений: 11
Российская Федерация
Откуда: г. Чита

Автор: Kirill Sobolev Перейти к цитате

Цитата:

SigParams.cbSize := SizeOF(CRYPT_SIGN_MESSAGE_PARA);

Какое реально значение?

Получается 68

Автор: Kirill Sobolev Перейти к цитате

Цитата:

SigParams.HashAlgorithm.pszObjId := cert^.pCertInfo^.SignatureAlgorithm.pszObjId;

Так делать нельзя. OID ГОСТ Р.34-11 — 1.2.643.2.2.9.

Почему нельзя?
В примере, конечно, стоит szOID_RSA_SHA1RSA, но я предположил, что нужно брать из сертификата эту информацию… Eh?
У меня в итоге получается 1.2.643.2.2.3 — неправильно? Надо именно 1.2.643.2.2.9 указывать?

К слову, поставил SigParams.HashAlgorithm.pszObjId := ‘1.2.643.2.2.9’;
Ничего не поменялось…

P.S. Забыл упомянуть, второй раз даже не появляется окно с запросом пароля.

Отредактировано пользователем 30 октября 2013 г. 8:28:22(UTC)
 | Причина: Добавка


Вверх


Offline

MCR

 


#6
Оставлено
:

30 октября 2013 г. 8:57:01(UTC)

MCR

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

Группы: Участники

Зарегистрирован: 06.03.2012(UTC)
Сообщений: 177

Сказал(а) «Спасибо»: 57 раз
Поблагодарили: 11 раз в 8 постах

Автор: Alex_Prodigy Перейти к цитате

Автор: Kirill Sobolev Перейти к цитате

Цитата:

SigParams.cbSize := SizeOF(CRYPT_SIGN_MESSAGE_PARA);

Какое реально значение?

Получается 68

Автор: Kirill Sobolev Перейти к цитате

Цитата:

SigParams.HashAlgorithm.pszObjId := cert^.pCertInfo^.SignatureAlgorithm.pszObjId;

Так делать нельзя. OID ГОСТ Р.34-11 — 1.2.643.2.2.9.

Почему нельзя?
В примере, конечно, стоит szOID_RSA_SHA1RSA, но я предположил, что нужно брать из сертификата эту информацию… Eh?
У меня в итоге получается 1.2.643.2.2.3 — неправильно? Надо именно 1.2.643.2.2.9 указывать?

К слову, поставил SigParams.HashAlgorithm.pszObjId := ‘1.2.643.2.2.9’;
Ничего не поменялось…

P.S. Забыл упомянуть, второй раз даже не появляется окно с запросом пароля.

Нельзя т.к. SigParams.HashAlgorithm.pszObjId := cert^.pCertInfo^.SignatureAlgorithm.pszObjId;


Вверх


Offline

Alex_Prodigy

 


#7
Оставлено
:

30 октября 2013 г. 9:03:53(UTC)

Alex_Prodigy

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

Группы: Участники

Зарегистрирован: 29.10.2013(UTC)
Сообщений: 11
Российская Федерация
Откуда: г. Чита

Автор: MCR Перейти к цитате

Цитата:

Нельзя т.к. SigParams.HashAlgorithm.pszObjId := cert^.pCertInfo^.SignatureAlgorithm.pszObjId;

А что конкретно туда нужно присваивать?

Я уже много чего пробовал:
‘1.2.643.2.2.3’;
‘1.2.643.2.2.9’;
szOID_RSA_MD5;
CertAlgIdToOID(CALG_MD5);
szOID_PKCS_7;


Вверх


Offline

MCR

 


#8
Оставлено
:

30 октября 2013 г. 12:37:58(UTC)

MCR

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

Группы: Участники

Зарегистрирован: 06.03.2012(UTC)
Сообщений: 177

Сказал(а) «Спасибо»: 57 раз
Поблагодарили: 11 раз в 8 постах

Автор: Alex_Prodigy Перейти к цитате

Автор: MCR Перейти к цитате

Цитата:

Нельзя т.к. SigParams.HashAlgorithm.pszObjId := cert^.pCertInfo^.SignatureAlgorithm.pszObjId;

А что конкретно туда нужно присваивать?

Я уже много чего пробовал:
‘1.2.643.2.2.3’;
‘1.2.643.2.2.9’;
szOID_RSA_MD5;
CertAlgIdToOID(CALG_MD5);
szOID_PKCS_7;

Не нужно много. Лучше правильно:

Код:

szOID_CP_GOST_R3411 = '1.2.643.2.2.9';

И пробуйте в TMemoryStream результат сразу из функции не записывать.

Отредактировано пользователем 30 октября 2013 г. 12:41:33(UTC)
 | Причина: Не указана


Вверх


Offline

Alex_Prodigy

 


#9
Оставлено
:

31 октября 2013 г. 1:47:11(UTC)

Alex_Prodigy

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

Группы: Участники

Зарегистрирован: 29.10.2013(UTC)
Сообщений: 11
Российская Федерация
Откуда: г. Чита

Автор: MCR Перейти к цитате

Цитата:

Не нужно много. Лучше правильно:

Код:

szOID_CP_GOST_R3411 = '1.2.643.2.2.9';

И пробуйте в TMemoryStream результат сразу из функции не записывать.

Я пробовал 1.2.643.2.2.9.
И записывать не сразу в поток тоже пробовал, никаких перемен :(
Может быть, Delphi 7 уже не подходит для этого?
Или у меня старенький Крипто-Про установлен?

Версия ядра СКЗИ: 3.6.5359 КС1
Версия продукта: 3.6.6627

P.S. Меня смущает, что именно при втором вызове функции вываливается ошибка… И даже не спрашивает пароль, т.е. ошибка возникает ещё до момента самого подписания.


Вверх


Offline

Андрей Писарев

 


#10
Оставлено
:

31 октября 2013 г. 3:00:02(UTC)

Андрей *

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

Группы: Участники

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

Сказал «Спасибо»: 460 раз
Поблагодарили: 1946 раз в 1505 постах

Автор: Alex_Prodigy Перейти к цитате

Автор: MCR Перейти к цитате

Цитата:

Не нужно много. Лучше правильно:

Код:

szOID_CP_GOST_R3411 = '1.2.643.2.2.9';

И пробуйте в TMemoryStream результат сразу из функции не записывать.

Я пробовал 1.2.643.2.2.9.
И записывать не сразу в поток тоже пробовал, никаких перемен :(
Может быть, Delphi 7 уже не подходит для этого?
Или у меня старенький Крипто-Про установлен?

Версия ядра СКЗИ: 3.6.5359 КС1
Версия продукта: 3.6.6627

P.S. Меня смущает, что именно при втором вызове функции вываливается ошибка… И даже не спрашивает пароль, т.е. ошибка возникает ещё до момента самого подписания.

С версиями ПО все нормально.

Техническую поддержку оказываем тут
Наша база знаний


Вверх

WWW

Пользователи, просматривающие эту тему

Guest

Форум КриптоПро
 » 
Средства криптографической защиты информации
 » 
Встраивание
 » 
CryptSignMessage — внутренняя ошибка 2148073504 при втором вызове

Быстрый переход
 

Вы не можете создавать новые темы в этом форуме.

Вы не можете отвечать в этом форуме.

Вы не можете удалять Ваши сообщения в этом форуме.

Вы не можете редактировать Ваши сообщения в этом форуме.

Вы не можете создавать опросы в этом форуме.

Вы не можете голосовать в этом форуме.

Adobe
Adobe Support Community

search

  • Global community

    • Language:
      • Deutsch

      • English

      • Español

      • Français

      • Português

  • 日本語コミュニティ

  • 한국 커뮤니티

Exit

    • Home

    • Acrobat

    • Discussions

  • Sometimes error message no. 2148073504 when digita…

correct answers
1 Correct answer

Markus6

New Here

,

Jan 14, 2011
Jan 14, 2011

Markus6



New Here

,

Jan 14, 2011
Jan 14, 2011

I get the same error sometimes.

Win7 64 Bit

ReinerSCT  cyber Jack

D-Trust SiG Card with Cert (German law approved)

Nexus Personal 4.16

Acrobat 9.4.1

Open PDF — assign Signature — Acrobat ask for Cert — then the error 2148073504.

Close Acrobat — wait 1-2 Minutes …. it runs …. sometimes …. restart PC ….. sometimes.

replies
10
Replies
10

Adobe Acrobat Feature & Workflow

АО ЦентрИнформ

Отчетность через интернет


Санкт-Петербург


7694886c7494490156b9ed22170d2599

Выбор региона

[78] Санкт-Петербург

[47] Ленинградская область

[16] Республика Татарстан

[25] Приморский край

[31] Белгородская область

[36] Воронежская область

[48] Липецкая область

Ваш регион – Санкт-Петербург?

Да
Выбрать другой регион

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

АО «ЦентрИнформ»

г. Санкт-Петербург, ул. Комсомола 1-3, литера АС

(812) 740-5405

7694886c7494490156b9ed22170d2599

Офисы обслуживания

АО «ЦентрИнформ»


Адрес:

г. Санкт-Петербург, ул. Комсомола 1-3, литера АС


Телефон:

(812) 740-5405


Email:

help@center-inform.ru


Схема проезда:


показать на карте

Иногда, когда мы пытаемся поместить цифровую подпись в файл PDF с помощью программного обеспечения, разработанного специально для этой цели, появляется сообщение об ошибке, содержащее любое из следующего описания:

Поставщик служб криптографии Windows сообщил об ошибке. Указан неверный тип провайдера, неверная подпись, нарушена защита, код 2148073504 или набор ключей не существует

Проблема в большинстве случаев возникает из-за устаревших сертификатов или поврежденных настроек в реестре. Итак, первое, что вы можете сделать, это сбросить или восстановить профиль пользователя в домене, чтобы проверить результат.

Поставщик криптографических услуг сообщил об ошибке


Согласно Microsoft, поставщик криптографических услуг (CSP) содержит реализации криптографических стандартов и алгоритмов. Как минимум, CSP состоит из библиотеки динамической компоновки (DLL), которая реализует функции в CryptoSPI (интерфейс системной программы). Поставщики реализуют криптографические алгоритмы, генерируют ключи, обеспечивают хранение ключей и аутентифицируют пользователей.

Если вы столкнулись с ошибками, вот несколько вещей, которые вы можете попробовать:

1] Запустите services.msc и перезапустите службу шифрования Windows.

2] Откройте Internet Explorer> Сервис> Свойства обозревателя. Выберите вкладку «Содержимое» и нажмите «Сертификаты». Проверьте, есть ли сертификат для программы или провайдера, выдающего ошибки. Если он отсутствует, вам придется создать новый. Если срок его действия истек, удалите его и создайте новый. Если определенный сертификат не работает, выберите другой сертификат и удалите старые сертификаты.

5] Переустановите все хранилище сертификатов и пользовательские сертификаты.

6] Если в вашей системе установлено приложение SafeNet Authentication Client Tool , откройте его, перейдя в каталог установки или щелкнув правой кнопкой мыши значок SafeNet на панели задач и выбрав в меню «Инструменты».

Нажмите значок в виде шестеренки, чтобы открыть раздел «Расширенный вид». В разделе Advanced View разверните токены и перейдите к сертификату, который вы хотите использовать для подписи. Вы можете найти их в группе сертификатов пользователей.

Затем щелкните правой кнопкой мыши свой сертификат и выберите «Установить как CSP» из выпадающего меню. Повторите тот же шаг для всех сертификатов, которые вы используете.

Закройте клиентские инструменты аутентификации SafeNet и попробуйте снова подписать документы.

7] Создайте папку локального хранилища Microsoft Cryptography. Перейдите в папку C: ProgramData Microsoft Crypto RSA . Переименуйте папку с надписью S-1-5-18. Перезагрузите систему и посмотрите, поможет ли это.

8] Если у вас установлено программное обеспечение ePass2003 , причиной проблемы может быть электронный токен ePass2003. Желательно сначала удалить его и переустановить. Для этого перейдите в раздел «Настройки» инструмента, перейдите в «Приложения и функции» и удалите его, как и любое другое приложение.

Перезагрузите компьютер и установите ePass2003 снова. Во время переустановки убедитесь, что вы выбрали MicroSoft CSP при выборе опции CSP. Все должно вернуться к нормальной жизни, и ошибка поставщика служб криптографии Windows больше не должна появляться.

Всего наилучшего!

Связанное чтение . Службы Windows не запускаются.

Форум КриптоПро
 » 
Средства криптографической защиты информации
 » 
Встраивание
 » 
CryptSignMessage — внутренняя ошибка 2148073504 при втором вызове


Offline

Alex_Prodigy

 


#1
Оставлено
:

29 октября 2013 г. 6:37:47(UTC)

Alex_Prodigy

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

Группы: Участники

Зарегистрирован: 29.10.2013(UTC)
Сообщений: 11
Российская Федерация
Откуда: г. Чита

Здравствуйте!
Сделал по примерам MSDN подпись файла с помощью функции CryptSignMessage.
После первого вызова CryptSignMessage получаю размер необходимого буфера — всё ОК!
А вот при втором вызове — FALSE и GetLastError = 2148073504 (Внутренняя ошибка).

Пользовался и Wcryp2.pas, и JwaWincrypt.pas — одна и та же ошибка.

Сначала ищу сертификат по его отпечатку:
cert := CertFindCertificateInStore(store, encType, 0, CERT_FIND_SHA1_HASH, @certhash, nil);
Здесь всё ОК — находит правильный сертификат (проверял получением субъекта, серийного №, поставщика…).

Первый вызов CryptSignMessage отрабатывает всегда,
а вот второй вызов:

Код:


pStreamOut := TMemoryStream.Create;
try
  pStreamOut.SetSize(cbSignedMessageBlob);
  if (not (CryptSignMessage(@SigParams,
    True {для Detached},
    1,
    @MessageArray,
    @MessageSize,
    pStreamOut.Memory,
    cbSignedMessageBlob))) then
  begin
    // сваливается сюда с кодом 2148073504
    ShowMessage(SysErrorMessage(GetLastError) + ' - ' + IntToStr(GetLastError));
    Exit;
  end;
  pStreamOut.SetSize(cbSignedMessageBlob);
  if FileExists(AFile + '.sig') then
    DeleteFile(AFile + '.sig');
  pStreamOut.SaveToFile(AFile + '.sig');
finally
  FreeAndNil(pStreamOut);
end;

Понять не могу, чем ему поток не угодил…


Вверх

Offline

Kirill Sobolev

 


#2
Оставлено
:

29 октября 2013 г. 9:51:46(UTC)

Кирилл Соболев

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

Группы: Участники

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

Поблагодарили: 177 раз в 168 постах

Значение cbSignedMessageBlob похоже на правду после первого вызова?

Цитата:

@MessageArray
@MessageSize

Что это такое?

Техническую поддержку оказываем тут
Наша база знаний


Вверх

WWW


Offline

Alex_Prodigy

 


#3
Оставлено
:

30 октября 2013 г. 2:48:29(UTC)

Alex_Prodigy

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

Группы: Участники

Зарегистрирован: 29.10.2013(UTC)
Сообщений: 11
Российская Федерация
Откуда: г. Чита

Автор: Kirill Sobolev Перейти к цитате

Значение cbSignedMessageBlob похоже на правду после первого вызова?

Цитата:

@MessageArray
@MessageSize

Что это такое?

1.
cbSignedMessageBlob всегда точно такой же, как при подписи файла через csptest.exe — 2273 (после подписи должен стать 2257)
если не включать сертификат в подпись, то cbSignedMessageBlob меньше, но опять такой же, как и при вызове csptest

2.

Код:

var
MessageArray: array of PByte;
MessageSize: array of DWORD;
...
pStreamIn := TMemoryStream.Create;
try
  pStreamOut := TMemoryStream.Create;
  try
    SetLength(MessageArray, 1);
    SetLength(MessageSize, 1);
    pStreamIn.LoadFromFile(AFile);
    MessageArray[0] := pStreamIn.Memory;
    MessageSize[0] := pStreamIn.Size;

                          FillChar(SigParams, SizeOf(CRYPT_SIGN_MESSAGE_PARA), #0);
                          //ZeroMemory(@SigParams, SizeOf(CRYPT_SIGN_MESSAGE_PARA));
                          SigParams.cbSize := SizeOF(CRYPT_SIGN_MESSAGE_PARA);
                          SigParams.dwMsgEncodingType := encType; //PKCS_7_ASN_ENCODING; //encType;
                          SigParams.pSigningCert := cert; //pSignerCert;
                          SigParams.HashAlgorithm.pszObjId := cert^.pCertInfo^.SignatureAlgorithm.pszObjId;
                          SigParams.cMsgCert := 1;
                          SigParams.rgpMsgCert := @cert;

                          cbSignedMessageBlob := 0;
                          // первый вызов CryptSignMessage отрабатывает, как положено, без нареканий
                          if (not (CryptSignMessage(@SigParams,
                            True {для Detached},
                            1,
                            @MessageArray,
                            @MessageSize, nil,
                            cbSignedMessageBlob))) then
                            begin
                              ShowMessage(SysErrorMessage(GetLastError) + ' - ' + IntToStr(GetLastError));
                              Exit;
                            end;

    pStreamOut.SetSize(cbSignedMessageBlob);
    if (not (CryptSignMessage(@SigParams,
             True {для Detached},
             1,
             @MessageArray,
             @MessageSize,
             pStreamOut.Memory,
             cbSignedMessageBlob))) then
    begin
// сваливается сюда с кодом 2148073504
ShowMessage(SysErrorMessage(GetLastError) + ' - ' + IntToStr(GetLastError));
Exit;
end;
pStreamOut.SetSize(cbSignedMessageBlob);
if FileExists(AFile + '.sig') then
DeleteFile(AFile + '.sig');
pStreamOut.SaveToFile(AFile + '.sig');
  finally
    FreeAndNil(pStreamOut);
  end;
finally
  FreeAndNil(pStreamIn);
end;

Вверх

Offline

Kirill Sobolev

 


#4
Оставлено
:

30 октября 2013 г. 8:12:54(UTC)

Кирилл Соболев

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

Группы: Участники

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

Поблагодарили: 177 раз в 168 постах

Цитата:

SigParams.cbSize := SizeOF(CRYPT_SIGN_MESSAGE_PARA);

Какое реально значение?

Цитата:

SigParams.HashAlgorithm.pszObjId := cert^.pCertInfo^.SignatureAlgorithm.pszObjId;

Так делать нельзя. OID ГОСТ Р.34-11 — 1.2.643.2.2.9.

Техническую поддержку оказываем тут
Наша база знаний


Вверх

WWW


Offline

Alex_Prodigy

 


#5
Оставлено
:

30 октября 2013 г. 8:21:52(UTC)

Alex_Prodigy

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

Группы: Участники

Зарегистрирован: 29.10.2013(UTC)
Сообщений: 11
Российская Федерация
Откуда: г. Чита

Автор: Kirill Sobolev Перейти к цитате

Цитата:

SigParams.cbSize := SizeOF(CRYPT_SIGN_MESSAGE_PARA);

Какое реально значение?

Получается 68

Автор: Kirill Sobolev Перейти к цитате

Цитата:

SigParams.HashAlgorithm.pszObjId := cert^.pCertInfo^.SignatureAlgorithm.pszObjId;

Так делать нельзя. OID ГОСТ Р.34-11 — 1.2.643.2.2.9.

Почему нельзя?
В примере, конечно, стоит szOID_RSA_SHA1RSA, но я предположил, что нужно брать из сертификата эту информацию… Eh?
У меня в итоге получается 1.2.643.2.2.3 — неправильно? Надо именно 1.2.643.2.2.9 указывать?

К слову, поставил SigParams.HashAlgorithm.pszObjId := ‘1.2.643.2.2.9’;
Ничего не поменялось…

P.S. Забыл упомянуть, второй раз даже не появляется окно с запросом пароля.

Отредактировано пользователем 30 октября 2013 г. 8:28:22(UTC)
 | Причина: Добавка


Вверх

Offline

MCR

 


#6
Оставлено
:

30 октября 2013 г. 8:57:01(UTC)

MCR

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

Группы: Участники

Зарегистрирован: 06.03.2012(UTC)
Сообщений: 177

Сказал(а) «Спасибо»: 57 раз
Поблагодарили: 11 раз в 8 постах

Автор: Alex_Prodigy Перейти к цитате

Автор: Kirill Sobolev Перейти к цитате

Цитата:

SigParams.cbSize := SizeOF(CRYPT_SIGN_MESSAGE_PARA);

Какое реально значение?

Получается 68

Автор: Kirill Sobolev Перейти к цитате

Цитата:

SigParams.HashAlgorithm.pszObjId := cert^.pCertInfo^.SignatureAlgorithm.pszObjId;

Так делать нельзя. OID ГОСТ Р.34-11 — 1.2.643.2.2.9.

Почему нельзя?
В примере, конечно, стоит szOID_RSA_SHA1RSA, но я предположил, что нужно брать из сертификата эту информацию… Eh?
У меня в итоге получается 1.2.643.2.2.3 — неправильно? Надо именно 1.2.643.2.2.9 указывать?

К слову, поставил SigParams.HashAlgorithm.pszObjId := ‘1.2.643.2.2.9’;
Ничего не поменялось…

P.S. Забыл упомянуть, второй раз даже не появляется окно с запросом пароля.

Нельзя т.к. SigParams.HashAlgorithm.pszObjId := cert^.pCertInfo^.SignatureAlgorithm.pszObjId;


Вверх

Offline

Alex_Prodigy

 


#7
Оставлено
:

30 октября 2013 г. 9:03:53(UTC)

Alex_Prodigy

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

Группы: Участники

Зарегистрирован: 29.10.2013(UTC)
Сообщений: 11
Российская Федерация
Откуда: г. Чита

Автор: MCR Перейти к цитате

Цитата:

Нельзя т.к. SigParams.HashAlgorithm.pszObjId := cert^.pCertInfo^.SignatureAlgorithm.pszObjId;

А что конкретно туда нужно присваивать?

Я уже много чего пробовал:
‘1.2.643.2.2.3’;
‘1.2.643.2.2.9’;
szOID_RSA_MD5;
CertAlgIdToOID(CALG_MD5);
szOID_PKCS_7;


Вверх

Offline

MCR

 


#8
Оставлено
:

30 октября 2013 г. 12:37:58(UTC)

MCR

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

Группы: Участники

Зарегистрирован: 06.03.2012(UTC)
Сообщений: 177

Сказал(а) «Спасибо»: 57 раз
Поблагодарили: 11 раз в 8 постах

Автор: Alex_Prodigy Перейти к цитате

Автор: MCR Перейти к цитате

Цитата:

Нельзя т.к. SigParams.HashAlgorithm.pszObjId := cert^.pCertInfo^.SignatureAlgorithm.pszObjId;

А что конкретно туда нужно присваивать?

Я уже много чего пробовал:
‘1.2.643.2.2.3’;
‘1.2.643.2.2.9’;
szOID_RSA_MD5;
CertAlgIdToOID(CALG_MD5);
szOID_PKCS_7;

Не нужно много. Лучше правильно:

Код:

szOID_CP_GOST_R3411 = '1.2.643.2.2.9';

И пробуйте в TMemoryStream результат сразу из функции не записывать.

Отредактировано пользователем 30 октября 2013 г. 12:41:33(UTC)
 | Причина: Не указана


Вверх

Offline

Alex_Prodigy

 


#9
Оставлено
:

31 октября 2013 г. 1:47:11(UTC)

Alex_Prodigy

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

Группы: Участники

Зарегистрирован: 29.10.2013(UTC)
Сообщений: 11
Российская Федерация
Откуда: г. Чита

Автор: MCR Перейти к цитате

Цитата:

Не нужно много. Лучше правильно:

Код:

szOID_CP_GOST_R3411 = '1.2.643.2.2.9';

И пробуйте в TMemoryStream результат сразу из функции не записывать.

Я пробовал 1.2.643.2.2.9.
И записывать не сразу в поток тоже пробовал, никаких перемен
Может быть, Delphi 7 уже не подходит для этого?
Или у меня старенький Крипто-Про установлен?

Версия ядра СКЗИ: 3.6.5359 КС1
Версия продукта: 3.6.6627

P.S. Меня смущает, что именно при втором вызове функции вываливается ошибка… И даже не спрашивает пароль, т.е. ошибка возникает ещё до момента самого подписания.


Вверх

Offline

Андрей Писарев

 


#10
Оставлено
:

31 октября 2013 г. 3:00:02(UTC)

Андрей *

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

Группы: Участники

Зарегистрирован: 26.07.2011(UTC)
Сообщений: 11,986
Мужчина
Российская Федерация

Сказал «Спасибо»: 457 раз
Поблагодарили: 1905 раз в 1474 постах

Автор: Alex_Prodigy Перейти к цитате

Автор: MCR Перейти к цитате

Цитата:

Не нужно много. Лучше правильно:

Код:

szOID_CP_GOST_R3411 = '1.2.643.2.2.9';

И пробуйте в TMemoryStream результат сразу из функции не записывать.

Я пробовал 1.2.643.2.2.9.
И записывать не сразу в поток тоже пробовал, никаких перемен
Может быть, Delphi 7 уже не подходит для этого?
Или у меня старенький Крипто-Про установлен?

Версия ядра СКЗИ: 3.6.5359 КС1
Версия продукта: 3.6.6627

P.S. Меня смущает, что именно при втором вызове функции вываливается ошибка… И даже не спрашивает пароль, т.е. ошибка возникает ещё до момента самого подписания.

С версиями ПО все нормально.

Техническую поддержку оказываем тут
Наша база знаний


Вверх

WWW

Пользователи, просматривающие эту тему

Guest

Форум КриптоПро
 » 
Средства криптографической защиты информации
 » 
Встраивание
 » 
CryptSignMessage — внутренняя ошибка 2148073504 при втором вызове

Быстрый переход
 

Вы не можете создавать новые темы в этом форуме.

Вы не можете отвечать в этом форуме.

Вы не можете удалять Ваши сообщения в этом форуме.

Вы не можете редактировать Ваши сообщения в этом форуме.

Вы не можете создавать опросы в этом форуме.

Вы не можете голосовать в этом форуме.

Adobe
Adobe Support Community

search

  • Global community

    • Language:
      • Deutsch

      • English

      • Español

      • Français

      • Português

  • 日本語コミュニティ
  • 한국 커뮤니티

Exit

    • Home

    • Acrobat

    • Discussions

  • Sometimes error message no. 2148073504 when digita…

correct answers
1 Correct answer

Markus6

New Here

,

Jan 14, 2011
Jan 14, 2011

Markus6



New Here

,

Jan 14, 2011
Jan 14, 2011

I get the same error sometimes.

Win7 64 Bit

ReinerSCT  cyber Jack

D-Trust SiG Card with Cert (German law approved)

Nexus Personal 4.16

Acrobat 9.4.1

Open PDF — assign Signature — Acrobat ask for Cert — then the error 2148073504.

Close Acrobat — wait 1-2 Minutes …. it runs …. sometimes …. restart PC ….. sometimes.

replies
10
Replies
10

Adobe Acrobat Feature & Workflow

Добрый день дорогие друзья! Сегодня будем рассматривать проблему с программой АРМ ФСС, а именно «ошибка: набор ключей не определен». С данной ошибкой Вы скорее всего столкнетесь, при загрузке ЭЛН. Будем справлять! Поехали!

АРМ ФСС ошибка: набор ключей не определен

Если у Вас не получается самостоятельно решить данную проблему, то Вы можете перейти в раздел ПОМОЩЬ и Вам помогут наши специалисты.

С данной проблемой я столкнулся, как раз при загрузке электронного больничного. Для начала обновим АРМ ФСС. Как обновить АРМ ФСС прочитайте вот тут.

Теперь перейдем в раздел меню «Учетная работа» и выберем «АРМ подписания и шифрования».

АРМ подписания и шифрования

Теперь будем внимательными! Нам необходимо проставить правильные ключи. То есть, правильно выбрать наши сертификаты.

Какие сертификаты ставить при загрузке больничного в АРМ ФСС

Переходим в раздел «Личный сертификат ЭЛН. Страхователь». Это сертификат нашей организации! Выбираем его, нажав на кнопку с открытой папкой.

Открываем сертификат организации

Переходим в раздел личные, и выбираем наш сертификат.

Выбираем сертификат

СТОП! Ни одного сертификата? Это уже странно!

В АРМ ФСС не отображаются сертификаты, что делать?

С 2019 года, мы переходим на новый ГОСТ по электронной подписи. Называется он ГОСТ 2012. До 2019 года мы использовали сертификаты выпущенные под ГОСТ 2001. Получается, что 2019 год переходный между двумя ГОСТ. Сейчас разрешено использовать сертификат и 2001 ГОСТа и 2012. Если Вы перевыпускали или выпускали новый сертификат в 2019 году, то с вероятностью 99% у Вас уже новый ГОСТ 2012. Если Вы выпускали сертификат в 2018, то скорее всего еще 2001. В этом вся проблема. Теперь найдем наши сертификаты!

Обратите внимание, что в новых версиях появился переключатель на разные ГОСТ.

Выбираем ГОСТ

Переключая данный режим, Вы увидите Ваши сертификаты. Попробуйте сначала поставить ГОСТ 2001, если сертификаты не отобразились, поставьте ГОСТ 2012. Я уверен, Вы найдете свой сертификат.

Все, мы нашли наш спрятанный сертификат, теперь идем дальше!

Устанавливаем сертификаты руководителя

Личный сертификат ЭЛН. Руководитель. Выставляете сертификат директора, как правило, он совпадает с сертификатом организации.

А вот дальше не торопитесь!

Устанавливаем правильного криптопровайдера

Теперь нам нужно определиться с криптопровайдером. Звучит страшно и сложно, но сейчас все будет понятно!

Поднимаемся выше и смотрим, сертификат какого ГОСТа мы выбирали. Если у Вас сертификат ГОСТ 2001, то в строке «Криптопровайдер» выбираете пункт «Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider». Если Ваш сертификат 2012 ГОСТа, то выбираете «Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider».

Выставляем криптопровайдера

Устанавливаем сертификаты ФСС

Тут все очень просто. Во-первых по данной теме у меня уже есть статья, там подробно все описано, поэтому писать еще раз не буду. Прочитать ее можно вот тут.

Просто скажу, что для успешной установки Вам нужно нажать 2 кнопки: «Установить сертификат уполномоченного лица ФСС ЭЛН» и «Установить сертификат уполномоченного лица ФСС».

Устанавливаем сертификаты ФСС

Далее снова выбираем «Личный сертификат», это сертификат нашей фирмы. В итоге, правильная таблица выглядит так.

Правильная расстановка сертификатов ФСС

Нет заветной кнопки «сохранить». Вот сейчас закрою окно и все пропадёт! Вас тоже это постоянного напрягает? И меня! Но нет, смело закрываем, настройки не собьются!

РЕШЕНО! АРМ ФСС ошибка: набор ключей не определен

Друзья! Если вдруг ошибка у Вас не пропала, экспериментируйте с сертификатами и ГОСТами, со строчкой Криптопровайдер. Вся ошибка кроется именно в этом! Если же у Вас все-таки не получается самостоятельно настроить, то переходите в раздел «ПОМОЩЬ», и я Вам помогу!

Если Вам нужна помощь профессионального системного администратора, для решения данного или какого-либо другого вопроса, перейдите в раздел ПОМОЩЬ, и Вам помогут наши сотрудники.

На этом все! Теперь Вы знаете, что делать, если у Вас ошибка в программе АРМ ФСС ошибка: набор ключей не определен.

Если у Вас появятся вопросы задавайте их в комментариях! Всем удачи и добра!

Присоединяйтесь к нам в социальных сетях, чтобы самыми первыми получать все новости с нашего сайта!

Время и Стекло Так выпала Карта HD VKlipe Net

Время и Стекло Так выпала Карта HD VKlipe Net

Оглавление:

  • Поставщик криптографических услуг сообщил об ошибке

Иногда, когда мы пытаемся помещать цифровую подпись в файл PDF с помощью программного обеспечения, специально предназначенного для этой цели, появляется сообщение об ошибке с любым следующего описания:

Поставщик криптографических услуг Windows сообщил об ошибке. Недопустимый тип провайдера, недопустимая подпись, нарушение безопасности, код 2148073504 или набор ключей не существует

Проблема в большинстве случаев возникает из-за устаревших сертификатов или поврежденных настроек в реестре. Итак, первое, что вам может понадобиться, — сбросить или воссоздать профиль пользователя в домене, чтобы проверить результат.

Поставщик криптографических услуг сообщил об ошибке

Согласно Microsoft, поставщик криптографических услуг (CSP) содержит реализации криптографические стандарты и алгоритмы. Как минимум, CSP состоит из библиотеки динамической компоновки (DLL), которая реализует функции в CryptoSPI (интерфейс системной программы). Поставщики реализуют криптографические алгоритмы, генерируют ключи, обеспечивают хранение ключей и аутентификацию пользователей.

Если вы столкнулись с ошибками, попробуйте несколько действий:

1] Запустите services.msc и перезапустите Windows Cryptographic Service.

2] Откройте Internet Explorer> Инструменты> Свойства обозревателя. Выберите вкладку «Содержимое» и нажмите «Сертификаты». Проверьте, есть ли сертификат для программы или поставщика, выдающего ошибки. Если он отсутствует, вам придется создать новый. Если он истек, удалите его и создайте новый. Если какой-либо конкретный сертификат не работает, выберите другой сертификат и удалите старые сертификаты.

5] Переустановите все хранилище сертификатов и сертификаты пользователя.

6] Если у вас есть SafeNet Authentication Client Tool приложение, установленное в вашей системе, откройте приложение, перейдя в его установочный каталог или щелкнув правой кнопкой мыши значок SafeNet на панели задач и выбрав в меню «Инструменты».

Нажмите значок «шестерня» для доступа к разделу «Расширенный вид», В разделе расширенного просмотра разверните токены и перейдите к сертификату, который вы хотите использовать для подписания. Вы можете найти их в группе «Сертификаты пользователей».

Затем щелкните правой кнопкой мыши на своем сертификате и выберите «Выделить как CSP» в раскрывающемся меню. Повторите тот же шаг для всех используемых вами сертификатов.

Закройте средства Client Security для проверки подлинности SafeNet и попробуйте снова подписать документы.

7] Восстановите папку локального хранилища Microsoft Cryptography. Перейдите в папку C: ProgramData Microsoft Crypto RSA. Переименуйте папку с надписью S-1-5-18. Перезагрузите свою систему и посмотрите, помогает ли она.

8] Если у вас установлено программное обеспечение ePass2003, причиной проблемы может быть e-токен ePass2003. Желательно, чтобы он был удален в первую очередь и переустановил его. Для этого перейдите в раздел «Настройки» инструмента, перейдите в «Приложения и функции» и удалите его так же, как и любое другое приложение.

Перезагрузите компьютер и установите ePass2003 снова. Во время переустановки убедитесь, что вы выбираете MicroSoft CSP при выборе опции CSP. Все должно вернуться к нормальному состоянию, а ошибка поставщика криптографических услуг Windows больше не должна появляться.

Все самое лучшее!

Связанное чтение : Службы Windows не запускаются.

Как выиграть лучшую сделку у вашего поставщика услуг

Как выиграть лучшую сделку у вашего поставщика услуг

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

Являются ли Netbook поставщика услуг хорошей сделкой?

Являются ли Netbook поставщика услуг хорошей сделкой?

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

Как выбрать поставщика облачных услуг

Как выбрать поставщика облачных услуг

В этом сообщении перечислены некоторые важные параметры, которые вы можете использовать для оценки, выберите и выберите подходящего поставщика услуг Cloud Computing для вашей организации.

Иногда, когда мы пытаемся поместить цифровую подпись в файл PDF с помощью программного обеспечения, разработанного специально для этой цели, появляется сообщение об ошибке, содержащее любое из следующего описания:

Поставщик служб криптографии Windows сообщил об ошибке. Указан неверный тип провайдера, неверная подпись, нарушена защита, код 2148073504 или набор ключей не существует

Проблема в большинстве случаев возникает из-за устаревших сертификатов или поврежденных настроек в реестре. Итак, первое, что вы можете сделать, это сбросить или восстановить профиль пользователя в домене, чтобы проверить результат.

Поставщик криптографических услуг сообщил об ошибке

Согласно Microsoft, поставщик криптографических услуг (CSP) содержит реализации криптографических стандартов и алгоритмов. Как минимум, CSP состоит из библиотеки динамической компоновки (DLL), которая реализует функции в CryptoSPI (интерфейс системной программы). Поставщики реализуют криптографические алгоритмы, генерируют ключи, обеспечивают хранение ключей и аутентифицируют пользователей.

Если вы столкнулись с ошибками, вот несколько вещей, которые вы можете попробовать:

1] Запустите services.msc и перезапустите службу шифрования Windows.

2] Откройте Internet Explorer> Сервис> Свойства обозревателя. Выберите вкладку «Содержимое» и нажмите «Сертификаты». Проверьте, есть ли сертификат для программы или провайдера, выдающего ошибки. Если он отсутствует, вам придется создать новый. Если срок его действия истек, удалите его и создайте новый. Если определенный сертификат не работает, выберите другой сертификат и удалите старые сертификаты.

5] Переустановите все хранилище сертификатов и пользовательские сертификаты.

6] Если в вашей системе установлено приложение SafeNet Authentication Client Tool , откройте его, перейдя в каталог установки или щелкнув правой кнопкой мыши значок SafeNet на панели задач и выбрав в меню «Инструменты».

Нажмите значок в виде шестеренки, чтобы открыть раздел «Расширенный вид». В разделе Advanced View разверните токены и перейдите к сертификату, который вы хотите использовать для подписи. Вы можете найти их в группе сертификатов пользователей.

Затем щелкните правой кнопкой мыши свой сертификат и выберите «Установить как CSP» из выпадающего меню. Повторите тот же шаг для всех сертификатов, которые вы используете.

Закройте клиентские инструменты аутентификации SafeNet и попробуйте снова подписать документы.

7] Создайте папку локального хранилища Microsoft Cryptography. Перейдите в папку C: ProgramData Microsoft Crypto RSA . Переименуйте папку с надписью S-1-5-18. Перезагрузите систему и посмотрите, поможет ли это.

8] Если у вас установлено программное обеспечение ePass2003 , причиной проблемы может быть электронный токен ePass2003. Желательно сначала удалить его и переустановить. Для этого перейдите в раздел «Настройки» инструмента, перейдите в «Приложения и функции» и удалите его, как и любое другое приложение.

Перезагрузите компьютер и установите ePass2003 снова. Во время переустановки убедитесь, что вы выбрали MicroSoft CSP при выборе опции CSP. Все должно вернуться к нормальной жизни, и ошибка поставщика служб криптографии Windows больше не должна появляться.

Всего наилучшего!

Связанное чтение . Службы Windows не запускаются.

Форум КриптоПро
 » 
Средства криптографической защиты информации
 » 
Встраивание
 » 
CryptSignMessage — внутренняя ошибка 2148073504 при втором вызове


Offline

Alex_Prodigy

 


#1
Оставлено
:

29 октября 2013 г. 6:37:47(UTC)

Alex_Prodigy

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

Группы: Участники

Зарегистрирован: 29.10.2013(UTC)
Сообщений: 11
Российская Федерация
Откуда: г. Чита

Здравствуйте!
Сделал по примерам MSDN подпись файла с помощью функции CryptSignMessage.
После первого вызова CryptSignMessage получаю размер необходимого буфера — всё ОК!
А вот при втором вызове — FALSE и GetLastError = 2148073504 (Внутренняя ошибка).

Пользовался и Wcryp2.pas, и JwaWincrypt.pas — одна и та же ошибка.

Сначала ищу сертификат по его отпечатку:
cert := CertFindCertificateInStore(store, encType, 0, CERT_FIND_SHA1_HASH, @certhash, nil);
Здесь всё ОК — находит правильный сертификат (проверял получением субъекта, серийного №, поставщика…).

Первый вызов CryptSignMessage отрабатывает всегда,
а вот второй вызов:

Код:


pStreamOut := TMemoryStream.Create;
try
  pStreamOut.SetSize(cbSignedMessageBlob);
  if (not (CryptSignMessage(@SigParams,
    True {для Detached},
    1,
    @MessageArray,
    @MessageSize,
    pStreamOut.Memory,
    cbSignedMessageBlob))) then
  begin
    // сваливается сюда с кодом 2148073504
    ShowMessage(SysErrorMessage(GetLastError) + ' - ' + IntToStr(GetLastError));
    Exit;
  end;
  pStreamOut.SetSize(cbSignedMessageBlob);
  if FileExists(AFile + '.sig') then
    DeleteFile(AFile + '.sig');
  pStreamOut.SaveToFile(AFile + '.sig');
finally
  FreeAndNil(pStreamOut);
end;

Понять не могу, чем ему поток не угодил…


Вверх

Offline

Kirill Sobolev

 


#2
Оставлено
:

29 октября 2013 г. 9:51:46(UTC)

Кирилл Соболев

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

Группы: Участники

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

Поблагодарили: 177 раз в 168 постах

Значение cbSignedMessageBlob похоже на правду после первого вызова?

Цитата:

@MessageArray
@MessageSize

Что это такое?

Техническую поддержку оказываем тут
Наша база знаний


Вверх

WWW


Offline

Alex_Prodigy

 


#3
Оставлено
:

30 октября 2013 г. 2:48:29(UTC)

Alex_Prodigy

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

Группы: Участники

Зарегистрирован: 29.10.2013(UTC)
Сообщений: 11
Российская Федерация
Откуда: г. Чита

Автор: Kirill Sobolev Перейти к цитате

Значение cbSignedMessageBlob похоже на правду после первого вызова?

Цитата:

@MessageArray
@MessageSize

Что это такое?

1.
cbSignedMessageBlob всегда точно такой же, как при подписи файла через csptest.exe — 2273 (после подписи должен стать 2257)
если не включать сертификат в подпись, то cbSignedMessageBlob меньше, но опять такой же, как и при вызове csptest

2.

Код:

var
MessageArray: array of PByte;
MessageSize: array of DWORD;
...
pStreamIn := TMemoryStream.Create;
try
  pStreamOut := TMemoryStream.Create;
  try
    SetLength(MessageArray, 1);
    SetLength(MessageSize, 1);
    pStreamIn.LoadFromFile(AFile);
    MessageArray[0] := pStreamIn.Memory;
    MessageSize[0] := pStreamIn.Size;

                          FillChar(SigParams, SizeOf(CRYPT_SIGN_MESSAGE_PARA), #0);
                          //ZeroMemory(@SigParams, SizeOf(CRYPT_SIGN_MESSAGE_PARA));
                          SigParams.cbSize := SizeOF(CRYPT_SIGN_MESSAGE_PARA);
                          SigParams.dwMsgEncodingType := encType; //PKCS_7_ASN_ENCODING; //encType;
                          SigParams.pSigningCert := cert; //pSignerCert;
                          SigParams.HashAlgorithm.pszObjId := cert^.pCertInfo^.SignatureAlgorithm.pszObjId;
                          SigParams.cMsgCert := 1;
                          SigParams.rgpMsgCert := @cert;

                          cbSignedMessageBlob := 0;
                          // первый вызов CryptSignMessage отрабатывает, как положено, без нареканий
                          if (not (CryptSignMessage(@SigParams,
                            True {для Detached},
                            1,
                            @MessageArray,
                            @MessageSize, nil,
                            cbSignedMessageBlob))) then
                            begin
                              ShowMessage(SysErrorMessage(GetLastError) + ' - ' + IntToStr(GetLastError));
                              Exit;
                            end;

    pStreamOut.SetSize(cbSignedMessageBlob);
    if (not (CryptSignMessage(@SigParams,
             True {для Detached},
             1,
             @MessageArray,
             @MessageSize,
             pStreamOut.Memory,
             cbSignedMessageBlob))) then
    begin
// сваливается сюда с кодом 2148073504
ShowMessage(SysErrorMessage(GetLastError) + ' - ' + IntToStr(GetLastError));
Exit;
end;
pStreamOut.SetSize(cbSignedMessageBlob);
if FileExists(AFile + '.sig') then
DeleteFile(AFile + '.sig');
pStreamOut.SaveToFile(AFile + '.sig');
  finally
    FreeAndNil(pStreamOut);
  end;
finally
  FreeAndNil(pStreamIn);
end;

Вверх

Offline

Kirill Sobolev

 


#4
Оставлено
:

30 октября 2013 г. 8:12:54(UTC)

Кирилл Соболев

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

Группы: Участники

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

Поблагодарили: 177 раз в 168 постах

Цитата:

SigParams.cbSize := SizeOF(CRYPT_SIGN_MESSAGE_PARA);

Какое реально значение?

Цитата:

SigParams.HashAlgorithm.pszObjId := cert^.pCertInfo^.SignatureAlgorithm.pszObjId;

Так делать нельзя. OID ГОСТ Р.34-11 — 1.2.643.2.2.9.

Техническую поддержку оказываем тут
Наша база знаний


Вверх

WWW


Offline

Alex_Prodigy

 


#5
Оставлено
:

30 октября 2013 г. 8:21:52(UTC)

Alex_Prodigy

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

Группы: Участники

Зарегистрирован: 29.10.2013(UTC)
Сообщений: 11
Российская Федерация
Откуда: г. Чита

Автор: Kirill Sobolev Перейти к цитате

Цитата:

SigParams.cbSize := SizeOF(CRYPT_SIGN_MESSAGE_PARA);

Какое реально значение?

Получается 68

Автор: Kirill Sobolev Перейти к цитате

Цитата:

SigParams.HashAlgorithm.pszObjId := cert^.pCertInfo^.SignatureAlgorithm.pszObjId;

Так делать нельзя. OID ГОСТ Р.34-11 — 1.2.643.2.2.9.

Почему нельзя?
В примере, конечно, стоит szOID_RSA_SHA1RSA, но я предположил, что нужно брать из сертификата эту информацию… Eh?
У меня в итоге получается 1.2.643.2.2.3 — неправильно? Надо именно 1.2.643.2.2.9 указывать?

К слову, поставил SigParams.HashAlgorithm.pszObjId := ‘1.2.643.2.2.9’;
Ничего не поменялось…

P.S. Забыл упомянуть, второй раз даже не появляется окно с запросом пароля.

Отредактировано пользователем 30 октября 2013 г. 8:28:22(UTC)
 | Причина: Добавка


Вверх

Offline

MCR

 


#6
Оставлено
:

30 октября 2013 г. 8:57:01(UTC)

MCR

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

Группы: Участники

Зарегистрирован: 06.03.2012(UTC)
Сообщений: 177

Сказал(а) «Спасибо»: 57 раз
Поблагодарили: 11 раз в 8 постах

Автор: Alex_Prodigy Перейти к цитате

Автор: Kirill Sobolev Перейти к цитате

Цитата:

SigParams.cbSize := SizeOF(CRYPT_SIGN_MESSAGE_PARA);

Какое реально значение?

Получается 68

Автор: Kirill Sobolev Перейти к цитате

Цитата:

SigParams.HashAlgorithm.pszObjId := cert^.pCertInfo^.SignatureAlgorithm.pszObjId;

Так делать нельзя. OID ГОСТ Р.34-11 — 1.2.643.2.2.9.

Почему нельзя?
В примере, конечно, стоит szOID_RSA_SHA1RSA, но я предположил, что нужно брать из сертификата эту информацию… Eh?
У меня в итоге получается 1.2.643.2.2.3 — неправильно? Надо именно 1.2.643.2.2.9 указывать?

К слову, поставил SigParams.HashAlgorithm.pszObjId := ‘1.2.643.2.2.9’;
Ничего не поменялось…

P.S. Забыл упомянуть, второй раз даже не появляется окно с запросом пароля.

Нельзя т.к. SigParams.HashAlgorithm.pszObjId := cert^.pCertInfo^.SignatureAlgorithm.pszObjId;


Вверх

Offline

Alex_Prodigy

 


#7
Оставлено
:

30 октября 2013 г. 9:03:53(UTC)

Alex_Prodigy

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

Группы: Участники

Зарегистрирован: 29.10.2013(UTC)
Сообщений: 11
Российская Федерация
Откуда: г. Чита

Автор: MCR Перейти к цитате

Цитата:

Нельзя т.к. SigParams.HashAlgorithm.pszObjId := cert^.pCertInfo^.SignatureAlgorithm.pszObjId;

А что конкретно туда нужно присваивать?

Я уже много чего пробовал:
‘1.2.643.2.2.3’;
‘1.2.643.2.2.9’;
szOID_RSA_MD5;
CertAlgIdToOID(CALG_MD5);
szOID_PKCS_7;


Вверх

Offline

MCR

 


#8
Оставлено
:

30 октября 2013 г. 12:37:58(UTC)

MCR

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

Группы: Участники

Зарегистрирован: 06.03.2012(UTC)
Сообщений: 177

Сказал(а) «Спасибо»: 57 раз
Поблагодарили: 11 раз в 8 постах

Автор: Alex_Prodigy Перейти к цитате

Автор: MCR Перейти к цитате

Цитата:

Нельзя т.к. SigParams.HashAlgorithm.pszObjId := cert^.pCertInfo^.SignatureAlgorithm.pszObjId;

А что конкретно туда нужно присваивать?

Я уже много чего пробовал:
‘1.2.643.2.2.3’;
‘1.2.643.2.2.9’;
szOID_RSA_MD5;
CertAlgIdToOID(CALG_MD5);
szOID_PKCS_7;

Не нужно много. Лучше правильно:

Код:

szOID_CP_GOST_R3411 = '1.2.643.2.2.9';

И пробуйте в TMemoryStream результат сразу из функции не записывать.

Отредактировано пользователем 30 октября 2013 г. 12:41:33(UTC)
 | Причина: Не указана


Вверх

Offline

Alex_Prodigy

 


#9
Оставлено
:

31 октября 2013 г. 1:47:11(UTC)

Alex_Prodigy

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

Группы: Участники

Зарегистрирован: 29.10.2013(UTC)
Сообщений: 11
Российская Федерация
Откуда: г. Чита

Автор: MCR Перейти к цитате

Цитата:

Не нужно много. Лучше правильно:

Код:

szOID_CP_GOST_R3411 = '1.2.643.2.2.9';

И пробуйте в TMemoryStream результат сразу из функции не записывать.

Я пробовал 1.2.643.2.2.9.
И записывать не сразу в поток тоже пробовал, никаких перемен :(
Может быть, Delphi 7 уже не подходит для этого?
Или у меня старенький Крипто-Про установлен?

Версия ядра СКЗИ: 3.6.5359 КС1
Версия продукта: 3.6.6627

P.S. Меня смущает, что именно при втором вызове функции вываливается ошибка… И даже не спрашивает пароль, т.е. ошибка возникает ещё до момента самого подписания.


Вверх

Offline

Андрей Писарев

 


#10
Оставлено
:

31 октября 2013 г. 3:00:02(UTC)

Андрей *

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

Группы: Участники

Зарегистрирован: 26.07.2011(UTC)
Сообщений: 11,991
Мужчина
Российская Федерация

Сказал «Спасибо»: 457 раз
Поблагодарили: 1907 раз в 1474 постах

Автор: Alex_Prodigy Перейти к цитате

Автор: MCR Перейти к цитате

Цитата:

Не нужно много. Лучше правильно:

Код:

szOID_CP_GOST_R3411 = '1.2.643.2.2.9';

И пробуйте в TMemoryStream результат сразу из функции не записывать.

Я пробовал 1.2.643.2.2.9.
И записывать не сразу в поток тоже пробовал, никаких перемен :(
Может быть, Delphi 7 уже не подходит для этого?
Или у меня старенький Крипто-Про установлен?

Версия ядра СКЗИ: 3.6.5359 КС1
Версия продукта: 3.6.6627

P.S. Меня смущает, что именно при втором вызове функции вываливается ошибка… И даже не спрашивает пароль, т.е. ошибка возникает ещё до момента самого подписания.

С версиями ПО все нормально.

Техническую поддержку оказываем тут
Наша база знаний


Вверх

WWW

Пользователи, просматривающие эту тему

Guest

Форум КриптоПро
 » 
Средства криптографической защиты информации
 » 
Встраивание
 » 
CryptSignMessage — внутренняя ошибка 2148073504 при втором вызове

Быстрый переход
 

Вы не можете создавать новые темы в этом форуме.

Вы не можете отвечать в этом форуме.

Вы не можете удалять Ваши сообщения в этом форуме.

Вы не можете редактировать Ваши сообщения в этом форуме.

Вы не можете создавать опросы в этом форуме.

Вы не можете голосовать в этом форуме.

Добрый день дорогие друзья! Сегодня будем рассматривать проблему с программой АРМ ФСС, а именно «ошибка: набор ключей не определен». С данной ошибкой Вы скорее всего столкнетесь, при загрузке ЭЛН. Будем справлять! Поехали!

АРМ ФСС ошибка: набор ключей не определен

Если у Вас не получается самостоятельно решить данную проблему, то Вы можете перейти в раздел ПОМОЩЬ и Вам помогут наши специалисты.

С данной проблемой я столкнулся, как раз при загрузке электронного больничного. Для начала обновим АРМ ФСС. Как обновить АРМ ФСС прочитайте вот тут.

Теперь перейдем в раздел меню «Учетная работа» и выберем «АРМ подписания и шифрования».

АРМ подписания и шифрования

Теперь будем внимательными! Нам необходимо проставить правильные ключи. То есть, правильно выбрать наши сертификаты.

Какие сертификаты ставить при загрузке больничного в АРМ ФСС

Переходим в раздел «Личный сертификат ЭЛН. Страхователь». Это сертификат нашей организации! Выбираем его, нажав на кнопку с открытой папкой.

Открываем сертификат организации

Переходим в раздел личные, и выбираем наш сертификат.

Выбираем сертификат

СТОП! Ни одного сертификата? Это уже странно!

В АРМ ФСС не отображаются сертификаты, что делать?

С 2019 года, мы переходим на новый ГОСТ по электронной подписи. Называется он ГОСТ 2012. До 2019 года мы использовали сертификаты выпущенные под ГОСТ 2001. Получается, что 2019 год переходный между двумя ГОСТ. Сейчас разрешено использовать сертификат и 2001 ГОСТа и 2012. Если Вы перевыпускали или выпускали новый сертификат в 2019 году, то с вероятностью 99% у Вас уже новый ГОСТ 2012. Если Вы выпускали сертификат в 2018, то скорее всего еще 2001. В этом вся проблема. Теперь найдем наши сертификаты!

Обратите внимание, что в новых версиях появился переключатель на разные ГОСТ.

Выбираем ГОСТ

Переключая данный режим, Вы увидите Ваши сертификаты. Попробуйте сначала поставить ГОСТ 2001, если сертификаты не отобразились, поставьте ГОСТ 2012. Я уверен, Вы найдете свой сертификат.

Все, мы нашли наш спрятанный сертификат, теперь идем дальше!

Устанавливаем сертификаты руководителя

Личный сертификат ЭЛН. Руководитель. Выставляете сертификат директора, как правило, он совпадает с сертификатом организации.

А вот дальше не торопитесь!

Устанавливаем правильного криптопровайдера

Теперь нам нужно определиться с криптопровайдером. Звучит страшно и сложно, но сейчас все будет понятно!

Поднимаемся выше и смотрим, сертификат какого ГОСТа мы выбирали. Если у Вас сертификат ГОСТ 2001, то в строке «Криптопровайдер» выбираете пункт «Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider». Если Ваш сертификат 2012 ГОСТа, то выбираете «Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider».

Выставляем криптопровайдера

Устанавливаем сертификаты ФСС

Тут все очень просто. Во-первых по данной теме у меня уже есть статья, там подробно все описано, поэтому писать еще раз не буду. Прочитать ее можно вот тут.

Просто скажу, что для успешной установки Вам нужно нажать 2 кнопки: «Установить сертификат уполномоченного лица ФСС ЭЛН» и «Установить сертификат уполномоченного лица ФСС».

Устанавливаем сертификаты ФСС

Далее снова выбираем «Личный сертификат», это сертификат нашей фирмы. В итоге, правильная таблица выглядит так.

Правильная расстановка сертификатов ФСС

Нет заветной кнопки «сохранить». Вот сейчас закрою окно и все пропадёт! Вас тоже это постоянного напрягает? И меня! Но нет, смело закрываем, настройки не собьются!

РЕШЕНО! АРМ ФСС ошибка: набор ключей не определен

Друзья! Если вдруг ошибка у Вас не пропала, экспериментируйте с сертификатами и ГОСТами, со строчкой Криптопровайдер. Вся ошибка кроется именно в этом! Если же у Вас все-таки не получается самостоятельно настроить, то переходите в раздел «ПОМОЩЬ», и я Вам помогу!

Если Вам нужна помощь профессионального системного администратора, для решения данного или какого-либо другого вопроса, перейдите в раздел ПОМОЩЬ, и Вам помогут наши сотрудники.

На этом все! Теперь Вы знаете, что делать, если у Вас ошибка в программе АРМ ФСС ошибка: набор ключей не определен.

Если у Вас появятся вопросы задавайте их в комментариях! Всем удачи и добра!

Присоединяйтесь к нам в социальных сетях, чтобы самыми первыми получать все новости с нашего сайта!

Форум КриптоПро
 » 
Средства криптографической защиты информации
 » 
Встраивание
 » 
CryptSignMessage — внутренняя ошибка 2148073504 при втором вызове


Offline

Alex_Prodigy

 


#1
Оставлено
:

29 октября 2013 г. 6:37:47(UTC)

Alex_Prodigy

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

Группы: Участники

Зарегистрирован: 29.10.2013(UTC)
Сообщений: 11
Российская Федерация
Откуда: г. Чита

Здравствуйте!
Сделал по примерам MSDN подпись файла с помощью функции CryptSignMessage.
После первого вызова CryptSignMessage получаю размер необходимого буфера — всё ОК!
А вот при втором вызове — FALSE и GetLastError = 2148073504 (Внутренняя ошибка).

Пользовался и Wcryp2.pas, и JwaWincrypt.pas — одна и та же ошибка.

Сначала ищу сертификат по его отпечатку:
cert := CertFindCertificateInStore(store, encType, 0, CERT_FIND_SHA1_HASH, @certhash, nil);
Здесь всё ОК — находит правильный сертификат (проверял получением субъекта, серийного №, поставщика…).

Первый вызов CryptSignMessage отрабатывает всегда,
а вот второй вызов:

Код:


pStreamOut := TMemoryStream.Create;
try
  pStreamOut.SetSize(cbSignedMessageBlob);
  if (not (CryptSignMessage(@SigParams,
    True {для Detached},
    1,
    @MessageArray,
    @MessageSize,
    pStreamOut.Memory,
    cbSignedMessageBlob))) then
  begin
    // сваливается сюда с кодом 2148073504
    ShowMessage(SysErrorMessage(GetLastError) + ' - ' + IntToStr(GetLastError));
    Exit;
  end;
  pStreamOut.SetSize(cbSignedMessageBlob);
  if FileExists(AFile + '.sig') then
    DeleteFile(AFile + '.sig');
  pStreamOut.SaveToFile(AFile + '.sig');
finally
  FreeAndNil(pStreamOut);
end;

Понять не могу, чем ему поток не угодил…


Вверх

Offline

Kirill Sobolev

 


#2
Оставлено
:

29 октября 2013 г. 9:51:46(UTC)

Кирилл Соболев

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

Группы: Участники

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

Поблагодарили: 177 раз в 168 постах

Значение cbSignedMessageBlob похоже на правду после первого вызова?

Цитата:

@MessageArray
@MessageSize

Что это такое?

Техническую поддержку оказываем тут
Наша база знаний


Вверх

WWW


Offline

Alex_Prodigy

 


#3
Оставлено
:

30 октября 2013 г. 2:48:29(UTC)

Alex_Prodigy

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

Группы: Участники

Зарегистрирован: 29.10.2013(UTC)
Сообщений: 11
Российская Федерация
Откуда: г. Чита

Автор: Kirill Sobolev Перейти к цитате

Значение cbSignedMessageBlob похоже на правду после первого вызова?

Цитата:

@MessageArray
@MessageSize

Что это такое?

1.
cbSignedMessageBlob всегда точно такой же, как при подписи файла через csptest.exe — 2273 (после подписи должен стать 2257)
если не включать сертификат в подпись, то cbSignedMessageBlob меньше, но опять такой же, как и при вызове csptest

2.

Код:

var
MessageArray: array of PByte;
MessageSize: array of DWORD;
...
pStreamIn := TMemoryStream.Create;
try
  pStreamOut := TMemoryStream.Create;
  try
    SetLength(MessageArray, 1);
    SetLength(MessageSize, 1);
    pStreamIn.LoadFromFile(AFile);
    MessageArray[0] := pStreamIn.Memory;
    MessageSize[0] := pStreamIn.Size;

                          FillChar(SigParams, SizeOf(CRYPT_SIGN_MESSAGE_PARA), #0);
                          //ZeroMemory(@SigParams, SizeOf(CRYPT_SIGN_MESSAGE_PARA));
                          SigParams.cbSize := SizeOF(CRYPT_SIGN_MESSAGE_PARA);
                          SigParams.dwMsgEncodingType := encType; //PKCS_7_ASN_ENCODING; //encType;
                          SigParams.pSigningCert := cert; //pSignerCert;
                          SigParams.HashAlgorithm.pszObjId := cert^.pCertInfo^.SignatureAlgorithm.pszObjId;
                          SigParams.cMsgCert := 1;
                          SigParams.rgpMsgCert := @cert;

                          cbSignedMessageBlob := 0;
                          // первый вызов CryptSignMessage отрабатывает, как положено, без нареканий
                          if (not (CryptSignMessage(@SigParams,
                            True {для Detached},
                            1,
                            @MessageArray,
                            @MessageSize, nil,
                            cbSignedMessageBlob))) then
                            begin
                              ShowMessage(SysErrorMessage(GetLastError) + ' - ' + IntToStr(GetLastError));
                              Exit;
                            end;

    pStreamOut.SetSize(cbSignedMessageBlob);
    if (not (CryptSignMessage(@SigParams,
             True {для Detached},
             1,
             @MessageArray,
             @MessageSize,
             pStreamOut.Memory,
             cbSignedMessageBlob))) then
    begin
// сваливается сюда с кодом 2148073504
ShowMessage(SysErrorMessage(GetLastError) + ' - ' + IntToStr(GetLastError));
Exit;
end;
pStreamOut.SetSize(cbSignedMessageBlob);
if FileExists(AFile + '.sig') then
DeleteFile(AFile + '.sig');
pStreamOut.SaveToFile(AFile + '.sig');
  finally
    FreeAndNil(pStreamOut);
  end;
finally
  FreeAndNil(pStreamIn);
end;

Вверх

Offline

Kirill Sobolev

 


#4
Оставлено
:

30 октября 2013 г. 8:12:54(UTC)

Кирилл Соболев

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

Группы: Участники

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

Поблагодарили: 177 раз в 168 постах

Цитата:

SigParams.cbSize := SizeOF(CRYPT_SIGN_MESSAGE_PARA);

Какое реально значение?

Цитата:

SigParams.HashAlgorithm.pszObjId := cert^.pCertInfo^.SignatureAlgorithm.pszObjId;

Так делать нельзя. OID ГОСТ Р.34-11 — 1.2.643.2.2.9.

Техническую поддержку оказываем тут
Наша база знаний


Вверх

WWW


Offline

Alex_Prodigy

 


#5
Оставлено
:

30 октября 2013 г. 8:21:52(UTC)

Alex_Prodigy

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

Группы: Участники

Зарегистрирован: 29.10.2013(UTC)
Сообщений: 11
Российская Федерация
Откуда: г. Чита

Автор: Kirill Sobolev Перейти к цитате

Цитата:

SigParams.cbSize := SizeOF(CRYPT_SIGN_MESSAGE_PARA);

Какое реально значение?

Получается 68

Автор: Kirill Sobolev Перейти к цитате

Цитата:

SigParams.HashAlgorithm.pszObjId := cert^.pCertInfo^.SignatureAlgorithm.pszObjId;

Так делать нельзя. OID ГОСТ Р.34-11 — 1.2.643.2.2.9.

Почему нельзя?
В примере, конечно, стоит szOID_RSA_SHA1RSA, но я предположил, что нужно брать из сертификата эту информацию… Eh?
У меня в итоге получается 1.2.643.2.2.3 — неправильно? Надо именно 1.2.643.2.2.9 указывать?

К слову, поставил SigParams.HashAlgorithm.pszObjId := ‘1.2.643.2.2.9’;
Ничего не поменялось…

P.S. Забыл упомянуть, второй раз даже не появляется окно с запросом пароля.

Отредактировано пользователем 30 октября 2013 г. 8:28:22(UTC)
 | Причина: Добавка


Вверх

Offline

MCR

 


#6
Оставлено
:

30 октября 2013 г. 8:57:01(UTC)

MCR

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

Группы: Участники

Зарегистрирован: 06.03.2012(UTC)
Сообщений: 177

Сказал(а) «Спасибо»: 57 раз
Поблагодарили: 11 раз в 8 постах

Автор: Alex_Prodigy Перейти к цитате

Автор: Kirill Sobolev Перейти к цитате

Цитата:

SigParams.cbSize := SizeOF(CRYPT_SIGN_MESSAGE_PARA);

Какое реально значение?

Получается 68

Автор: Kirill Sobolev Перейти к цитате

Цитата:

SigParams.HashAlgorithm.pszObjId := cert^.pCertInfo^.SignatureAlgorithm.pszObjId;

Так делать нельзя. OID ГОСТ Р.34-11 — 1.2.643.2.2.9.

Почему нельзя?
В примере, конечно, стоит szOID_RSA_SHA1RSA, но я предположил, что нужно брать из сертификата эту информацию… Eh?
У меня в итоге получается 1.2.643.2.2.3 — неправильно? Надо именно 1.2.643.2.2.9 указывать?

К слову, поставил SigParams.HashAlgorithm.pszObjId := ‘1.2.643.2.2.9’;
Ничего не поменялось…

P.S. Забыл упомянуть, второй раз даже не появляется окно с запросом пароля.

Нельзя т.к. SigParams.HashAlgorithm.pszObjId := cert^.pCertInfo^.SignatureAlgorithm.pszObjId;


Вверх

Offline

Alex_Prodigy

 


#7
Оставлено
:

30 октября 2013 г. 9:03:53(UTC)

Alex_Prodigy

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

Группы: Участники

Зарегистрирован: 29.10.2013(UTC)
Сообщений: 11
Российская Федерация
Откуда: г. Чита

Автор: MCR Перейти к цитате

Цитата:

Нельзя т.к. SigParams.HashAlgorithm.pszObjId := cert^.pCertInfo^.SignatureAlgorithm.pszObjId;

А что конкретно туда нужно присваивать?

Я уже много чего пробовал:
‘1.2.643.2.2.3’;
‘1.2.643.2.2.9’;
szOID_RSA_MD5;
CertAlgIdToOID(CALG_MD5);
szOID_PKCS_7;


Вверх

Offline

MCR

 


#8
Оставлено
:

30 октября 2013 г. 12:37:58(UTC)

MCR

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

Группы: Участники

Зарегистрирован: 06.03.2012(UTC)
Сообщений: 177

Сказал(а) «Спасибо»: 57 раз
Поблагодарили: 11 раз в 8 постах

Автор: Alex_Prodigy Перейти к цитате

Автор: MCR Перейти к цитате

Цитата:

Нельзя т.к. SigParams.HashAlgorithm.pszObjId := cert^.pCertInfo^.SignatureAlgorithm.pszObjId;

А что конкретно туда нужно присваивать?

Я уже много чего пробовал:
‘1.2.643.2.2.3’;
‘1.2.643.2.2.9’;
szOID_RSA_MD5;
CertAlgIdToOID(CALG_MD5);
szOID_PKCS_7;

Не нужно много. Лучше правильно:

Код:

szOID_CP_GOST_R3411 = '1.2.643.2.2.9';

И пробуйте в TMemoryStream результат сразу из функции не записывать.

Отредактировано пользователем 30 октября 2013 г. 12:41:33(UTC)
 | Причина: Не указана


Вверх

Offline

Alex_Prodigy

 


#9
Оставлено
:

31 октября 2013 г. 1:47:11(UTC)

Alex_Prodigy

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

Группы: Участники

Зарегистрирован: 29.10.2013(UTC)
Сообщений: 11
Российская Федерация
Откуда: г. Чита

Автор: MCR Перейти к цитате

Цитата:

Не нужно много. Лучше правильно:

Код:

szOID_CP_GOST_R3411 = '1.2.643.2.2.9';

И пробуйте в TMemoryStream результат сразу из функции не записывать.

Я пробовал 1.2.643.2.2.9.
И записывать не сразу в поток тоже пробовал, никаких перемен :(
Может быть, Delphi 7 уже не подходит для этого?
Или у меня старенький Крипто-Про установлен?

Версия ядра СКЗИ: 3.6.5359 КС1
Версия продукта: 3.6.6627

P.S. Меня смущает, что именно при втором вызове функции вываливается ошибка… И даже не спрашивает пароль, т.е. ошибка возникает ещё до момента самого подписания.


Вверх

Offline

Андрей Писарев

 


#10
Оставлено
:

31 октября 2013 г. 3:00:02(UTC)

Андрей *

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

Группы: Участники

Зарегистрирован: 26.07.2011(UTC)
Сообщений: 11,752
Мужчина
Российская Федерация

Сказал «Спасибо»: 451 раз
Поблагодарили: 1840 раз в 1423 постах

Автор: Alex_Prodigy Перейти к цитате

Автор: MCR Перейти к цитате

Цитата:

Не нужно много. Лучше правильно:

Код:

szOID_CP_GOST_R3411 = '1.2.643.2.2.9';

И пробуйте в TMemoryStream результат сразу из функции не записывать.

Я пробовал 1.2.643.2.2.9.
И записывать не сразу в поток тоже пробовал, никаких перемен :(
Может быть, Delphi 7 уже не подходит для этого?
Или у меня старенький Крипто-Про установлен?

Версия ядра СКЗИ: 3.6.5359 КС1
Версия продукта: 3.6.6627

P.S. Меня смущает, что именно при втором вызове функции вываливается ошибка… И даже не спрашивает пароль, т.е. ошибка возникает ещё до момента самого подписания.

С версиями ПО все нормально.

Техническую поддержку оказываем тут
Наша база знаний


Вверх

WWW

Пользователи, просматривающие эту тему

Guest

Форум КриптоПро
 » 
Средства криптографической защиты информации
 » 
Встраивание
 » 
CryptSignMessage — внутренняя ошибка 2148073504 при втором вызове

Быстрый переход
 

Вы не можете создавать новые темы в этом форуме.

Вы не можете отвечать в этом форуме.

Вы не можете удалять Ваши сообщения в этом форуме.

Вы не можете редактировать Ваши сообщения в этом форуме.

Вы не можете создавать опросы в этом форуме.

Вы не можете голосовать в этом форуме.

Adobe
Adobe Support Community

search

  • Global community

    • Language:
      • Deutsch

      • English

      • Español

      • Français

      • Português

  • 日本語コミュニティ
  • 한국 커뮤니티
    • Home

    • Acrobat

    • Discussions

  • Sometimes error message no. 2148073504 when digita…

correct answers
1 Correct answer

Markus6

New Here

,

Jan 14, 2011
Jan 14, 2011

Markus6



New Here

,

Jan 14, 2011
Jan 14, 2011

I get the same error sometimes.

Win7 64 Bit

ReinerSCT  cyber Jack

D-Trust SiG Card with Cert (German law approved)

Nexus Personal 4.16

Acrobat 9.4.1

Open PDF — assign Signature — Acrobat ask for Cert — then the error 2148073504.

Close Acrobat — wait 1-2 Minutes …. it runs …. sometimes …. restart PC ….. sometimes.

replies
10
Replies
10

Adobe Acrobat Feature & Workflow

Adobe
Adobe Support Community

search

  • Global community

    • Language:
      • Deutsch

      • English

      • Español

      • Français

      • Português

  • 日本語コミュニティ
  • 한국 커뮤니티
    • Home

    • Acrobat

    • Discussions

  • Sometimes error message no. 2148073504 when digita…

correct answers
1 Correct answer

Markus6

New Here

,

Jan 14, 2011
Jan 14, 2011

Markus6



New Here

,

Jan 14, 2011
Jan 14, 2011

I get the same error sometimes.

Win7 64 Bit

ReinerSCT  cyber Jack

D-Trust SiG Card with Cert (German law approved)

Nexus Personal 4.16

Acrobat 9.4.1

Open PDF — assign Signature — Acrobat ask for Cert — then the error 2148073504.

Close Acrobat — wait 1-2 Minutes …. it runs …. sometimes …. restart PC ….. sometimes.

replies
10
Replies
10

Adobe Acrobat Feature & Workflow

Добрый день дорогие друзья! Сегодня будем рассматривать проблему с программой АРМ ФСС, а именно «ошибка: набор ключей не определен». С данной ошибкой Вы скорее всего столкнетесь, при загрузке ЭЛН. Будем справлять! Поехали!

АРМ ФСС ошибка: набор ключей не определен

Если у Вас не получается самостоятельно решить данную проблему, то Вы можете перейти в раздел ПОМОЩЬ и Вам помогут наши специалисты.

С данной проблемой я столкнулся, как раз при загрузке электронного больничного. Для начала обновим АРМ ФСС. Как обновить АРМ ФСС прочитайте вот тут.

Теперь перейдем в раздел меню «Учетная работа» и выберем «АРМ подписания и шифрования».

АРМ подписания и шифрования

Теперь будем внимательными! Нам необходимо проставить правильные ключи. То есть, правильно выбрать наши сертификаты.

Какие сертификаты ставить при загрузке больничного в АРМ ФСС

Переходим в раздел «Личный сертификат ЭЛН. Страхователь». Это сертификат нашей организации! Выбираем его, нажав на кнопку с открытой папкой.

Открываем сертификат организации

Переходим в раздел личные, и выбираем наш сертификат.

Выбираем сертификат

СТОП! Ни одного сертификата? Это уже странно!

В АРМ ФСС не отображаются сертификаты, что делать?

С 2019 года, мы переходим на новый ГОСТ по электронной подписи. Называется он ГОСТ 2012. До 2019 года мы использовали сертификаты выпущенные под ГОСТ 2001. Получается, что 2019 год переходный между двумя ГОСТ. Сейчас разрешено использовать сертификат и 2001 ГОСТа и 2012. Если Вы перевыпускали или выпускали новый сертификат в 2019 году, то с вероятностью 99% у Вас уже новый ГОСТ 2012. Если Вы выпускали сертификат в 2018, то скорее всего еще 2001. В этом вся проблема. Теперь найдем наши сертификаты!

Обратите внимание, что в новых версиях появился переключатель на разные ГОСТ.

Выбираем ГОСТ

Переключая данный режим, Вы увидите Ваши сертификаты. Попробуйте сначала поставить ГОСТ 2001, если сертификаты не отобразились, поставьте ГОСТ 2012. Я уверен, Вы найдете свой сертификат.

Все, мы нашли наш спрятанный сертификат, теперь идем дальше!

Устанавливаем сертификаты руководителя

Личный сертификат ЭЛН. Руководитель. Выставляете сертификат директора, как правило, он совпадает с сертификатом организации.

А вот дальше не торопитесь!

Устанавливаем правильного криптопровайдера

Теперь нам нужно определиться с криптопровайдером. Звучит страшно и сложно, но сейчас все будет понятно!

Поднимаемся выше и смотрим, сертификат какого ГОСТа мы выбирали. Если у Вас сертификат ГОСТ 2001, то в строке «Криптопровайдер» выбираете пункт «Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider». Если Ваш сертификат 2012 ГОСТа, то выбираете «Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider».

Выставляем криптопровайдера

Устанавливаем сертификаты ФСС

Тут все очень просто. Во-первых по данной теме у меня уже есть статья, там подробно все описано, поэтому писать еще раз не буду. Прочитать ее можно вот тут.

Просто скажу, что для успешной установки Вам нужно нажать 2 кнопки: «Установить сертификат уполномоченного лица ФСС ЭЛН» и «Установить сертификат уполномоченного лица ФСС».

Устанавливаем сертификаты ФСС

Далее снова выбираем «Личный сертификат», это сертификат нашей фирмы. В итоге, правильная таблица выглядит так.

Правильная расстановка сертификатов ФСС

Нет заветной кнопки «сохранить». Вот сейчас закрою окно и все пропадёт! Вас тоже это постоянного напрягает? И меня! Но нет, смело закрываем, настройки не собьются!

РЕШЕНО! АРМ ФСС ошибка: набор ключей не определен

Друзья! Если вдруг ошибка у Вас не пропала, экспериментируйте с сертификатами и ГОСТами, со строчкой Криптопровайдер. Вся ошибка кроется именно в этом! Если же у Вас все-таки не получается самостоятельно настроить, то переходите в раздел «ПОМОЩЬ», и я Вам помогу!

Если Вам нужна помощь профессионального системного администратора, для решения данного или какого-либо другого вопроса, перейдите в раздел ПОМОЩЬ, и Вам помогут наши сотрудники.

На этом все! Теперь Вы знаете, что делать, если у Вас ошибка в программе АРМ ФСС ошибка: набор ключей не определен.

Если у Вас появятся вопросы задавайте их в комментариях! Всем удачи и добра!

Присоединяйтесь к нам в социальных сетях, чтобы самыми первыми получать все новости с нашего сайта!

Расшифровка кодов ошибок на отчеты ФСС

-10    He удалось расшифровать
        Общая ошибка расшифровки. Рекомендуется проверить действительность сертификата УЦ, выдавшего вам ЭП (текущее состояние кросс-сертификации УЦ ФСС РФ и доверенных УЦ).
-11    He удалось проверить ЭП.
    Ошибка сертификата пользователя – в данном случае следует связаться с УЦ, выдавшим вам ЭП. XML – файл был подписан дважды, необходимо выбрать и подписать файл расчета еще раз. Нарушен порядок подписания / шифрования файла расчета. Файл расчета сначала подписывается ЭП, затем зашифровывается.
-13    В сертификате отсутствует регистрационный номер страхователя.
    Сертификат пользователя не содержит записи о Регистрационном номере страхователя (свойство 1.2.643.3.141.1.1 поля «Субъект» сертификата). Необходимо обратиться в УЦ, выдавший сертификат для его переиздания.
-14    В сертификате отсутствует код подразделения ФСС РФ.
    Сертификат пользователя не содержит записи о Коде подразделения ФСС РФ (свойство 1.2.643.3.141.1.2 поля «Субъект» сертификата). Необходимо обратиться в УЦ, выдавший сертификат для его переиздания.
-15    Ошибка шифрования
    Внутренняя ошибка криптосервиса. Необходимо отправить файл расчета повторно.
-16    Неверный формат регистрационного номера страхователя.
    В сертификате, выданным УЦ, неправильно указан регистрационный номер страхователя (количество цифр регистрационного номера не равно 10). Необходимо обратиться в УЦ, выдавший сертификат для его переиздания.
-17    Неверный формат кода подразделения ФСС РФ.
    В сертификате, выданным УЦ, неправильно указан код подразделения ФСС РФ (количество цифр код подразделения не равно 4). Необходимо обратиться в УЦ, выдавший сертификат для его переиздания.
-18    Расчет зашифрован на ключе, отличном от открытого ключа ФСС.
    1.    При подписании и шифровании файла расчета выбран неверный сертификат уполномоченного лица ФСС РФ. В данном случае нужно повторить операцию подписания и шифрования используя сертификат уполномоченного лица ФСС РФ Хасянова Рената Алиевича (Департамент ИТ ФСС РФ).
        2.            При подписании и шифровании файла расчета выбран просроченный сертификат уполномоченного лица ФСС РФ. Необходимо использовать новый сертификат уполномоченного лица ФСС РФ. Для этого их необходимо загрузить новый сертификат с официального сайта Фонда http://www.fss.ru/uc и установить в хранилище сертификатов («Обновление сертификатов УЦ ФСС РФ»).

-19    Расчет не зашифрован или не подписан.
    Необходимо подписать, зашифровать и направить файл расчета на шлюз приема расчетов повторно.
-20    Неизвестный формат файла.    
        Формат файла не xml. Необходимо сформировать новый файл расчёта в соответствии с Технологией приема расчетов (http://fss.ru/ru/legal_information/124/133/68837.shtml).

-41    Не найден издатель сертификата.
    Не установлен корневой сертификат УЦ или истек срок действия кросс-сертификата УЦ, выдавшего сертификат пользователя. Необходимо связаться с УЦ, выдавшим сертификат пользователя., предварительно проверив на состояние сертификата.

-42    Ошибка при проверке сертификата.
    Общая ошибка шифрования. Необходимо отправить файл расчета повторно.
-43    Сертификат отозван.
    Сертификат, которым подписан файл расчета, более недействителен. Необходимо связаться с УЦ, выдавшим сертификат пользователя.
-44    Не найден или просрочен СОС издателя сертификата.
    Ошибка списка отозванных сертификатов (СОС) УЦ, выдавшего сертификат пользователя. Необходимо связаться для консультации с УЦ, выдавшим сертификат пользователя.
-45    Сертификат поврежден.
    Общая ошибка шифрования. Необходимо отправить файл расчета повторно.
-46    Сертификат просрочен
    Сертификат пользователя, которым подписан файл расчета , более недействителен. Необходимо обратиться в УЦ, выдавший сертификат для его переиздания.
-503    XML-файл расчёта не прошел форматный контроль
    Рекомендуется проверить xml-файл по XSD схеме

-504    В сертификате указано несуществующее подразделение ФСС РФ
    В сертификате пользователя, выданным УЦ, неправильно указан код подразделения ФСС РФ. Необходимо обратиться в УЦ, выдавший сертификат для его переиздания.
-505    Неверное наименование файла.
    Привести наименование файла расчёта в соответствиес Технологией приема расчетов (http://fss.ru/ru/legal_information/124/133/68837.shtml).

-506    Вторые разделы расчёта имеют одинаковые шифры налогообложения
    Необходимо исправить расчёт.
-507    Нет файла ..xml    ,Не загружен файл расчета.
        Необходимо отправить файл расчета повторно.
-508    Ошибки логического контроля
    Необходимо исправить ошибочные параметры расчёта, указанные в протоколе проверки.
-509    Отчетный период в XML-файле не совпал с отчетным периодом в наименовании файла
    Необходимо привести содержание xml-файла расчёта в соответствие с наименованием.
-511    Ошибка при чтении XML-файла расчёта
    Файл пуст или не является XML-файлом
-512    Расчетный год в XML-файле не совпал с расчетным годом в наименовании файла расчёта.
    Необходимо привести содержание xml-файла расчёта в соответствие с наименованием.
-513    Регистрационный номер страхователя в сертификате не совпадает с регистрационным номером, указанном в имени файла.
    Файл расчёта подписан ЭП, принадлежащей организации отличной от организации, указанной в расчёте. Необходимо проверить сертификат используемый для ЭП.
-514    Регистрационный номер страхователя в XML-файле не совпадает с регистрационным номером в сертификате ЭП.
    Необходимо привести содержание xml-файла расчёта в соответствие с сертификатом.
-517    Слишком большой файл
    Размер файла расчёта превышает максимально допустимое значение 655360 байт. Необходимо сформировать новый файл расчёта
-518    Нулевой размер файла
    Необходимо сформировать новый файл расчёта

Понравилась статья? Поделить с друзьями:

Интересное по теме:

  • 2147943726 ошибка планировщика
  • 2147943712 ошибка планировщика
  • 2147943645 ошибка планировщика
  • 2147942402 ошибка планировщика задач
  • 2147750704 планировщик ошибка

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии