Статус: Новичок
Группы: Участники
Зарегистрирован: 29.07.2020(UTC) Сообщений: 4 
|
Подскажите, как можно на стороне .net core проверить подпись в виде хэша, который создается плагином криптопро для браузеров? Заранее извиняюсь, если вдруг тот вопрос был уже. Не нашел что-то ответа. Или не понял его.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 20.02.2017(UTC) Сообщений: 160
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 41 раз в 41 постах
|
Автор: Gelious  Подскажите, как можно на стороне .net core проверить подпись в виде хэша, который создается плагином криптопро для браузеров? Заранее извиняюсь, если вдруг тот вопрос был уже. Не нашел что-то ответа. Или не понял его. Для начала вам нужно разобраться, какой именно тип подписи формируется через плагин. Если Cades - то способ проверки на Linux это использование PInvoke на cades в csp. Если cms или xml - можно проверить, используя наш форк. Примеры проверки cms и xml аналогичны соответствующим примерам из КриптоПро.Net sdk (Классы SignedCms или SignedXml). |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 21.05.2017(UTC) Сообщений: 13  Сказал(а) «Спасибо»: 6 раз Поблагодарили: 2 раз в 2 постах
|
Добрый день. Создал сертификат используя проект DotnetCoreSampleProject
Получился сертификат: Issuer : CN=Experimental Issuing Authority Subject : CN=Experimental Issuing Authority Serial : 0x2F85BDF0478522C5 SHA1 Hash : 790eac451d28445715b74f6aae058efc1ae8e3d3 SubjKeyID : a49e62e27489710efb1ac170c50fa5fb12883b00 Signature Algorithm : ГОСТ Р 34.10-2001 PublicKey Algorithm : ГОСТ Р 34.10-2012 256 бит (512 bits) Not valid before : 24/06/2020 09:20:22 UTC Not valid after : 08/08/2021 09:20:22 UTC PrivateKey Link : Yes Container : 2739bc65-1506-4da6-9388-993e76bd8408 Provider Name : Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider Provider Info : ProvType: 80, KeySpec: 1, Flags: 0x0
Подскажите, почему Signature Algorithm : ГОСТ Р 34.10-2001, не должен ли он быть ГОСТ Р 34.10-2012?
|
 1 пользователь поблагодарил thoth за этот пост.
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 11,319   Сказал «Спасибо»: 436 раз Поблагодарили: 1746 раз в 1341 постах
|
Автор: thoth  Добрый день. Создал сертификат используя проект DotnetCoreSampleProject
Получился сертификат: Issuer : CN=Experimental Issuing Authority Subject : CN=Experimental Issuing Authority Serial : 0x2F85BDF0478522C5 SHA1 Hash : 790eac451d28445715b74f6aae058efc1ae8e3d3 SubjKeyID : a49e62e27489710efb1ac170c50fa5fb12883b00 Signature Algorithm : ГОСТ Р 34.10-2001 PublicKey Algorithm : ГОСТ Р 34.10-2012 256 бит (512 bits) Not valid before : 24/06/2020 09:20:22 UTC Not valid after : 08/08/2021 09:20:22 UTC PrivateKey Link : Yes Container : 2739bc65-1506-4da6-9388-993e76bd8408 Provider Name : Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider Provider Info : ProvType: 80, KeySpec: 1, Flags: 0x0
Подскажите, почему Signature Algorithm : ГОСТ Р 34.10-2001, не должен ли он быть ГОСТ Р 34.10-2012? Должен, как создавали сертификат? Обращались к тестовому УЦ с ГОСТ 2001? |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 11,319   Сказал «Спасибо»: 436 раз Поблагодарили: 1746 раз в 1341 постах
|
Автор: thoth  Добрый день. Создал сертификат используя проект DotnetCoreSampleProject
Получился сертификат: Issuer : CN=Experimental Issuing Authority Subject : CN=Experimental Issuing Authority Serial : 0x2F85BDF0478522C5 SHA1 Hash : 790eac451d28445715b74f6aae058efc1ae8e3d3 SubjKeyID : a49e62e27489710efb1ac170c50fa5fb12883b00 Signature Algorithm : ГОСТ Р 34.10-2001 PublicKey Algorithm : ГОСТ Р 34.10-2012 256 бит (512 bits) Not valid before : 24/06/2020 09:20:22 UTC Not valid after : 08/08/2021 09:20:22 UTC PrivateKey Link : Yes Container : 2739bc65-1506-4da6-9388-993e76bd8408 Provider Name : Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider Provider Info : ProvType: 80, KeySpec: 1, Flags: 0x0
Подскажите, почему Signature Algorithm : ГОСТ Р 34.10-2001, не должен ли он быть ГОСТ Р 34.10-2012? Signature Algorithm : ГОСТ Р 34.10-2001 = это алгоритм подписи УЦ, а не вашего сертификата, в вашем используется 2012. Используйте УЦ с ГОСТ 2012. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 21.05.2017(UTC) Сообщений: 13  Сказал(а) «Спасибо»: 6 раз Поблагодарили: 2 раз в 2 постах
|
Автор: Андрей *  Автор: thoth  Добрый день. Создал сертификат используя проект DotnetCoreSampleProject
Получился сертификат: Issuer : CN=Experimental Issuing Authority Subject : CN=Experimental Issuing Authority Serial : 0x2F85BDF0478522C5 SHA1 Hash : 790eac451d28445715b74f6aae058efc1ae8e3d3 SubjKeyID : a49e62e27489710efb1ac170c50fa5fb12883b00 Signature Algorithm : ГОСТ Р 34.10-2001 PublicKey Algorithm : ГОСТ Р 34.10-2012 256 бит (512 bits) Not valid before : 24/06/2020 09:20:22 UTC Not valid after : 08/08/2021 09:20:22 UTC PrivateKey Link : Yes Container : 2739bc65-1506-4da6-9388-993e76bd8408 Provider Name : Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider Provider Info : ProvType: 80, KeySpec: 1, Flags: 0x0
Подскажите, почему Signature Algorithm : ГОСТ Р 34.10-2001, не должен ли он быть ГОСТ Р 34.10-2012? Должен, как создавали сертификат? Обращались к тестовому УЦ с ГОСТ 2001? Я использовал метод из примера: /// <summary> /// Создать сертификат ГОСТ 34.10.2012 256 /// </summary> private static void MakeMeCert() { using (var parent = new Gost3410_2012_256CryptoServiceProvider()) { var parentReq = new CertificateRequest( "CN=Experimental Issuing Authority", parent, HashAlgorithmName.Gost3411_2012_256); parentReq.CertificateExtensions.Add( new X509BasicConstraintsExtension(true, false, 0, true)); parentReq.CertificateExtensions.Add( new X509SubjectKeyIdentifierExtension(parentReq.PublicKey, false)); using (var parentCert = parentReq.CreateSelfSigned( DateTimeOffset.UtcNow.AddDays(-45), DateTimeOffset.UtcNow.AddDays(365))) { byte[] certData = parentCert.Export(X509ContentType.Pfx, "1"); File.WriteAllBytes(@"MyCert.pfx", certData); } } }
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 20.02.2017(UTC) Сообщений: 160
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 41 раз в 41 постах
|
Автор: thoth  Автор: Андрей *  Автор: thoth  Добрый день. Создал сертификат используя проект DotnetCoreSampleProject
Получился сертификат: Issuer : CN=Experimental Issuing Authority Subject : CN=Experimental Issuing Authority Serial : 0x2F85BDF0478522C5 SHA1 Hash : 790eac451d28445715b74f6aae058efc1ae8e3d3 SubjKeyID : a49e62e27489710efb1ac170c50fa5fb12883b00 Signature Algorithm : ГОСТ Р 34.10-2001 PublicKey Algorithm : ГОСТ Р 34.10-2012 256 бит (512 bits) Not valid before : 24/06/2020 09:20:22 UTC Not valid after : 08/08/2021 09:20:22 UTC PrivateKey Link : Yes Container : 2739bc65-1506-4da6-9388-993e76bd8408 Provider Name : Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider Provider Info : ProvType: 80, KeySpec: 1, Flags: 0x0
Подскажите, почему Signature Algorithm : ГОСТ Р 34.10-2001, не должен ли он быть ГОСТ Р 34.10-2012? Должен, как создавали сертификат? Обращались к тестовому УЦ с ГОСТ 2001? Я использовал метод из примера: /// <summary> /// Создать сертификат ГОСТ 34.10.2012 256 /// </summary> private static void MakeMeCert() { using (var parent = new Gost3410_2012_256CryptoServiceProvider()) { var parentReq = new CertificateRequest( "CN=Experimental Issuing Authority", parent, HashAlgorithmName.Gost3411_2012_256); parentReq.CertificateExtensions.Add( new X509BasicConstraintsExtension(true, false, 0, true)); parentReq.CertificateExtensions.Add( new X509SubjectKeyIdentifierExtension(parentReq.PublicKey, false)); using (var parentCert = parentReq.CreateSelfSigned( DateTimeOffset.UtcNow.AddDays(-45), DateTimeOffset.UtcNow.AddDays(365))) { byte[] certData = parentCert.Export(X509ContentType.Pfx, "1"); File.WriteAllBytes(@"MyCert.pfx", certData); } } } День добрый. Была ошибка - неправильно проставлялся OID для сертификата. Сейчас исправили. Можно пробовать ночную сборку. https://ci.appveyor.com/...o/corefx/builds/34567607(visual studio (windows) / ubuntu) -> (artifacts) |
|
 1 пользователь поблагодарил Артём Макаров за этот пост.
