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

Уведомление

Icon
Error

5 Страницы«<2345>
Опции
К последнему сообщению К первому непрочитанному
Offline Alexcei88  
#31 Оставлено : 27 апреля 2020 г. 19:54:38(UTC)
Alexcei88

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

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

Сказал(а) «Спасибо»: 1 раз
Всем привет.
Подскажите новичку КриптоПро, хочу проверить CADES подпись для CMS сообщения на .NET(C#)/
Пробовал найти, каким образом сделать подпись с помощью .Net SDK, но в их примерах не нашел работу с CADES подписями. Нужна проверка подписи типа x-long-type1.

Interop.CADESCom.dll единственный более менее разумный способ это сделать на C#? Она позволяет это сделать?
Offline Андрей *  
#32 Оставлено : 27 апреля 2020 г. 20:02:05(UTC)
Андрей *

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

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

Сказал «Спасибо»: 547 раз
Поблагодарили: 2196 раз в 1714 постах
Автор: Alexcei88 Перейти к цитате
Всем привет.
Подскажите новичку КриптоПро, хочу проверить CADES подпись для CMS сообщения на .NET(C#)/
Пробовал найти, каким образом сделать подпись с помощью .Net SDK, но в их примерах не нашел работу с CADES подписями. Нужна проверка подписи типа x-long-type1.

Interop.CADESCom.dll единственный более менее разумный способ это сделать на C#? Она позволяет это сделать?


Да
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
Alexcei88 оставлено 27.04.2020(UTC)
Offline Андрей Карклин  
#33 Оставлено : 8 августа 2020 г. 13:29:36(UTC)
Андрей Карклин

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

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

Сказал «Спасибо»: 1 раз
Всем привет!!!
Подскажите пожалуйста!
Я пытаюсь юзать 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. Я поместил его в контейнер: Доверенные корневые центры сертификации. Вы не сталкивались с подобной проблемой?

Если возможно, помогите пожалуйста!
Offline Андрей *  
#34 Оставлено : 8 августа 2020 г. 15:56:16(UTC)
Андрей *

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

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

Сказал «Спасибо»: 547 раз
Поблагодарили: 2196 раз в 1714 постах
Здравствуйте.

Для выбранного TSP - http://www.cryptopro.ru/tsp/tsp.srf - должна строится цепочка:
установить корневой http://www.cryptopro.ru/ra/cdp/cacer3.crt


p.s.
ГОСТ 2001 почему используете? Сейчас ГОСТ 2012 должен применяться.
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей Карклин  
#35 Оставлено : 8 августа 2020 г. 17:10:31(UTC)
Андрей Карклин

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

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

Сказал «Спасибо»: 1 раз
Большое спасобо, Андрей!
А я и не догадывался, что это сообщение о цепочке относится к сертификату службы штампов времени.
Еще раз большое спасибо!

Насчет сертификата. Не знаю, почему он так выдает.
В свойствах сертификата написано:
Алгоритм подписи : ГОСТ Р 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);

Помогите, пожалуйста!
А то голову уже сломал...
Offline Андрей Карклин  
#36 Оставлено : 8 августа 2020 г. 19:01:20(UTC)
Андрей Карклин

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

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

Сказал «Спасибо»: 1 раз
По поводу предыдущего. Вопрос снимается!
В коде все правильно, и все работает.
Просто я от усталости потерял внимательность.
Компилировал на debug-е, а тест exe запускал релизный.
Вот и выдавалась одна и та же ошибка.
Я уже потом заметил, что-то размер буфера reserved не меняется,
хотя я с ним и так, и эдак экспериментировал...
Вот как бывает.
Но теперь все ясно.
Большое Спасибо!!!
Offline egn.p  
#37 Оставлено : 3 октября 2023 г. 12:41:50(UTC)
egn.p

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

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

Сказал(а) «Спасибо»: 4 раз
Автор: Новожилова Елена Перейти к цитате
То есть, ни КриптоПро ЭЦП SDK, ни CAdESCOM, ни КриптоПро ЭЦП Browser plug-in вы не ставили?
Без одного из этих компонентов ваш код работать не будет.


Ошибка Retrieving the COM class factory for component with CLSID {94AFFFCC-6C05-4814-B123-A941105AA77F} failed due to the following error: 80040154 Класс не зарегистрирован (0x80040154 (REGDB_E_CLASSNOTREG)). воспроизводится при использовании CAPICOM в .net core приложении. При этом с CAdESCOM всё работает штатно. Interop'ы добавляю для них одинаково. В чём может быть проблема?
КриптоПро ЭЦП SDK, КриптоПро ЭЦП Browser plug-in установлены.
Offline Андрей *  
#38 Оставлено : 3 октября 2023 г. 12:52:53(UTC)
Андрей *

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

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

Сказал «Спасибо»: 547 раз
Поблагодарили: 2196 раз в 1714 постах
Автор: egn.p Перейти к цитате
Автор: Новожилова Елена Перейти к цитате
То есть, ни КриптоПро ЭЦП SDK, ни CAdESCOM, ни КриптоПро ЭЦП Browser plug-in вы не ставили?
Без одного из этих компонентов ваш код работать не будет.


Ошибка Retrieving the COM class factory for component with CLSID {94AFFFCC-6C05-4814-B123-A941105AA77F} failed due to the following error: 80040154 Класс не зарегистрирован (0x80040154 (REGDB_E_CLASSNOTREG)). воспроизводится при использовании CAPICOM в .net core приложении. При этом с CAdESCOM всё работает штатно. Interop'ы добавляю для них одинаково. В чём может быть проблема?
КриптоПро ЭЦП SDK, КриптоПро ЭЦП Browser plug-in установлены.



CAPICOM установлен?
и зачем он используется?
Техническую поддержку оказываем тут
Наша база знаний
Offline egn.p  
#39 Оставлено : 3 октября 2023 г. 13:01:13(UTC)
egn.p

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

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

Сказал(а) «Спасибо»: 4 раз
Автор: Андрей * Перейти к цитате
CAPICOM установлен?
и зачем он используется?


Как его установить? Я скачал dll с https://cryptopro.ru/faq/capicom-i-kriptopro-csp, попытался выполнить команду regsvr32.exe "D:\ab_prj\cryptopro-csp-api\libs\Interop.CAPICOM.dll", получил ответ:
Цитата:
RegSvr32
Модуль "D:\ab_prj\cryptopro-csp-api\libs\Interop.CAPICOM.dll" загружен, но точка входа DllRegisterServer не найдена.
Проверьте, что "D:\ab_prj\cryptopro-csp-api\libs\Interop.CAPICOM.dll" является правильным файлом DLL или OCX и повторите попытку.

Или его надо каким-то другим способом установить? CAdESCOM я никак не устанавливал, он работает.

Используется для проверки подписи формата CMS. Ошибка 80040154 Класс не зарегистрирован вылетает при создании объекта класса SignedDataClass.
Код:

public void VerifyDetachedCms(byte[] signature, byte[] original)
{
    var signedData = new SignedDataClass
    {
        Content = original
    };
    signedData.Verify(signature, bDetached: true);
}


UPD:
библиотеки добавлены в проект:
Код:
<ItemGroup>
    <Reference Include="Interop.CAdESCOM">
        <HintPath>..\..\libs\Interop.CAdESCOM.dll</HintPath>
    </Reference>
    <Reference Include="Interop.CAPICOM">
        <HintPath>..\..\libs\Interop.CAPICOM.dll</HintPath>
    </Reference>
</ItemGroup>

Отредактировано пользователем 3 октября 2023 г. 14:20:18(UTC)  | Причина: Не указана

Offline egn.p  
#40 Оставлено : 3 октября 2023 г. 16:29:09(UTC)
egn.p

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

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

Сказал(а) «Спасибо»: 4 раз
Удалось проверить подпись формата CMS через SignedCms:
Код:
public void VerifyDetachedCms(byte[] signature, byte[] original)
{
    var signatureCms = new ContentInfo(signature);
    var signedCms = new SignedCms(signatureCms, detached: true);
    signedCms.Decode(original);
    
    signedCms.CheckSignature(verifySignatureOnly: false);
}


Можно ли как-то усилить эту подпись до любого из форматов CAdES? Я не нашёл, как перевести данные из SignedCms в CadesSignedDataClass. Есть ли такой механизм?
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
5 Страницы«<2345>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.