Статус: Новичок
Группы: Участники
Зарегистрирован: 22.03.2021(UTC) Сообщений: 3
Сказал(а) «Спасибо»: 1 раз
|
В документах по ГИС ЖКХ есть ссылка на примеры подписи xml:  Ssylka na git.png (60kb) загружен 4 раз(а).В этих примерах есть библиотека Xades:  Ssylka na library .png (27kb) загружен 8 раз(а).Объект SignatureDescription используется для формирования SignatureValue, который в дальнейшем фигурирует в передаваемой xml.  kod.png (86kb) загружен 4 раз(а). kod2.png (84kb) загружен 3 раз(а).Всё это прекрасно работает на .NET Framework, но хотелось проверить, как без изменения этого кода будет работать на .NET Core
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 20.02.2017(UTC) Сообщений: 158
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 41 раз в 41 постах
|
В core изменилась работа CryptoConfig. Теперь честно через него нельзя получить SignatureDescription, ибо он в нём отсутствует. В core описания SignatureDescription переехали во внутренний закртый класс CryptoHelpers в сборке Xml. CryptoConfig из старого фреймворка - https://referencesource....nfig.cs,2f2b8dcdee3aa37dНовый конфиг - https://github.com/dotne...tography/CryptoConfig.csНовый конфиг Xml - https://github.com/dotne...phy/Xml/CryptoHelpers.csОткрывать CryptoHelpers, как и делать по старому CryptoConfig пока не планируем, ибо стараемся сохранить максимальную совместимость с оригинальным core, даже в рамках спорных решений. Как вариант вам - либо получить CryptoHelpers из сборки System.Security.Cryptography.Xml и пользоваться им, либо написать функцию, которая сама по строке будет возвращать нужный тип описания. Код:var assm = Assembly.GetAssembly(typeof(SignedXml));
var type = assm.GetType("System.Security.Cryptography.Xml.CryptoHelpers");
var createFromKnownNameMethod = type.GetMethod(
"CreateFromKnownName",
BindingFlags.Static | BindingFlags.Public);
var descr = createFromKnownNameMethod.Invoke(null, new object[] { SignedXml.XmlDsigGost3410_2012_256Url });
|
|
 1 пользователь поблагодарил Артём Макаров за этот пост.
