Добрый день,
возник вопрос по мотивам форума "Подпись 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;
}
//-----------------
Подскажите пожалуйста, в чем ошибка.
С уважением,
Валерий