|
thoth оставлено 11.08.2020(UTC)
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 21.05.2017(UTC) Сообщений: 13  Сказал(а) «Спасибо»: 6 раз Поблагодарили: 2 раз в 2 постах
|
Автор: Артём Макаров  Вы изменили на Oids.Gost3410_2012_256 и Oids.Gost3410_2012_512, которые в свою очередь соответствуют константам: public const string Gost3410_2012_256 = GostConstants.OID_CP_GOST_R3410_12_256; public const string Gost3410_2012_512 = GostConstants.OID_CP_GOST_R3410_12_512; Константы соответствуют: /// <summary> /// OID алгоритма открытого ключа/цифровой подписи ГОСТ Р 34.10-2012 256 /// </summary> internal const string OID_CP_GOST_R3410_12_256 = "1.2.643.7.1.1.1.1"; /// <summary> /// OID алгоритма открытого ключа/цифровой подписи ГОСТ Р 34.10-2012 512 /// </summary> internal const string OID_CP_GOST_R3410_12_512 = "1.2.643.7.1.1.1.2"; Вопрос:Почему не вот эти oid-ы: /// <summary> /// OID алгоритма цифровой подписи ГОСТ Р 34.10-2012 256 (используется как SignatureAlgorithm в сертификате) /// </summary> internal const string OID_CP_GOST_R3411_12_256_R3410 = "1.2.643.7.1.1.3.2"; /// <summary> /// OID алгоритма цифровой подписи ГОСТ Р 34.10-2012 512 (используется как SignatureAlgorithm в сертификате) /// </summary> internal const string OID_CP_GOST_R3411_12_512_R3410 = "1.2.643.7.1.1.3.3";
|
 1 пользователь поблагодарил thoth за этот пост.
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 20.02.2017(UTC) Сообщений: 160
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 41 раз в 41 постах
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 29.07.2020(UTC) Сообщений: 4 
|
Автор: Артём Макаров  Автор: Gelious  Подскажите, как можно на стороне .net core проверить подпись в виде хэша, который создается плагином криптопро для браузеров? Заранее извиняюсь, если вдруг тот вопрос был уже. Не нашел что-то ответа. Или не понял его. Для начала вам нужно разобраться, какой именно тип подписи формируется через плагин. Если Cades - то способ проверки на Linux это использование PInvoke на cades в csp. Если cms или xml - можно проверить, используя наш форк. Примеры проверки cms и xml аналогичны соответствующим примерам из КриптоПро.Net sdk (Классы SignedCms или SignedXml). У нас на клиенте используется для подписи модели json плагин КриптоПро. И на сервере требуется расшифровать подпись, чтоб получить из нее данные. Не понятно, какую библиотеку для этого использовать и как. Ну или какой-нибудь сторонний апи. Насколько я понимаю, сформированная подпись в формате Pkcs7 Отредактировано пользователем 13 августа 2020 г. 10:07:50(UTC)
| Причина: Не указана
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 29.07.2020(UTC) Сообщений: 4 
|
Еще возник вот такой вопрос: а подключенные криптопро библиотеки System.Security.Cryptography.* и установленный для них крипто csp лезет на сервер криптопро при Decode подписи? Как получить подтверждение подписи от сервера криптопро?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 11,319   Сказал «Спасибо»: 436 раз Поблагодарили: 1746 раз в 1341 постах
|
Автор: Gelious  Еще возник вот такой вопрос: а подключенные криптопро библиотеки System.Security.Cryptography.* и установленный для них крипто csp лезет на сервер криптопро при Decode подписи? Как получить подтверждение подписи от сервера криптопро? csp никуда не лезет. что такое "подтверждение подписи от сервера криптопро"? штамп времени (tsp) или подтвердить статус сертификата (ocsp)? |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 29.07.2020(UTC) Сообщений: 4 
|
Автор: Андрей *  Автор: Gelious  Еще возник вот такой вопрос: а подключенные криптопро библиотеки System.Security.Cryptography.* и установленный для них крипто csp лезет на сервер криптопро при Decode подписи? Как получить подтверждение подписи от сервера криптопро? csp никуда не лезет. что такое "подтверждение подписи от сервера криптопро"? штамп времени (tsp) или подтвердить статус сертификата (ocsp)? Ну т.е. подтвердить, что это подлинная подпись (созданная через криптопро) пришла серверу от клиента. Для этого разве не требуется отправить ее в удостверяющий центр криптопро для подтверждения? Если это и есть ocsp, то как использовать на net core? И достаточно ли на сервере иметь ocsp client без oscp server (у криптопро же есть свой oscp сервер, куда можно обратиться через ocsp client?)? Отредактировано пользователем 18 августа 2020 г. 2:33:55(UTC)
| Причина: Не указана
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 01.09.2020(UTC) Сообщений: 1
|
Автор: Анатолий Беляев  Продукт планируется развивать и поддерживать и в будущем сертифицировать. Добрый день! Светлое сертифицированное будущее ещё не настало? Ищется сертифицированное решение под .NET Core. Спасибо. Отредактировано пользователем 1 сентября 2020 г. 11:40:01(UTC)
| Причина: Не указана
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 16.09.2020(UTC) Сообщений: 14  Сказал(а) «Спасибо»: 3 раз
|
Добрый день, В ваш пример DotnetSampleProject поставил генерацию подписи CMS из другого примера: Цитата:using (var gostCert = new X509Certificate2(Gost2012_256Pfx, "1", X509KeyStorageFlags.CspNoPersistKeySet)) { var contentInfo = new ContentInfo(bytesToHash); var signedCms = new SignedCms(contentInfo, true); CmsSigner cmsSigner = new CmsSigner(gostCert); signedCms.ComputeSignature(cmsSigner); Console.WriteLine($"CMS Sign: {Convert.ToBase64String(signedCms.Encode())}"); }
при вычислении подписи выдает: Цитата: Exception thrown: 'Internal.Cryptography.CryptoThrowHelper.WindowsCryptographicException' in System.Security.Cryptography.Pkcs.dll An unhandled exception of type 'Internal.Cryptography.CryptoThrowHelper.WindowsCryptographicException' occurred in System.Security.Cryptography.Pkcs.dll Bad UID
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 20.02.2017(UTC) Сообщений: 160
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 41 раз в 41 постах
|
Добрый день.
В cms пока не правили момент подгрузки сертификатов без окошек из файла (там по другому грузится закрытый ключ без использования сборки x509Certificates). Попробуем в будущем поддержать.
Пока для cms единственный вариант без окошек - как раньше устанавливать сертификат в хранилище(unix - /opt/cprocsp/bin/amd64/certmgr -install -pfx -file ./cert.pfx -store My -pin 1 ; windows - оснастка "сертификаты"), получать его в коде через x509Store и использовать в SignedCms. |
|
 1 пользователь поблагодарил Артём Макаров за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 16.09.2020(UTC) Сообщений: 14  Сказал(а) «Спасибо»: 3 раз