|
madsen оставлено 23.03.2021(UTC)
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 22.03.2021(UTC) Сообщений: 3
Сказал(а) «Спасибо»: 1 раз
|
Да, код рабочий, SignatureDescription таким образом можно получить. Ещё вопрос по поводу метода SetContainerPassword. Он убран и ему нет альтернативы?  SetContPass.png (171kb) загружен 6 раз(а). NoSet.png (174kb) загружен 4 раз(а).
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 20.02.2017(UTC) Сообщений: 158
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 41 раз в 41 постах
|
Данный метод пока не реализовывали. Постараемся в ближайшее время добавить. В текущей версии указывать пароль на контейнер можно через указание его в CspParameters (KeyPassword). Отредактировано пользователем 24 марта 2021 г. 10:43:19(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 26.05.2020(UTC) Сообщений: 6
Сказал(а) «Спасибо»: 2 раз Поблагодарили: 1 раз в 1 постах
|
Коллеги, возникла нестандартная потребность. У клиента имеется лицензия на CSP 4.0, хочется на неткоре как-то взлететь с этой версией. Если попробовать поднять приложение и поработать с ним, то натыкаюсь на ошибку: Цитата:System.EntryPointNotFoundException: Unable to find an entry point named 'CertAddCertificateLinkToStore' in shared library 'libcapi20'. at Interop.crypt32.CertAddCertificateLinkToStore(SafeCertStoreHandle hCertStore, SafeCertContextHandle pCertContext, CertStoreAddDisposition dwAddDisposition, IntPtr ppStoreContext) at Internal.Cryptography.Pal.StorePal.LinkFromCertificateCollection(X509Certificate2Collection certificates) at Internal.Cryptography.Pal.FindPal..ctor(X509Certificate2Collection findFrom, X509Certificate2Collection copyTo, Boolean validOnly) at Internal.Cryptography.Pal.FindPal.OpenPal(X509Certificate2Collection findFrom, X509Certificate2Collection copyTo, Boolean validOnly) at Internal.Cryptography.Pal.FindPal.FindFromCollection(X509Certificate2Collection coll, X509FindType findType, Object findValue, Boolean validOnly) at System.Security.Cryptography.X509Certificates.X509Certificate2Collection.Find(X509FindType findType, Object findValue, Boolean validOnly) Подскажите, пожалуйста, в какую сторону копать, чтобы выйти из ситуации?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 20.02.2017(UTC) Сообщений: 158
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 41 раз в 41 постах
|
На 4.0 полностью не взлетим, только с 5.0, причём относительно свежей. Вносили доработки и правки в саму CSP для корректной работы некоторых методов. |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 21.09.2018(UTC) Сообщений: 4  Сказал «Спасибо»: 1 раз
|
Хочу уточнить, можно ли сейчас проверить открепленную подпись, полученную от cryptopro plugin? Подписывали хэш, подпись в формате cades-bes.
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 29.03.2021(UTC) Сообщений: 1 Откуда: Korolyov
|
Добрый день! Возникла проблема с итеграцией с libcapi20 на AstraLinux. Сама либа подключается ок. Сертификаты и контейнеры находятся в системе, но возникает ошибка при проверке наличия сертификата в контейнерах. На Windows интеграция идет с либами crypt32.dll и advapi32.dll - проблемы не возникает. Системный журнал AstraLinux пишет следующее. мар 29 17:03:10 f3pos dotnet[1983]: <capi10>CryptAcquireContextW!WideCharToMultiByte error! мар 29 17:03:10 f3pos dotnet[1983]: <capi10>CryptGetUserKey!() invalid argument(s)! мар 29 17:03:10 f3pos dotnet[1983]: <capi10>CryptGetUserKey!failed: LastError = 0x57 мар 29 17:03:10 f3pos dotnet[1983]: <capi20>CryptExportPublicKeyInfoEx!failed: LastError = 0x57 мар 29 17:03:10 f3pos dotnet[1983]: <capi20>CryptExportPublicKeyInfo!failed: LastError = 0x57 мар 29 17:03:10 f3pos dotnet[1983]: <capi10>CryptGetUserKey!() invalid argument(s)! мар 29 17:03:10 f3pos dotnet[1983]: <capi10>CryptGetUserKey!failed: LastError = 0x57 мар 29 17:03:10 f3pos dotnet[1983]: <capi20>CryptExportPublicKeyInfoEx!failed: LastError = 0x57 мар 29 17:03:10 f3pos dotnet[1983]: <capi20>CryptExportPublicKeyInfo!failed: LastError = 0x57 начинается все с вызова метода CryptExportPublicKeyInfo имплементация: [DllImport("libcapi20.so", EntryPoint = "CryptExportPublicKeyInfo", CharSet = CharSet.Auto, SetLastError = true)] public static extern bool CryptExportPublicKeyInfo( [In] IntPtr hProv, [In] uint dwKeySpec, [In] uint dwCertEncodingType, [Out] IntPtr pInfo, [In, Out] ref uint pcbInfo); сам кроссплатформенный сервис реализован на .net core 3.1 Отредактировано пользователем 29 марта 2021 г. 22:12:20(UTC)
| Причина: Не указана
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 15.03.2021(UTC) Сообщений: 7  Откуда: Рязань Сказал(а) «Спасибо»: 2 раз
|
Здравствуйте! Подскажите, пожалуйста, способ шифрования подписанного XML с использованием вашего CSP на Core. Необходимо создать сессионный ключ и зашифровать некоторые данные XML и сам ключ. Возможно у вас найдется какой-нибудь пример? Это бы очень облегчило жизнь) Ниже на всякий случай приведу указанные алгоритмы. Шифрование ключа по ГОСТ 2012-256: urn:ietf:params:xml:ns:cpxmlsec:algorithms:transport-gost2012-256 Шифрование данных: urn:ietf:params:xml:ns:cpxmlsec:algorithms:gost28147 Спасибо! PS: с шифрованием ранее не сталкивался, поэтому если я что не так написал, прошу меня понять и простить) Upd: Нашел некий пример шифрования на Framework по своей задаче. Классы там более менее те же, (без "CP"). http://www.cryptopro.ru/...&m=111050#post111050Взаимодействие с контейнером CSP происходит. Значит механизм рабочий. Но если вдруг пример у кого нибудь есть, поделитесь пожалуйста. Спасибо! Отредактировано пользователем 30 марта 2021 г. 12:53:44(UTC)
| Причина: Не указана
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 12.04.2021(UTC) Сообщений: 5  Откуда: Нижний Новгород
|
Прошу помощи по работе с проверкой цифровой подписи. Установлены Инструменты КриптоПРО. При помощи инструментов КриптоПРО создан сертификат Алгоритм подписи : ГОСТ Р 34.11/34.10-2001 Алгоритм откр. кл. : ГОСТ Р 34.10-2012 256 бит (512 бит) При помощи этого сертификата подписан файл File, получена подпись File.p7s Сертификат экспортирован в файл. Используя DotnetSampleProject подгружаем Сертификат, файл и файл подписи. Проверяем подпись - подпись не валидна. Код:var hash = HashAlgorithmName.Gost3411_2012_256;
var gostPk = gostCert.GetGost3410_2012_256PublicKey();
var dataValidationResult = gostPk.VerifyData(file, signedFile, hash);
dataValidationResult - false
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 15.03.2021(UTC) Сообщений: 7  Откуда: Рязань Сказал(а) «Спасибо»: 2 раз
|
Эх, надеюсь разработчики на нас не забили, ибо стучаться бедолагам некуда больше) Подскажите, как можно установить Gost28147CryptoServiceProvider.CipherOid? Получаю неверное количество байт при шифровании сессионного ключа, наткнулся на данный пост: http://www.cryptopro.ru/...&m=111050#post111050Однако, у меня этого поля не имеется. Спасибо. Upd: эм.. залез в проект исходников модифицированного corefx, в Gost28147CryptoServiceProvider, а там поле уже есть. (я уж думал придется делать по аналогии с Framework). Попробуем пересобрать под актуальные исходники. Спасибо ^_^ Отредактировано пользователем 14 апреля 2021 г. 11:49:14(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 20.02.2017(UTC) Сообщений: 158
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 41 раз в 41 постах
|
Автор: OFFOSORG  Здравствуйте! Подскажите, пожалуйста, способ шифрования подписанного XML с использованием вашего CSP на Core. Необходимо создать сессионный ключ и зашифровать некоторые данные XML и сам ключ. Возможно у вас найдется какой-нибудь пример? Это бы очень облегчило жизнь) Ниже на всякий случай приведу указанные алгоритмы. Шифрование ключа по ГОСТ 2012-256: urn:ietf:params:xml:ns:cpxmlsec:algorithms:transport-gost2012-256 Шифрование данных: urn:ietf:params:xml:ns:cpxmlsec:algorithms:gost28147 Спасибо! PS: с шифрованием ранее не сталкивался, поэтому если я что не так написал, прошу меня понять и простить) Upd: Нашел некий пример шифрования на Framework по своей задаче. Классы там более менее те же, (без "CP"). http://www.cryptopro.ru/...&m=111050#post111050Взаимодействие с контейнером CSP происходит. Значит механизм рабочий. Но если вдруг пример у кого нибудь есть, поделитесь пожалуйста. Спасибо! Примеры во многом аналогичны примерам из КриптоПро.Net, входящими в состав sdk. Можно скачать КриптоПро.Net SDK и посмотреть примеры оттуда, при необходимости адаптировать. https://cpdn.cryptopro.r...af-972a-28c1f6239b0a.htmhttps://www.cryptopro.ru/products/net/downloads |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 20.02.2017(UTC) Сообщений: 158
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 41 раз в 41 постах
|
Автор: Сергей Сивов  Прошу помощи по работе с проверкой цифровой подписи. Установлены Инструменты КриптоПРО. При помощи инструментов КриптоПРО создан сертификат Алгоритм подписи : ГОСТ Р 34.11/34.10-2001 Алгоритм откр. кл. : ГОСТ Р 34.10-2012 256 бит (512 бит) При помощи этого сертификата подписан файл File, получена подпись File.p7s Сертификат экспортирован в файл. Используя DotnetSampleProject подгружаем Сертификат, файл и файл подписи. Проверяем подпись - подпись не валидна. Код:var hash = HashAlgorithmName.Gost3411_2012_256;
var gostPk = gostCert.GetGost3410_2012_256PublicKey();
var dataValidationResult = gostPk.VerifyData(file, signedFile, hash);
dataValidationResult - false Судя по расширению файла с ненулевой вероятностью у вас CMS подпись. Попробуйте уточнить формат проверяемой подписи, в случае CMS смотрите в сторону классов SignedCms. |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 20.02.2017(UTC) Сообщений: 158
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 41 раз в 41 постах
|
|
|
 1 пользователь поблагодарил Артём Макаров за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 12.04.2021(UTC) Сообщений: 5  Откуда: Нижний Новгород
