logo
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Андрей Т.  
#1 Оставлено : 4 марта 2019 г. 10:29:29(UTC)
Андрей Т.

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

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

Добрый день.
Для собственного ПО возникла необходимость использования УКЭП. Начал с азов.
Что то получается, что то нет. Возникают вопросы...

1. Во встроенном в Windows CryptoAPI нет никаких упоминаний об усиленной подписи. Ничего со словом Cades. Т.е. оно не умеет работать с УКЭП ?
2. КриптоПро установлен, SDK установлен. В SDK вижу только .lib и .h, но мне надо работать с ним из Delphi. Как это сделать?
3. Подпись, созданная на странице
Создаем подпись
и проверенная на странице
проверяем подпись
показывает ошибку "Подлинность документа не подтверждена (HashValidationException)."
Что не так?

Offline Андрей Емельянов  
#2 Оставлено : 4 марта 2019 г. 15:38:39(UTC)
Андрей Емельянов

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

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

Сказал «Спасибо»: 1 раз
Поблагодарили: 138 раз в 135 постах
Добрый день.
Усиленная подпись и усовершенствованная подпись - не одно и то же.
Если Вас интересует именно Усовершенствованная подпись, то информацию можно прочитать на нашем сайте https://www.cryptopro.ru/products/cades
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей Писарев  
#3 Оставлено : 4 марта 2019 г. 19:44:07(UTC)
Андрей Писарев

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

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

Сказал «Спасибо»: 267 раз
Поблагодарили: 1070 раз в 856 постах
Автор: Андрей Т. Перейти к цитате

1. Во встроенном в Windows CryptoAPI нет никаких упоминаний об усиленной подписи. Ничего со словом Cades. Т.е. оно не умеет работать с УКЭП ?
2. КриптоПро установлен, SDK установлен. В SDK вижу только .lib и .h, но мне надо работать с ним из Delphi. Как это сделать?



Здравствуйте.

Самый быстрый способ:
Импортировать и использовать ActiveX - CAdESCOM (тип подписи: CADESCOM_CADES_X_LONG_TYPE_1),
для усовершенстрованной эл.подписи потребуется наличие лицензии на TSP Client+OCSP Client.

Пример через браузер: cades_xlong_sample


Offline Андрей Т.  
#4 Оставлено : 6 марта 2019 г. 5:16:45(UTC)
Андрей Т.

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

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

Спасибо за ответы. Но чтобы перейти к усовершенствованной подписи нужно сначала разобраться с обычной.
Я все-таки научился подписывать, но не научился делать это правильно.
Подскажите, пожалуйста, что неправильно в следующем коде на Delphi?

Код:

Uses  JwaWinCrypt, JwaWinError, EncdDecd;

Type
  TSignedData = record
    SignSize: Cardinal;
    Sign: PChar;
  end;

function SignData(Data: PChar): TSignedData;
var
  Cert: TProperCertificate;  // Cert.pCert: PCERT_CONTEXT;
  SignPara: CRYPT_SIGN_MESSAGE_PARA;
  Error, DataSize: DWORD;
  pbArray, cbArray: Pointer;
begin
  // Тут получение сертификата Cert ...
  
  DataSize := Length(Data);
  pbArray   := @Data;
  cbArray   := @DataSize;

  ZeroMemory(@SignPara, SizeOf(CRYPT_SIGN_MESSAGE_PARA));
  with SignPara do
  begin
    cbSize := SizeOf(SignPara);
    dwMsgEncodingType := X509_ASN_ENCODING or PKCS_7_ASN_ENCODING; 
    pSigningCert := Cert.pCert;
    HashAlgorithm.pszObjId := '1.2.643.2.2.9';  //  GOST R 34.11-94	длина ключа - 256 бит	ID: 32798
    HashAlgorithm.Parameters.cbData := 0;
    pvHashAuxInfo := nil;
    cMsgCert := 1;
    rgpMsgCert := @Cert.pCert;
    cMsgCrl := 0;
    rgpMsgCrl := nil;
    cAuthAttr := 0;
    rgAuthAttr := nil;
    cUnauthAttr := 0;
    rgUnauthAttr := nil;
    dwFlags := 0;
    dwInnerContentType := 0;
  end;

  CryptSignMessage(@SignPara, False, 1, pbArray, cbArray, nil, Result.SignSize);
  GetMem(Result.Sign, Result.SignSize);
  CryptSignMessage(@SignPara, False, 1, pbArray, cbArray, PByte(Result.Sign), Result.SignSize);
end;


Результатом выполнения кода является буфер с подписью. Формат этих данных, если я правильно понял, должен быть PCKS#7, но ни один онлайн парсер не читает его.
При преобразовании в base64 получившийся текст выглядит похоже на подпись ("MIILxAYJKoZIhvcNAQc"... )
Проверки подписи онлайн сообщают, что подпись неверная.
Offline Андрей Писарев  
#5 Оставлено : 6 марта 2019 г. 6:03:33(UTC)
Андрей Писарев

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

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

Сказал «Спасибо»: 267 раз
Поблагодарили: 1070 раз в 856 постах
Что возвращает CryptSignMessage? false?
GetLastError и SysErrorMessage в помощь.

Цитата:

При преобразовании в base64 получившийся текст выглядит похоже на подпись ("MIILxAYJKoZIhvcNAQc"... )


Мусор тоже можно закодировать в base64...
Offline Андрей Т.  
#6 Оставлено : 6 марта 2019 г. 7:09:15(UTC)
Андрей Т.

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

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

CryptSignMessage возвращает True, все проверки из текста убраны, дабы не загромождать.
Ни одна из используемых функций не вернула ошибку.
Offline Андрей Писарев  
#7 Оставлено : 6 марта 2019 г. 11:05:37(UTC)
Андрей Писарев

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

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

Сказал «Спасибо»: 267 раз
Поблагодарили: 1070 раз в 856 постах
Автор: Андрей Т. Перейти к цитате
CryptSignMessage возвращает True, все проверки из текста убраны, дабы не загромождать.
Ни одна из используемых функций не вернула ошибку.


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