Статус: Участник
Группы: Участники
Зарегистрирован: 11.04.2017(UTC) Сообщений: 25
Сказал(а) «Спасибо»: 1 раз
|
Добрый день!
В моем коде есть работа с запросами на сертификат. Причем в двух вариантах. В первом случае происходит работа в лице оператора с подготовленным ранее в другом коде pkcs10 с последующим добавлением к нему доп. NameValue пары с последующим подписыванием собственным ключом оператора УЦ. Этот вариант работает с CoreFx без проблем. Во втором варианте необходимо создать ключевой контейнер, создать собственный pkcs10 на базе открытого ключа из созданной ключевой пары. В старом приложении под .NET Framework мы использовали COM-библиотеку и все было хорошо. Как быть без ее использования? Только не отсылайте к pInvoke. Звать нативные функции CAPI не хочется, ибо незря Microsoft в своих классах натолкал SafeHandle'ов и прочих прелестей. А без детального понимания их работы много сюрпризов потом м.б. И еще момент. Экспериментируя с разными кусками разного кода ;о), появился вариант собрать pkcs10 некоторым способом. Но есть одно но. Требуется инстанциировать объект типа PublicKey из пространства имен System.Security.Cryptography.X509Certificates. Конструктору на вход надо подать в качестве одного из параметров закодированный объект типа SubjectPublicKeyInfo. Но метод ExportSubjectPublicKeyInfo объекта типа Gost3410_2012_256CryptoServiceProvider выдает ошибку: "Method not supported. Derrived class must override." Стало быть метод в классе не реализован. Как быть?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 20.02.2017(UTC) Сообщений: 216
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 62 раз в 58 постах
|
Автор: Андрей Врагов Добрый день!
В моем коде есть работа с запросами на сертификат. Причем в двух вариантах. В первом случае происходит работа в лице оператора с подготовленным ранее в другом коде pkcs10 с последующим добавлением к нему доп. NameValue пары с последующим подписыванием собственным ключом оператора УЦ. Этот вариант работает с CoreFx без проблем. Во втором варианте необходимо создать ключевой контейнер, создать собственный pkcs10 на базе открытого ключа из созданной ключевой пары. В старом приложении под .NET Framework мы использовали COM-библиотеку и все было хорошо. Как быть без ее использования? Только не отсылайте к pInvoke. Звать нативные функции CAPI не хочется, ибо незря Microsoft в своих классах натолкал SafeHandle'ов и прочих прелестей. А без детального понимания их работы много сюрпризов потом м.б. И еще момент. Экспериментируя с разными кусками разного кода ;о), появился вариант собрать pkcs10 некоторым способом. Но есть одно но. Требуется инстанциировать объект типа PublicKey из пространства имен System.Security.Cryptography.X509Certificates. Конструктору на вход надо подать в качестве одного из параметров закодированный объект типа SubjectPublicKeyInfo. Но метод ExportSubjectPublicKeyInfo объекта типа Gost3410_2012_256CryptoServiceProvider выдает ошибку: "Method not supported. Derrived class must override." Стало быть метод в классе не реализован. Как быть? Добрый день. А классы CertificateRequest не пробовали смотреть? Не подходят для данного сценария? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 11.04.2017(UTC) Сообщений: 25
Сказал(а) «Спасибо»: 1 раз
|
Автор: Артём Макаров Добрый день. А классы CertificateRequest не пробовали смотреть? Не подходят для данного сценария?
Пробовал. Но увы. Может подскажите, как и какой конструктор позвать и что передать из того, чем я располагаю после генерации ключей и создания контейнера? В принципе, у меня есть замечательный класс Pkcs10CertificateRequestEncoder. Но ему необходимо проинициализировать свойство типа PublicKey. Отредактировано пользователем 22 августа 2022 г. 16:45:24(UTC)
| Причина: Не указана
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 22.08.2022(UTC) Сообщений: 3 Откуда: Самара Сказал(а) «Спасибо»: 2 раз
|
Здравствуйте! На платформе .NET Framework с КриптоПро .NET у нас применяются библиотеки Interop.CAdESCOM и Interop.CAPICOM. В частности, применяются методы CadesSignedData.EnhanceCades и CadesSignedData.SignCades. Какие аналоги этих методов есть при использовании КриптоПро .NET Core на Linux?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 20.02.2017(UTC) Сообщений: 216
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 62 раз в 58 постах
|
Автор: Андрей Врагов Автор: Артём Макаров Добрый день. А классы CertificateRequest не пробовали смотреть? Не подходят для данного сценария?
Пробовал. Но увы. Может подскажите, как и какой конструктор позвать и что передать из того, чем я располагаю после генерации ключей и создания контейнера? В принципе, у меня есть замечательный класс Pkcs10CertificateRequestEncoder. Но ему необходимо проинициализировать свойство типа PublicKey. Если я правильно понял вводные и задачу - то можно сделать как то так Код: static void F()
{
// открываем контейнер ключа заданного типа по имени
var provider =
new Gost3410_2012_256CryptoServiceProvider(
new CspParameters(
80,
"",
"\\\\.\\HDIMAGE\\G2012256"));
using (provider)
{
// создаём нужный запрос через класс
var certificateRequest = new CertificateRequest(
"cn=test",
(Gost3410_2012_256)provider,
HashAlgorithmName.Gost3411_2012_256);
certificateRequest.CertificateExtensions.Add(
new X509KeyUsageExtension(
X509KeyUsageFlags.DigitalSignature
| X509KeyUsageFlags.NonRepudiation
| X509KeyUsageFlags.KeyEncipherment,
false));
var oidCollection = new OidCollection();
// Проверка подлинности клиента (1.3.6.1.5.5.7.3.2)
oidCollection.Add(new Oid("1.3.6.1.5.5.7.3.2"));
certificateRequest.CertificateExtensions.Add(
new X509EnhancedKeyUsageExtension(
oidCollection,
true));
certificateRequest.CertificateExtensions.Add(
new X509SubjectKeyIdentifierExtension(certificateRequest.PublicKey, false));
// Pkcs запрос
var reqest = certificateRequest.CreateSigningRequest();
// Открытый ключ
var publicKey = certificateRequest.PublicKey;
}
}
Отредактировано пользователем 23 августа 2022 г. 9:20:08(UTC)
| Причина: Не указана |
|
1 пользователь поблагодарил Артём Макаров за этот пост.
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 20.02.2017(UTC) Сообщений: 216
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 62 раз в 58 постах
|
Автор: Павел-ИС Здравствуйте! На платформе .NET Framework с КриптоПро .NET у нас применяются библиотеки Interop.CAdESCOM и Interop.CAPICOM. В частности, применяются методы CadesSignedData.EnhanceCades и CadesSignedData.SignCades. Какие аналоги этих методов есть при использовании КриптоПро .NET Core на Linux? Добрый день. CAdESCOM не входит в состав КриптоПро.Net. На linux в настоящий момент возможно использование Cades только через P\Invoke csp, managed оболочек нет. |
|
1 пользователь поблагодарил Артём Макаров за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 11.04.2017(UTC) Сообщений: 25
Сказал(а) «Спасибо»: 1 раз
|
Автор: Артём Макаров Если я правильно понял вводные и задачу - то можно сделать как то так
Да, Артем, это соответствует ожиданиям. Кстати, я уже сам соорудил нечто подобное используя ваш код из DSS. :о) В любом случае это полезная информация. Спасибо большое.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 11.04.2017(UTC) Сообщений: 25
Сказал(а) «Спасибо»: 1 раз
|
Артем, а как можно добавить шаблон серта (oid=1.3.6.1.4.1.311.20.2) в сам pkcs10 на базе вашего примера? Или стандартно у Microsoft нет такого класса для такого расширения? В pkcs7 я умею добавлять в виде SignedAttribute, но мне также необходимо уметь добавлять и в pkcs10. Ктстати, насколько я понимаю, если подавать запрос на ЦР УЦ через ИВП, то его надо подавать именно в pkcs7, дважды подписав соответствующей подписью субъекта имеющего права на олобрение запроса в ЦР. Это так?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 20.02.2017(UTC) Сообщений: 216
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 62 раз в 58 постах
|
Автор: Андрей Врагов Артем, а как можно добавить шаблон серта (oid=1.3.6.1.4.1.311.20.2) в сам pkcs10 на базе вашего примера? Или стандартно у Microsoft нет такого класса для такого расширения? В pkcs7 я умею добавлять в виде SignedAttribute, но мне также необходимо уметь добавлять и в pkcs10. Ктстати, насколько я понимаю, если подавать запрос на ЦР УЦ через ИВП, то его надо подавать именно в pkcs7, дважды подписав соответствующей подписью субъекта имеющего права на олобрение запроса в ЦР. Это так? Класс CertificateRequest никак не расширялся, кроме поддержки гостов. Посмотрите в сторону создания своего X509Extension через конструктор, который затем передадите в certificateRequest.CertificateExtensions.Add. Возможно заведётся. По уц\цр ничего подсказать, увы, не могу. |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 01.03.2018(UTC) Сообщений: 8
|
Подскажите пожалуйста, при публикации проекта под линукс выдает ошибку: обнаружено несколько выходных файлов публикации с одним и тем же относительным путем: C:\Users\Sergey\.nuget\packages\runtime.linux-x64.microsoft.private.corefx.netcoreapp\4.7.0-dev.21370.1\runtimes\linux-x64\lib\netcoreapp3.1\System.Security.Cryptography.Cng.dll, E:\Users\Старый рабочий стол\ЭТОС\projects\DotnetCoreSampleProject-master\DotnetCoreSampleProject\runtime-release-linux\System.Security.Cryptography.Cng.dll. Под Windows нормально собралось, а под линукс почему-то тянет файл dll из двух мест.
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close