|
Добрый день. Добавил в MVC проект модуль проверки подписи. В main(), если вызывается функция проверки подписи - она отрабатывает нормально, но как только MVC пытается отрисовать страницу вылетает ошибка "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Тип "Attribute" определен в сборке, на которую нет ссылки. Следует добавить ссылку на сборку "System.Private.CoreLib... Код:One or more compilation failures occurred:
ebgnbxey.t4r(4,55): error CS0012: Тип "Attribute" определен в сборке, на которую нет ссылки. Следует добавить ссылку на сборку "System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e".
ebgnbxey.t4r(4,82): error CS0518: Предопределенный тип "System.Type" не определен или не импортирован
ebgnbxey.t4r(4,129): error CS0518: Предопределенный тип "System.String" не определен или не импортирован
ebgnbxey.t4r(4,146): error CS0518: Предопределенный тип "System.String" не определен или не импортирован
ebgnbxey.t4r(4,12): error CS0518: Предопределенный тип "System.Void" не определен или не импортирован
ebgnbxey.t4r(36,49): error CS0012: Тип "Attribute" определен в сборке, на которую нет ссылки. Следует добавить ссылку на сборку "System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e"....
at Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.RuntimeViewCompiler.CompileAndEmit(RazorCodeDocument codeDocument, String generatedCode)
at Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.RuntimeViewCompiler.CompileAndEmit(String relativePath)
at Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.RuntimeViewCompiler.OnCacheMiss(String normalizedPath)
--- End of stack trace from previous location ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at Microsoft.AspNetCore.Mvc.Razor.Compilation.DefaultRazorPageFactoryProvider.CreateFactory(String relativePath)
at Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.CreateCacheResult(HashSet`1 expirationTokens, String relativePath, Boolean isMainPage)
Без добавленного модуля страницы грузятся и работают нормально. Есть понимание, как подружить КриптоПРО, CoreFx и MVC ?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 29.04.2021(UTC) Сообщений: 13  Сказал(а) «Спасибо»: 2 раз
|
Автор: Артём Макаров  Столкнулся с такой же проблемой. Подскажите, где взять актуальную сборку. На гитхабе последний релиз v3.1.1-cprocsp-preview4.325 от 4 февраля :(
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 29.04.2021(UTC) Сообщений: 13  Сказал(а) «Спасибо»: 2 раз
|
Есть ли возможность использовать библиотеку в проекте на NET5? В проектах на net5 все компилируется, но при выполнении выбрасывается Цитата:System.TypeLoadException HResult=0x80131522 Сообщение = Could not load type 'System.Security.Cryptography.Gost3410CryptoServiceProvider' from assembly 'System.Security.Cryptography.Csp, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. Источник = System.Security.Cryptography.Pkcs Трассировка стека: at System.Security.Cryptography.Pkcs.CmsSigner..ctor(SubjectIdentifierType signerIdentifierType, X509Certificate2 certificate, AsymmetricAlgorithm privateKey) in C:\projects\corefx\src\System.Security.Cryptography.Pkcs\src\System\Security\Cryptography\Pkcs\CmsSigner.cs:line 116
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 29.04.2021(UTC) Сообщений: 7
|
Автор: DarkShark  Добрый день, Проблема с TLS :( при реализации через HttpClient Код:
var clientHandler = new HttpClientHandler();
clientHandler.ClientCertificates.Add(x509Certificate2);
var client = new HttpClient(clientHandler);
var response = client.PostAsync(url, content).Result;
ошибка Цитата: ---> System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception. ---> System.ComponentModel.Win32Exception (0x80090308): The token supplied to the function is invalid at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw(Exception source) at System.Net.Security.SecureChannel.CreateFatalHandshakeAlertToken(SslPolicyErrors sslPolicyErrors, X509Chain chain) at System.Net.Security.SecureChannel.VerifyRemoteCertificate(RemoteCertValidationCallback remoteCertValidationCallback, ProtocolToken& alertToken) at System.Net.Security.SslStream.CompleteHandshake(ProtocolToken& alertToken) ...
Падала такая же ошибка при тестировании на тестовой ЕСИА, WebRequest не помог, в итоге через Rider дебажил внутрянку проверки SSL в .NET, нашел ошибку, не хватало одного корневого сертификата. У одного из сертификатов с тестовой ЕСИА был статус "A certificate chain processed, but terminated in a root certificate which is not trusted by the trust provider." CN сертификата был "Тестовый УЦ РТК". Искал этот сертификат у себя, не нашел, пошел в хром на тестовую ЕСИА, тоже таких нет. Решил зайти через IE и о чудо, выдал мне ошибку, что мол сайт небезопасный, посмотрел сертификаты, там он и был. Оставалось скачать и установить в папку "Trusted Root Certification Authorities" с сертификатами. Инструкции по скачиванию сертификатов из IE все старые, так сейчас не работает. Нашел ответ, что можно скачать через EDGE (pre-chromium). Сидел с этим вопросом несколько дней, может кому-то поможет мой ответ. Если бы не Rider, кто знает сколько бы еще времени ушло. Есть еще один способ, создавать HttpClientHandler, у него есть свойство HttpClientHandler.ServerCertificateCustomValidationCallback, инициализируем его каким-нибудь Func, реализуем свою логику, где надо возвращаем true, далее создаем HttpClient и передаем ему в конструктор этот handler, но для прода это небезопасно, поэтому лучше не использовать. Отредактировано пользователем 6 мая 2021 г. 1:20:30(UTC)
| Причина: Не указана
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 16.09.2020(UTC) Сообщений: 12  Сказал(а) «Спасибо»: 3 раз
|
Автор: Артём Макаров  Да, шифрование пока только симметричное для 28147-89 через соответствующий класс. Асимметричное в ближайших планах. Добрый день, не появилось ли асимметричное шифрование ?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 20.02.2017(UTC) Сообщений: 158
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 41 раз в 41 постах
|
В последнем доступном релизе уже есть. |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close