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

Уведомление

Icon
Error

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

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

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

Добрый день!

Есть веб-сервис и веб-приложение на .NET Core 6, используется LibCore "старой версии" (2023.9.26.1).
Сама LibCore сейчас используется для интеграции с УЦ Крипто ПРО под Windows и Linux.
Сервис и приложение работают под Astra Linux 1.6-1.7.

Для простоты прикладываю пример кода инициализации сервиса - поднимается два HTTPS-endpoint с ГОСТ-сертификатами, один сертификат грузится из pfx, второй из хранилища.
На машине установлен Крипто ПРО УЦ CSP.

Код:


		ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13;

		LibCore.Initializer.Initialize(LibCore.Initializer.DetouredAssembly.All,
														debugFlags: LibCore.Initializer.DebugFlags.DisableEnvelopedCmsDetours,
														debug: true);

		var builder = WebApplication.CreateBuilder();

		builder.Services.AddControllers();
		builder.Services.AddEndpointsApiExplorer();
		builder.WebHost.ConfigureKestrel(serverOptions =>
		{

			serverOptions.Listen(IPAddress.Any, 555);

			serverOptions.ConfigureHttpsDefaults(httpsOptions =>
			{
				httpsOptions.SslProtocols = SslProtocols.Tls12 | SslProtocols.Tls13;
			});

			serverOptions.Listen(IPAddress.Any, 666, listenOptions =>
			{
				var cert = new X509Certificate2(@"GOST.pfx", "123456qweRTY");

				listenOptions.UseHttps(cert);
			});

			serverOptions.Listen(IPAddress.Any, 777, listenOptions =>
				{
					var storeName = StoreName.My;
					var storeLocation = StoreLocation.CurrentUser;

					using (CpX509Store store = new CpX509Store(storeName, storeLocation))
					{
						store.Open(OpenFlags.ReadWrite);

						var cert = store.Certificates.Find(X509FindType.FindByThumbprint, "7B7374449C4AF10EE30758BAF3BAF6B12F0D9FB5", false);

						listenOptions.UseHttps(cert.First());

						store.Close();
					}
				});
		});

		var app = builder.Build();
		app.MapControllers();
		app.Run();



Данный сервис успешно запускается под Linux, но при обращении к нему имеем ошибку:

Код:


	//fail: Microsoft.AspNetCore.Server.Kestrel[0]
	//	  Unhandled exception while processing 0HN7V10D81STF.
	//	  System.ComponentModel.Win32Exception(0x80090304): Неизвестная ошибка -2146893052
	//	 at System.Net.SSPIWrapper.AcquireCredentialsHandle(SSPIInterface secModule, String package, CredentialUse intent, SCHANNEL_CRED scc)
	//	 at System.Net.Security.SslStreamPal.AcquireCredentialsHandle(CredentialUse credUsage, SCHANNEL_CRED secureCredential)
	//	 at System.Net.Security.SslStreamPal.AcquireCredentialsHandle(X509Certificate certificate, SslProtocols protocols, EncryptionPolicy policy, Boolean isServer)
	//	 at System.Net.Security.CpSecureChannel.AcquireServerCredentials(Byte[]& thumbPrint, Byte[] clientHello)
	//	 at System.Net.Security.CpSecureChannel.GenerateToken(Byte[] input, Int32 offset, Int32 count, Byte[]& output)
	//	 at System.Net.Security.CpSecureChannel.NextMessage(Byte[] incoming, Int32 offset, Int32 count)
	//	 at LibCore.Net.Security.CpSslStream.ProcessBlob(Int32 frameSize)
	//	 at LibCore.Net.Security.CpSslStream.ReceiveBlobAsync[TIOAdapter](TIOAdapter adapter)
	//	 at LibCore.Net.Security.CpSslStream.ForceAuthenticationAsync[TIOAdapter](TIOAdapter adapter, Boolean receiveFirst, Byte[] reAuthenticationData, Boolean isApm)
	//	 at Microsoft.AspNetCore.Server.Kestrel.Https.Internal.HttpsConnectionMiddleware.OnConnectionAsync(ConnectionContext context)
	//	 at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure.KestrelConnection`1.ExecuteAsync()



Вопросы:
1) Должно ли это вообще работать? Поддерживается ли запуск HTTPS с ГОСТ-овой криптографией? Или тут лучше использовать nginx-gost-проксирование?
2) Поможет решить данную проблему переход на последний LibCore с новым интерфейсов? Бегло посмотрел, там сейчас хранилище CpX509Store возвращает CpX509Certificate2-сертификат, не понятно как его подсунуть в инфраструктуру сервера .NET:

Код:


using (CpX509Store store = new CpX509Store(storeName, storeLocation))
					{
						store.Open(OpenFlags.ReadWrite);

						var cert = store.Certificates.Find(X509FindType.FindByThumbprint, "7B7374449C4AF10EE30758BAF3BAF6B12F0D9FB5", false);

// ВОТ ТУТ НЕ ПОЛУЧИТСЯ ИСПОЛЬЗОВАТЬ СЕРТИФИКАТ
						listenOptions.UseHttps(cert.First());

						store.Close();
					}

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

Offline Георгий Садофьев  
#2 Оставлено : 7 ноября 2024 г. 13:31:11(UTC)
Георгий Садофьев

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

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

Поблагодарили: 31 раз в 30 постах
Добрый день!

Используйте "nginx-gost-проксирование".
Техническую поддержку оказываем тут
Наша база знаний
Offline zummi  
#3 Оставлено : 7 ноября 2024 г. 17:41:20(UTC)
zummi

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

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

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