|
Добрый день, Спасибо за предыдущий ответ. Новая проблема при шифровании (сертификат пробовали и из хранилища и при подгрузке из файла): Цитата: var recipients = new CmsRecipientCollection(); var recipient = new CmsRecipient(encryptCert); recipients.Add(recipient); var contentInfo = new ContentInfo(bytesToHash); var encryptedCms = new EnvelopedCms(contentInfo); encryptedCms.Encrypt(recipients);
При шифровании выдает ошибку: Цитата: Exception thrown: 'Internal.Cryptography.CryptoThrowHelper.WindowsCryptographicException' in System.Security.Cryptography.Pkcs.dll An unhandled exception of type 'Internal.Cryptography.CryptoThrowHelper.WindowsCryptographicException' occurred in System.Security.Cryptography.Pkcs.dll ASN1 bad tag value met.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 20.02.2017(UTC) Сообщений: 160
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 41 раз в 41 постах
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 16.09.2020(UTC) Сообщений: 14  Сказал(а) «Спасибо»: 3 раз
|
Автор: Артём Макаров  Спасибо, попробуем. А просто шифрование тоже похоже не поддерживается ? Цитата: var cert = new X509Certificate2(appCert); var gostPublicKey = cert.GetGost3410_2012_256PublicKey(); var encryptedBytes = gostPublicKey.Encrypt(bytesToHash);
выдает: Цитата: Exception thrown: 'System.NotImplementedException' in System.Security.Cryptography.Algorithms.dll An unhandled exception of type 'System.NotImplementedException' occurred in System.Security.Cryptography.Algorithms.dll Method not supported. Derived class must override.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 20.02.2017(UTC) Сообщений: 160
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 41 раз в 41 постах
|
Да, шифрование пока только симметричное для 28147-89 через соответствующий класс. Асимметричное в ближайших планах. |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close