Статус: Сотрудник
Группы: Участники
Зарегистрирован: 18.02.2015(UTC) Сообщений: 16   Откуда: Москва Поблагодарили: 1 раз в 1 постах
|
У вас вероятно Interop.CAdESCOM.dll не соответствует cadescom.dll.
В шапке форума обновленный Interop.CAdESCOM.dll, попробуйте с ним. Также когда будете подключать его, убедитесь, что в свойствах референса Interop.CAdESCOM Embed Interop Types = False.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 17.09.2014(UTC) Сообщений: 122  Сказал «Спасибо»: 5 раз Поблагодарили: 2 раз в 2 постах
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 21.02.2012(UTC) Сообщений: 9
|
Всех Приветствую! Скачал dll из шапки форума. В проекте VS 2013 .NET 4.5 подсоединил обе. Пытаюсь подписать файл: Код:
try
{
CPSigner signer = new CPSignerClass();
signer.Certificate = GetSignerCertificateBySerialNum(certSerialNum);
CadesSignedData signedData = new CadesSignedDataClass();
//Если я выберу здесь CADESCOM_BASE64_TO_BINARY
//И буду передавать массив byte[] переведенный в BASE64
//signedData.ContentEncoding = CADESCOM_CONTENT_ENCODING_TYPE.CADESCOM_BASE64_TO_BINARY;
//Здесь ОШИБКА: неверные данные
signedData.Content = content;
byte[] signCades = signedData.SignCades(
signer,
CADESCOM_CADES_TYPE.CADESCOM_CADES_BES,
false,
CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64
);
return signCades;
}
catch (Exception ex)
{
throw new CryptoException(GetErrorString(ex.Message));
}
Если я передаю простой массив байт из файла - Все хорошо. Подпись накладывается. НО не проходит проверку в КритоАрм - Ошибка: неверный тег ASN.1 Если передаю массив байт, закодированный в BASE64 - Ошибка здесь: Код:
signedData.Content = content;
Неверный данные. На выходе с обычным массивом байт получается BASE64 закодированное сообщение в кодировке UCS-2 little endian. Почему нельзя поменять кодировку у CadesSignedData ? Как на выходе получить подписанный файл, чтобы КриптоАрм понимал теги ASN.1 ? P.S. Не судите строго, с подобной задачей впервые... Отредактировано пользователем 24 марта 2015 г. 9:29:41(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 18.02.2015(UTC) Сообщений: 16   Откуда: Москва Поблагодарили: 1 раз в 1 постах
|
Давайте по порядку, сначала разберемся с кодировками.
Проверьте, верно ли вы делаете. Сначала необходимо задать ContentEncoding - кодировку в которой будет передаваться content. После установки ContentEncoding, передавать Content. После установки Content менять кодировку нельзя. Если вы хотите подписать бинарные данные и указали ContentEncoding = CADESCOM_BASE64_TO_BINARY, то перед передачей Content данные необходимо перевести в BASE64. Подпишутся при этом бинарные данные. По умолчанию, если не задан ContentEncoding считается, что ContentEncoding имеет значение CADESCOM_STRING_TO_UCS2LE. Соответствтенно, при ContentEncoding == CADESCOM_STRING_TO_UCS2LE передавать следует бинарные данные.
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 10.06.2016(UTC) Сообщений: 1 
|
поправьте ссылки на скачивание в шапке. они не работают!
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 17.04.2015(UTC) Сообщений: 31  Откуда: Тирасполь Сказал(а) «Спасибо»: 4 раз Поблагодарили: 2 раз в 2 постах
|
Добрый день, мы пытаемся использовать CPHashedData из Interop.CAdESCOM, но возникает проблема, у объекта типа CPHashedData почему-то поле Algorithm является полем типа CAPICOM_HASH_ALGORITHM, а не CADESCOM_HASH_ALGORITHM, как подразумевается. При этом поле DataEncoding является полем CADESCOM_CONTENT_ENCODING_TYPE. Кроме того функции CoSignHash и SignHash в качестве первого параметра хотят получать объект типа HashedData, а не CPHashedData, хотя при этом функция VerifyHash принимает как раз таки аргумент типа CPHashedData.
Вопрос в том, что это проблемы с dll или мы просто не правильно пытаемся использовать её функции?
PS Ссылки на скачивание в первом посте действительно не работают.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 17.04.2015(UTC) Сообщений: 31  Откуда: Тирасполь Сказал(а) «Спасибо»: 4 раз Поблагодарили: 2 раз в 2 постах
|
В продолжение к предыдущему посту: Вроде как разобрались как правильно использовать SignHash: Необходимо просто использовать приведение типов: Algorithm = (CAPICOM_HASH_ALGORITHM)CADESCOM_HASH_ALGORITHM.CADESCOM_HASH_ALGORITHM_MD5 и signature = oSignedData.SignHash( (HashedData)myHesh, oSigner, CADESCOM_CADES_TYPE.CADESCOM_CADES_BES); Полный код функции приведу ниже: Код:
private static string LongMakeCadesBesSign(string dataToSign, Certificate certObject, string oldSignature = "")
{
string signature = "";
try
{
CPSigner oSigner = new CPSigner
{
Certificate = certObject,
Options = CAPICOM_CERTIFICATE_INCLUDE_OPTION.CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN
};
CadesSignedData oSignedData = new CadesSignedData
{
DisplayData = CADESCOM_DISPLAY_DATA.CADESCOM_DISPLAY_DATA_CONTENT,
ContentEncoding = CADESCOM_CONTENT_ENCODING_TYPE.CADESCOM_BASE64_TO_BINARY
};
if (!string.IsNullOrEmpty(dataToSign))
{
byte[] bytes = Encoding.UTF8.GetBytes(dataToSign);
string base64String = Convert.ToBase64String(bytes);
CPHashedData myHesh = new CPHashedData
{
Algorithm = (CAPICOM_HASH_ALGORITHM)CADESCOM_HASH_ALGORITHM.CADESCOM_HASH_ALGORITHM_MD5,
DataEncoding = CADESCOM_CONTENT_ENCODING_TYPE.CADESCOM_BASE64_TO_BINARY
};
myHesh.Hash(base64String);
try
{
signature = oSignedData.SignHash((HashedData)myHesh, oSigner, CADESCOM_CADES_TYPE.CADESCOM_CADES_BES);
}
catch (Exception err)
{
MessageBox.Show("Не удалось создать подпись из-за ошибки: " + err.Message);
}
}
}
catch (Exception err)
{
MessageBox.Show("Не удалось получить доступ к криптопровайдеру: " + err.Message);
}
return signature;
}
Отредактировано пользователем 25 ноября 2016 г. 14:57:27(UTC)
| Причина: Не указана
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
Ссылки поправили, спасибо. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.09.2018(UTC) Сообщений: 16  Откуда: Киров Сказал(а) «Спасибо»: 2 раз
|
Добрый день. Посоветовали обратиться в общие вопросы. Плагин IE на тестовой странице формирует усовершенствованную подпись формата CADES-T Но при попытке программного формирования ЭЦП этого формата - получаю ошибку 80072EE6. Как я понимаю - проблема именно с доступом к службе штампов времени - TimeOut Файерволы отключены, антивирусы отключены. галка в настройках IE "Автоматическое определение параметров" - снята. Лицензии действующие. Прокси серверов нет. Что еще может быть не так, может что-то необходимо установить или отключить. OC WIN7, тое самое на WIN8 Обращение идет к тестовому серверу службы https://testca.cryptopro.ru/tsp/tsp.srfhttps://www.cryptopro.ru/tsp/tsp.srfПерепробовал кажется все, может кто сталкивался с проблемой, подскажете. Спасибо Отредактировано пользователем 29 октября 2018 г. 20:58:19(UTC)
| Причина: Не указана
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 24.01.2019(UTC) Сообщений: 1  Откуда: Perm
|
Добрый день.
Подскажите, пожалуйста, возможное решение проблемы. У нас на проекте решили перейти на подписание по ГОСТ'у 2012-го года. При верификации подписанного хэша алгоритмом "CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256" выпадает ошибка "Процесс отмены не может быть продолжен - проверка сертификатов недоступна.". Может кто-нибудь сталкивался с данной проблемой?
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 27.04.2020(UTC) Сообщений: 1  Откуда: Киров Сказал(а) «Спасибо»: 1 раз
|
Всем привет. Подскажите новичку КриптоПро, хочу проверить CADES подпись для CMS сообщения на .NET(C#)/ Пробовал найти, каким образом сделать подпись с помощью .Net SDK, но в их примерах не нашел работу с CADES подписями. Нужна проверка подписи типа x-long-type1.
Interop.CADESCom.dll единственный более менее разумный способ это сделать на C#? Она позволяет это сделать?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 10,092   Сказал «Спасибо»: 372 раз Поблагодарили: 1483 раз в 1144 постах
|
Автор: Alexcei88  Всем привет. Подскажите новичку КриптоПро, хочу проверить CADES подпись для CMS сообщения на .NET(C#)/ Пробовал найти, каким образом сделать подпись с помощью .Net SDK, но в их примерах не нашел работу с CADES подписями. Нужна проверка подписи типа x-long-type1.
Interop.CADESCom.dll единственный более менее разумный способ это сделать на C#? Она позволяет это сделать? Да |
|
 1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 08.08.2020(UTC) Сообщений: 5  Откуда: Москва
|
Всем привет!!! Подскажите пожалуйста! Я пытаюсь юзать simple35.zip из пакета КриптоПРО.NET SDK для подписи pdf из c# Изменил Sign.cs (simple35.zip) следующим образом:
// Вычисляем подпись //ContentInfo contentInfo = new ContentInfo(ss.ToArray()); //CmsSigner cmsSigner = new CmsSigner(certificate); //SignedCms signedCms = new SignedCms(contentInfo, true); //signedCms.ComputeSignature(cmsSigner, false); //byte[] pk = signedCms.Encode();
// ---- начало изменений // формируем УЭЦП // получаем и копируем контент Stream rangeStream = sap.GetRangeStream(); MemoryStream contentStream = new MemoryStream(); CopyTo(rangeStream, contentStream); byte[] content = contentStream.ToArray(); string tspServerAddress = @"http://www.cryptopro.ru/tsp/tsp.srf"; CPSigner cps = new CPSigner();
// ------------------------------------------------------------------------------------------ //cps.Certificate = GetCAPICOMCertificate(certificate.Thumbprint); CAPICOM.Store store = new Store(); store.Open(CAPICOM.CAPICOM_STORE_LOCATION.CAPICOM_CURRENT_USER_STORE, "My", CAPICOM.CAPICOM_STORE_OPEN_MODE.CAPICOM_STORE_OPEN_READ_ONLY); var certificates = store.Certificates as CAPICOM.Certificates; //.Find(CAPICOM.CAPICOM_CERTIFICATE_FIND_TYPE.CAPICOM_CERTIFICATE_FIND_KEY_USAGE, //CAPICOM.CAPICOM_KEY_USAGE.CAPICOM_DIGITAL_SIGNATURE_KEY_USAGE); if (certificates.Count == 0) { myWriteLine("COPICOM Сертификатов не найдено!"); return 1; } var en = certificates.GetEnumerator(); en.MoveNext(); CAPICOM.Certificate cert = en.Current as CAPICOM.Certificate; string sCN = getCN(cert.SubjectName); string iCN = getCN(cert.IssuerName); string mySert = buildCertString(sCN, iCN); myWriteLine(mySert); cps.Certificate = cert; // -----------------------------------------------------------------------------------------
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 = 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); // -------конец изменений
В момент вызова csd.EnhanceCades генерится исключение: {"Не удается построить цепочку сертификатов для доверенного корневого центра."}
Не могу понять - дело в сертификате или же все таки я что то в коде упустил. Сертификат создан по ГОСТ Р 34.11/34.10-2001 с ключом шифрования на 512 байт. В цепочке только один корневой центр: CRYPTO-PRO Test Center 2. Я поместил его в контейнер: Доверенные корневые центры сертификации. Вы не сталкивались с подобной проблемой?
Если возможно, помогите пожалуйста!
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 10,092   Сказал «Спасибо»: 372 раз Поблагодарили: 1483 раз в 1144 постах
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 08.08.2020(UTC) Сообщений: 5  Откуда: Москва
|
Большое спасобо, Андрей! А я и не догадывался, что это сообщение о цепочке относится к сертификату службы штампов времени. Еще раз большое спасибо!
Насчет сертификата. Не знаю, почему он так выдает. В свойствах сертификата написано: Алгоритм подписи : ГОСТ Р 34.11/34.10-2001 Алгоритм откр. кл. : ГОСТ Р 34.10-2012 512 бит (1024 бит) И когда я его заказовал, то выбирал: Cripto-Pro GOST R 34.10-2012 Criptographic Service Provider
Эта ошибка ушла! Работает!
Но вот еще напасть.
Размера буфера не хватает! Может быть подскажете опять, по старой дружбе :)))
Начиная от конца кода в предыдущем письме.
byte[] pk = Convert.FromBase64String(signature); // -------конец изменений
// Помещаем подпись в документ byte[] outc = new byte[pk.Length]; PdfDictionary dic2 = new PdfDictionary(); Array.Copy(pk, 0, outc, 0, pk.Length); dic2.Put(PdfName.CONTENTS, new PdfString(outc).SetHexWriting(true)); sap.Close(dic2);
myWriteLine(String.Format("Документ {0} успешно подписан на ключе {1} => {2}.", signingDoc + ".pdf", certificate.Subject, signingDoc + "_signed.pdf")); return 0;
Генерит исключение: The key /Contents is too big. Is 37760, reserved 8002
sap задаю выше:
int intCSize = 20000; Dictionary<PdfName, int> hashtable = new Dictionary<PdfName, int>(); hashtable[PdfName.CONTENTS] = intCSize * 2 + 2; sap.PreClose(hashtable);
Помогите, пожалуйста! А то голову уже сломал...
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 08.08.2020(UTC) Сообщений: 5  Откуда: Москва
|
По поводу предыдущего. Вопрос снимается! В коде все правильно, и все работает. Просто я от усталости потерял внимательность. Компилировал на debug-е, а тест exe запускал релизный. Вот и выдавалась одна и та же ошибка. Я уже потом заметил, что-то размер буфера reserved не меняется, хотя я с ним и так, и эдак экспериментировал... Вот как бывает. Но теперь все ясно. Большое Спасибо!!!
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close