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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline ValeryPusenkov  
#1 Оставлено : 7 июня 2016 г. 8:36:04(UTC)
ValeryPusenkov

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

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

Добрый день,
возник вопрос по мотивам форума "Подпись PDF с помощью УЭЦП"
https://www.cryptopro.ru...posts&t=4804&p=2

Документ PDF корректно подписывается УЭЦП в AdobePro. Подпись имеет статус: "Подпись действительна".
Пакетная подпись PDF документов УЭЦП при помощи КриптоПро PDF также работает корректно.
Автоматизация подписания документов обычной ЭЦП на c# (simple35.zip) также происходит корректно.
Проблема возникает при создании УЭЦП для документа PDF на c#:
При проверке в Adobe предупреждает: "At least one signature has problems" (подпись - НЕОПРЕДЕЛЕНА, сертификат ненадежный, проблема с проверкой сертификата и/или его пути).
Код, который формирует подпись следующий:
Изменяем Sign.cs (simple35.zip) следующим образом:
// Вычисляем подпись
// ContentInfo contentInfo = new ContentInfo(ss.ToArray());
// SignedCms signedCms = new SignedCms(contentInfo, true);
// CmsSigner cmsSigner = new CmsSigner(certificate);
// signedCms.ComputeSignature(cmsSigner, false);
// byte[] pk = signedCms.Encode();
// ---- начало изменений
// формируем УЭЦП
// получаем и копируем контент
Stream rangeStream = sap.GetRangeStream();
MemoryStream contentStream = new MemoryStream();
rangeStream.CopyTo(contentStream);
byte[] content = contentStream.ToArray();
string tspServerAddress = @"http://pki.sertum-pro.ru/tsp/tsp.srf";
CPSigner cps = new CPSigner();
cps.Certificate = GetCAPICOMCertificate(certificate.Thumbprint);
cps.Options = CAPICOM_CERTIFICATE_INCLUDE_OPTION.CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN;
cps.TSAAddress = tspServerAddress;
CadesSignedData csd = new CadesSignedData();
csd.Content = Encoding.UTF8.GetString(content);
// Создание подписи CAdES BES
string signature = csd.SignCades(cps, CADESCOM_CADES_TYPE.CADESCOM_CADES_BES, true, CAdESCOM.CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BINARY);
// Дополнение подписи CAdES BES до подписи CAdES X Long Type 1
signature = csd.EnhanceCades(CADESCOM_CADES_TYPE.CADESCOM_CADES_X_LONG_TYPE_1, tspServerAddress, CAdESCOM.CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BINARY);
byte[] pk = GetBytes(signature);
// -------конец изменений
...
где
//Преобразование строки в массив byte
static byte[] GetBytes(string str)
{
byte[] bytes = new byte[str.Length * sizeof(char)];
System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
return bytes;
}
//-----------------

Подскажите пожалуйста, в чем ошибка.
С уважением,
Валерий
Offline cross  
#2 Оставлено : 7 июня 2016 г. 15:52:52(UTC)
Анатолий Беляев

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

Группы: Администраторы, Участники
Зарегистрирован: 24.11.2009(UTC)
Сообщений: 965
Откуда: Crypto-Pro

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 174 раз в 152 постах
Можете приложить подписанный файл который не проверяется?
Техническую поддержку оказываем тут.
Наша база знаний.
Наша страничка в Instagram.
Offline ValeryPusenkov  
#3 Оставлено : 7 июня 2016 г. 17:34:33(UTC)
ValeryPusenkov

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

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

my.pdf_signed.pdf (148kb) загружен 11 раз(а). добавлен подписанный PDF файл
Offline ValeryPusenkov  
#4 Оставлено : 14 июня 2016 г. 11:05:04(UTC)
ValeryPusenkov

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

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

Задача была решена переводом csd.Content в BASE64:
// ---- начало изменений
// формируем УЭЦП
// получаем и копируем контент
Stream rangeStream = sap.GetRangeStream();
MemoryStream contentStream = new MemoryStream();
rangeStream.CopyTo(contentStream);
byte[] content = contentStream.ToArray();
string tspServerAddress = @"http://pki.sertum-pro.ru/tsp/tsp.srf";
CPSigner cps = new CPSigner();
cps.Certificate = GetCAPICOMCertificate(certificate.Thumbprint);
cps.Options = CAPICOM_CERTIFICATE_INCLUDE_OPTION.CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN;
cps.TSAAddress = tspServerAddress;
CadesSignedData csd = new CadesSignedData();
// base64
csd.ContentEncoding = CADESCOM_CONTENT_ENCODING_TYPE.CADESCOM_BASE64_TO_BINARY;
csd.Content = csd.Content = Convert.ToBase64String(content);
// Создание подписи CAdES BES
string signature = null;
signature = csd.SignCades(cps, CADESCOM_CADES_TYPE.CADESCOM_CADES_BES, true, CAdESCOM.CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);
// Дополнение подписи CAdES BES до подписи CAdES X Long Type 1
signature = csd.EnhanceCades(CADESCOM_CADES_TYPE.CADESCOM_CADES_X_LONG_TYPE_1, tspServerAddress, CAdESCOM.CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);
// byte[] pk = GetBytes(signature);
byte[] pk = Convert.FromBase64String(signature);
// -------конец изменений
Offline Андрей Карклин  
#5 Оставлено : 8 августа 2020 г. 12:36:55(UTC)
Андрей Карклин

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

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

Сказал «Спасибо»: 1 раз
Здравствуйте, Валерий! Я тоже в проге на c# пытаюсь сделать подпись pdf в формате CADESCOM_CADES_X_LONG_TYPE_1. Для этого я воспользовался вашим кодом который вы любезно здесь выложили. Но! При попытке подписать pdf тестовым сертификатом, выданным Тестовым центром КриптоПро упорно выдается сообщение: Не удается построить цепочку сертификатов для доверенного корневого центра. Не могу понять - дело в сертификате или же все таки я что то в коде упустил. Сертификат создан по ГОСТ Р 34.11/34.10-2001 с ключом шифрования на 512 байт. В цепочке только один корневой центр: CRYPTO-PRO Test Center 2. Я поместил его в контейнер: Доверенные корневые центры сертификации. Вы не сталкивались с подобной проблемой?
Offline Андрей *  
#6 Оставлено : 8 августа 2020 г. 15:57:39(UTC)
Андрей *

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

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

Сказал «Спасибо»: 494 раз
Поблагодарили: 2035 раз в 1579 постах
Автор: Андрей Карклин Перейти к цитате
Здравствуйте, Валерий! Я тоже в проге на c# пытаюсь сделать подпись pdf в формате CADESCOM_CADES_X_LONG_TYPE_1. Для этого я воспользовался вашим кодом который вы любезно здесь выложили. Но! При попытке подписать pdf тестовым сертификатом, выданным Тестовым центром КриптоПро упорно выдается сообщение: Не удается построить цепочку сертификатов для доверенного корневого центра. Не могу понять - дело в сертификате или же все таки я что то в коде упустил. Сертификат создан по ГОСТ Р 34.11/34.10-2001 с ключом шифрования на 512 байт. В цепочке только один корневой центр: CRYPTO-PRO Test Center 2. Я поместил его в контейнер: Доверенные корневые центры сертификации. Вы не сталкивались с подобной проблемой?


не нужно дублировать
https://www.cryptopro.ru...&m=117932#post117932
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей Карклин  
#7 Оставлено : 8 августа 2020 г. 17:16:23(UTC)
Андрей Карклин

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

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

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