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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline MegaVasiliy  
#1 Оставлено : 13 сентября 2022 г. 12:21:47(UTC)
MegaVasiliy

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

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

Сказал(а) «Спасибо»: 2 раз
Необходимо получить веб-страницу. КриптоПРО установлен версии 4.0.9944 на Windows (но в идеале и на Линуксе тоже).
В netFramework 4.7.2 всё РАБОТАЕТ , код такой:
Код:
var handler = new HttpClientHandler { SslProtocols = System.Security.Authentication.SslProtocols.Tls12 };
handler.ClientCertificates.Add(new X509Certificate2(File.ReadAllBytes("D:\\SomeCerts\cert.cer")));
var response = await new HttpClient(handler).GetAsync("https//somesite.ggg");
//РАБОТАЕТ - появляется окошко КриптоПРО с просьбой ввести пароль на сертификат и потом возвращается страница и статус ОК!


ТОЧНО такой же код, но в NetCore 3.1 - возвращает код 403 и никакого окна на ввод пароля на сертификат не вылезает.

Подскажите как можно это исправить. Спаситбо
Offline Артём Макаров  
#2 Оставлено : 13 сентября 2022 г. 13:37:42(UTC)
Артём Макаров

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

Группы: Участники
Зарегистрирован: 20.02.2017(UTC)
Сообщений: 217

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 63 раз в 59 постах
Автор: MegaVasiliy Перейти к цитате
Необходимо получить веб-страницу. КриптоПРО установлен версии 4.0.9944 на Windows (но в идеале и на Линуксе тоже).
В netFramework 4.7.2 всё РАБОТАЕТ , код такой:
Код:
var handler = new HttpClientHandler { SslProtocols = System.Security.Authentication.SslProtocols.Tls12 };
handler.ClientCertificates.Add(new X509Certificate2(File.ReadAllBytes("D:\\SomeCerts\cert.cer")));
var response = await new HttpClient(handler).GetAsync("https//somesite.ggg");
//РАБОТАЕТ - появляется окошко КриптоПРО с просьбой ввести пароль на сертификат и потом возвращается страница и статус ОК!


ТОЧНО такой же код, но в NetCore 3.1 - возвращает код 403 и никакого окна на ввод пароля на сертификат не вылезает.

Подскажите как можно это исправить. Спаситбо


Не уверен, что сценарий с окошком будет работать в core, попробуем проверить в ближайшее время.

Для текущего решения - попробуйте указывать pfx + пароль на pfx (при загрузке можно указать флаг CspNoPersistKeySet для использования сертификата без установки). Если сертификат уже установлен в хранилище - использовать загрузку сертификата через x509Store с последующим использованием.
Техническую поддержку оказываем тут
Наша база знаний
Offline MegaVasiliy  
#3 Оставлено : 13 сентября 2022 г. 14:43:24(UTC)
MegaVasiliy

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

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

Сказал(а) «Спасибо»: 2 раз
Автор: Артём Макаров Перейти к цитате


Не уверен, что сценарий с окошком будет работать в core, попробуем проверить в ближайшее время.

Для текущего решения - попробуйте указывать pfx + пароль на pfx (при загрузке можно указать флаг CspNoPersistKeySet для использования сертификата без установки). Если сертификат уже установлен в хранилище - использовать загрузку сертификата через x509Store с последующим использованием.


Да окошко не так важно - после того как я указал там галочку "Запомнить пароль" оно появляться перестало (кстати вопрос - а как его вернуть, ну т.е. сбросить запомненный пароль?). Попробовал добавить пароль на сертификат в код создания сертификата:
Код:
var psw = new NetworkCredential("", "mySecretPassword").SecurePassword;
handler.ClientCertificates.Add(new X509Certificate2(File.ReadAllBytes("D:\\SomeCerts\cert.cer")), pws);


