Статус: Участник
Группы: Участники
Зарегистрирован: 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 и никакого окна на ввод пароля на сертификат не вылезает. Подскажите как можно это исправить. Спаситбо
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 20.02.2017(UTC) Сообщений: 216
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 62 раз в 58 постах
|
Автор: 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 с последующим использованием. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 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 у меня его нет. Если подскажете численное значение данного флага то можно попробовать его скастить и передать. Попробовал установить сертификат в хранилище, в раздел Личное, и получить его оттуда программно. РАБОТАЕТ, но мне НЕ подходит, т.к. сертификат нужно получать из массива байт.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 20.02.2017(UTC) Сообщений: 216
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 62 раз в 58 постах
|
Автор: 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 файл сертификата в хранилище, тогда контейнер будет создан при установке сертификата. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 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 чтобы там тоже работало ? Есть какие-то возможности? Спасибо!
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 20.02.2017(UTC) Сообщений: 216
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 62 раз в 58 постах
|
Автор: 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. |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close