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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Artik2  
#1 Оставлено : 7 октября 2024 г. 16:48:32(UTC)
Artik2

Статус: Новичок

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

Сказал(а) «Спасибо»: 5 раз
Приветствую.
Создал Blazor приложение в Visual Studio 2022, сдобрив Program.cs следующим кодом:

Код:
      builder.Services.Configure<KestrelServerOptions>(options =>
      {
          options.ConfigureHttpsDefaults(options =>
              options.ClientCertificateMode = ClientCertificateMode.RequireCertificate);
      });

      builder.Services.AddAuthentication(CertificateAuthenticationDefaults.AuthenticationScheme).AddCertificate();


      var connectionString = builder.Configuration.GetConnectionString("DefaultConnection") ?? throw new InvalidOperationException("Connection string 'DefaultConnection' not found.");
      builder.Services.AddDbContext<ApplicationDbContext>(options =>
          options.UseSqlServer(connectionString));
      builder.Services.AddDatabaseDeveloperPageExceptionFilter();

      builder.Services.AddIdentityCore<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true)
          .AddEntityFrameworkStores<ApplicationDbContext>()
          .AddSignInManager()
          .AddDefaultTokenProviders();

      builder.Services.AddSingleton<IEmailSender<ApplicationUser>, IdentityNoOpEmailSender>();

      var app = builder.Build();

      app.UseAuthentication();


Далее, скачал все четыре *.nupkg файла с https://github.com/CryptoPro/libcore/releases, после чего создал новый Package Source в Nuget Package Manager. Проинсталлировал для проекта в Nuget Package Manager все четыре пакета:
CryptoPro.Net.Security
CryptoPro.Security.Cryptography
CryptoPro.Security.Cryptography.Pkcs
CryptoPro.Security.Cryptography.Xml

В итоге при запуске Blazor проекта страница проекта в браузере запрашивает выбор сертификата, с коим аутентифицироваться желаю.
С не-ГОСТовыми сертификатами, понятное дело, прекрасно работает, но для ГОСТ сертификатов выдаёт ошибку

Доступ к localhost запрещен
Возникла проблема с вашим сертификатом для входа.
Обратитесь за помощью к системному администратору.
ERR_SSL_CLIENT_AUTH_CERT_BAD_FORMAT

Она, как бы, и до установки пакетов CryptoPro.* выдавалась для ГОСТовых сертификатов, но надеялся, что при установке CryptoPro.* произойдёт мэйджик и всё заработает, но нет, не решила.

Как заставить C# аутентифицировать пользователей по ГОСТ ключам?

Отредактировано пользователем 7 октября 2024 г. 17:45:39(UTC)  | Причина: Не указана

Offline Артём Макаров  
#2 Оставлено : 8 октября 2024 г. 9:48:05(UTC)
Артём Макаров

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 63 раз в 59 постах
Добрый день.

К сожалению "магия" закончилась на версии "LibCore 2024.1.10.1", которая поддерживает только 6.0, и не совместимая с новым api. Все версии после неё, пока что, без каких исправлений рантайма, которые позволяют заводить что то простой установкой и инициализацией пакетов.


Что касается проблемы - самый простой вариант (который используем мы) - использовать обратную прокси (cpnginx, поставляется в комплеткте csp, который понимает ГОСТовые сертификаты) для проброски нам сертификата клиента в хэдере.

Сервис и nginx настраивается для работы с хэдером (X-SSL-CERT или ssl-client-cert): https://learn.microsoft....on-in-custom-web-proxies

В коде можно оставить родной X509Certificfate2, создать объект получиться, даже сможет вернуть отпечаток сертификата и CN.

Если же вы захотите явно воспользоваться открытым ключом или oid'ами сертификата, то лучше преобразовать его в CpX509Certificate2, воспользовавшись конструктором, принимающим массив байт.


Более сложный путь - написать свой middleware для получения и работы с сертификатом (https://github.com/dotnet/aspnetcore/blob/f87cf09508707540491cffa66a8321e37e162766/src/Security/Authentication/Certificate/src/CertificateAuthenticationHandler.cs, https://github.com/dotne...TlsConnectionFeature.cs, и всё что между ними и работает с ними, используя везде CpX509Certificate2).


Также в любом случае вам потребуется лицензия на серверный TLS для csp (СКЗИ "КриптоПро CSP" версии 5.0 для одного TLS-сервера).
Техническую поддержку оказываем тут
Наша база знаний
thanks 2 пользователей поблагодарили Артём Макаров за этот пост.
Андрей * оставлено 08.10.2024(UTC), Artik2 оставлено 08.10.2024(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.