НЕ СРАБОТАЛО!
Что касается флага CspNoPersistKeySet - то в перечислении X509KeyStorageFlags его НЕТ ((
Погуглил данный флаг - меня привело на ваш же сайт с проектом DotnetCoreSampleProject. Посмотрел проект - но в нём мой случай не описан, и там почему-то в данном перечислении есть этот флаг и он устанавливается. А в Net Core 3.1 у меня его нет. Если подскажете численное значение данного флага то можно попробовать его скастить и передать.

Попробовал установить сертификат в хранилище, в раздел Личное, и получить его оттуда программно. РАБОТАЕТ, но мне НЕ подходит, т.к. сертификат нужно получать из массива байт.

Offline Артём Макаров  
#4 Оставлено : 14 сентября 2022 г. 9:11:56(UTC)
Артём Макаров

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

Группы: Участники
Зарегистрирован: 20.02.2017(UTC)
Сообщений: 217

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 63 раз в 59 постах
Автор: MegaVasiliy Перейти к цитате
Автор: Артём Макаров Перейти к цитате


Не уверен, что сценарий с окошком будет работать в core, попробуем проверить в ближайшее время.

Для текущего решения - попробуйте указывать pfx + пароль на pfx (при загрузке можно указать флаг CspNoPersistKeySet для использования сертификата без установки). Если сертификат уже установлен в хранилище - использовать загрузку сертификата через x509Store с последующим использованием.


Да окошко не так важно - после того как я указал там галочку "Запомнить пароль" оно появляться перестало (кстати вопрос - а как его вернуть, ну т.е. сбросить запомненный пароль?). Попробовал добавить пароль на сертификат в код создания сертификата:
Код:
var psw = new NetworkCredential("", "mySecretPassword").SecurePassword;
handler.ClientCertificates.Add(new X509Certificate2(File.ReadAllBytes("D:\\SomeCerts\cert.cer")), pws);


НЕ СРАБОТАЛО!
Что касается флага CspNoPersistKeySet - то в перечислении X509KeyStorageFlags его НЕТ ((
Погуглил данный флаг - меня привело на ваш же сайт с проектом DotnetCoreSampleProject. Посмотрел проект - но в нём мой случай не описан, и там почему-то в данном перечислении есть этот флаг и он устанавливается. А в Net Core 3.1 у меня его нет. Если подскажете численное значение данного флага то можно попробовать его скастить и передать.

Попробовал установить сертификат в хранилище, в раздел Личное, и получить его оттуда программно. РАБОТАЕТ, но мне НЕ подходит, т.к. сертификат нужно получать из массива байт.



КриптоПро.NET может быть использован для версии .NET Framework до 4.8 включительно. Если вам нужно использование net core 3.1 - необходимо использовать инструкции из DotnetCoreSampleProject, при этом КриптоПро.NET не нужен, только КриптоПро CSP 5 версии.

Если вы хотите загружать сертификат с ключом из файла - сертификат должен быть в формате pfx, формат cer не содержит закрытый ключ. При загрузке сертификата из файла с ключом нужно указать именно пароль на файл pfx (может не совпадать с паролем на контейнер).

Если контейнер ключа уже установлен на машину - вы можете установить сертификат cer в хранилище, привязать установленный контейнер ключа, и далее использовать данный сертификат в коде через x509Store.

Операции по работе с контейнерами можно выполнить в КриптоПро CSP, вкладка сервис.

Альтернативно - установить pfx файл сертификата в хранилище, тогда контейнер будет создан при установке сертификата.
Техническую поддержку оказываем тут
Наша база знаний
Offline MegaVasiliy  
#5 Оставлено : 14 сентября 2022 г. 10:36:18(UTC)
MegaVasiliy

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

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

Сказал(а) «Спасибо»: 2 раз
Автор: Артём Макаров Перейти к цитате

КриптоПро.NET может быть использован для версии .NET Framework до 4.8 включительно. Если вам нужно использование net core 3.1 - необходимо использовать инструкции из DotnetCoreSampleProject, при этом КриптоПро.NET не нужен, только КриптоПро CSP 5 версии.

Если вы хотите загружать сертификат с ключом из файла - сертификат должен быть в формате pfx, формат cer не содержит закрытый ключ. При загрузке сертификата из файла с ключом нужно указать именно пароль на файл pfx (может не совпадать с паролем на контейнер).

Если контейнер ключа уже установлен на машину - вы можете установить сертификат cer в хранилище, привязать установленный контейнер ключа, и далее использовать данный сертификат в коде через x509Store.

Операции по работе с контейнерами можно выполнить в КриптоПро CSP, вкладка сервис.

Альтернативно - установить pfx файл сертификата в хранилище, тогда контейнер будет создан при установке сертификата.


Спасибо, я теперь немного разобрался с тем что такое контейнеры и pfx. В таком случае вопрос переходит в следующий:
Если я буду использовать файл сертификата pfx (содержащий закрытый ключ), НО НЕ установленный в хранилище сертификатов, как мне сделать так (в Net Core 3.1) чтобы при использовании сертификата НЕ создавался контейнер и ключ нигде не сохранялся? Сейчас мне выводит окно с надписью "Создание нового контейнера "guid", введите пароль для него" - потом ещё два раза появляется окно с просьбой ввести пароль на этот новый контейнер, но в целом все работает.

И ещё вопрос: А что нужно установить на Linux чтобы там тоже работало ? Есть какие-то возможности?
Спасибо!


Offline Артём Макаров  
#6 Оставлено : 14 сентября 2022 г. 10:43:43(UTC)
Артём Макаров

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

Группы: Участники
Зарегистрирован: 20.02.2017(UTC)
Сообщений: 217

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 63 раз в 59 постах
Автор: MegaVasiliy Перейти к цитате
Автор: Артём Макаров Перейти к цитате

КриптоПро.NET может быть использован для версии .NET Framework до 4.8 включительно. Если вам нужно использование net core 3.1 - необходимо использовать инструкции из DotnetCoreSampleProject, при этом КриптоПро.NET не нужен, только КриптоПро CSP 5 версии.

Если вы хотите загружать сертификат с ключом из файла - сертификат должен быть в формате pfx, формат cer не содержит закрытый ключ. При загрузке сертификата из файла с ключом нужно указать именно пароль на файл pfx (может не совпадать с паролем на контейнер).

Если контейнер ключа уже установлен на машину - вы можете установить сертификат cer в хранилище, привязать установленный контейнер ключа, и далее использовать данный сертификат в коде через x509Store.

Операции по работе с контейнерами можно выполнить в КриптоПро CSP, вкладка сервис.

Альтернативно - установить pfx файл сертификата в хранилище, тогда контейнер будет создан при установке сертификата.


Спасибо, я теперь немного разобрался с тем что такое контейнеры и pfx. В таком случае вопрос переходит в следующий:
Если я буду использовать файл сертификата pfx (содержащий закрытый ключ), НО НЕ установленный в хранилище сертификатов, как мне сделать так (в Net Core 3.1) чтобы при использовании сертификата НЕ создавался контейнер и ключ нигде не сохранялся? Сейчас мне выводит окно с надписью "Создание нового контейнера "guid", введите пароль для него" - потом ещё два раза появляется окно с просьбой ввести пароль на этот новый контейнер, но в целом все работает.

И ещё вопрос: А что нужно установить на Linux чтобы там тоже работало ? Есть какие-то возможности?
Спасибо!




Загрузка сертификата с ключом из pfx, без установки контейнера на машину и без установки сертификата возможно как раз в указанием флага X509KeyStorageFlags.CspNoPersistKeySet, как указано в проекте DotnetCoreSampleProject.

Код:
// Gost2012_256Pfx - byte[]; "1" - пароль на pfx, если отсутствует - передать пустую строку
using (var gostCert = new X509Certificate2(Gost2012_256Pfx, "1", X509KeyStorageFlags.CspNoPersistKeySet))
{
    // использование сертификата
}


В изначальном core 3.1 данного флага нет, его мы добавляли сами. Без использования нашего форка 3.1 согласно инструкции - вы его не увидите.

В этом же проекте
https://github.com/Crypt.../DotnetCoreSampleProject

Есть инструкция для сборки под Windows и Linux.
Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.