-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
invalidThis doesn't seem rightThis doesn't seem right
Description
Приложение собирается под .NET 10 (под .NET 6 то же самое работает корректно)
Версии пакетов:
<PackageReference Include="CryptoPro.Net.Security" Version="2025.7.21" />
<PackageReference Include="CryptoPro.Security.Cryptography" Version="2025.7.21" />
<PackageReference Include="CryptoPro.Security.Cryptography.Pkcs" Version="2025.7.21" />
<PackageReference Include="CryptoPro.Security.Cryptography.Xml" Version="2025.7.21" />
Столкнулись с проблемой при попытке получить шаблоны сертификатов с КриптоПро УЦ 2.0. Сервер ЦР (API). Сборка 1.70.0.19.
Минимальный пример:
public static async Task Main(string[] args)
{
var readAsString = bool.Parse(args[0]);
using (var gostStore = new CpX509Store(StoreLocation.CurrentUser))
{
gostStore.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
var gostCert = gostStore.Certificates.Find(X509FindType.FindByThumbprint, "96271fdf86a81d8f5ea42139861a397b16b41976", false).First();
var handler = new CpHttpHandler
{
SslOptions = new CpSslClientAuthenticationOptions
{
// Указываем сертификат клиента.
ClientCertificates = new CpX509Certificate2Collection { gostCert },
}
};
var client = new HttpClient(handler);
using (var request_ = new System.Net.Http.HttpRequestMessage())
{
request_.Method = new System.Net.Http.HttpMethod("GET");
request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json"));
request_.RequestUri = new System.Uri("https://cpca2.fqdn3.local/api/ra/templates", System.UriKind.RelativeOrAbsolute);
var response = await client.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead).ConfigureAwait(false);
if (readAsString)
{
var responseText = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
Console.WriteLine(responseText);
}
else
{
using (var responseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false))
using (var streamReader = new System.IO.StreamReader(responseStream))
using (var jsonTextReader = new Newtonsoft.Json.JsonTextReader(streamReader))
{
var serializer = Newtonsoft.Json.JsonSerializer.Create();
var typedBody = serializer.Deserialize(jsonTextReader);
}
}
}
}
Console.WriteLine("end");
}
При попытке прочитать как строку var responseText = await response.Content.ReadAsStringAsync().ConfigureAwait(false); отрабатывает корректно.
При попытке десериализовывать через Newtonsoft.Json.JsonSerializer получаем ошибку:
Unhandled exception. System.IO.IOException: The decryption operation failed, see inner exception.
---> System.NullReferenceException: Object reference not set to an instance of an object.
at Interop.OpenSsl.Decrypt(SafeSslHandle context, Span`1 buffer, SslErrorCode& errorCode)
at System.Net.Security.SslStreamPal.DecryptMessage(SafeDeleteSslContext securityContext, Span`1 buffer, Int32& offset, Int32& count)
--- End of inner exception stack trace ---
at System.Net.Security.SslStream.ReadAsyncInternal[TIOAdapter](Memory`1 buffer, CancellationToken cancellationToken)
at System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder`1.StateMachineBox`1.System.Threading.Tasks.Sources.IValueTaskSource<TResult>.GetResult(Int16 token)
at System.Net.Security.SslStream.Read(Span`1 buffer)
at System.Net.Http.HttpConnection.FillAsync(Boolean async)
at System.Net.Http.HttpConnection.ChunkedEncodingReadStream.Fill()
at System.Net.Http.HttpConnection.ChunkedEncodingReadStream.Read(Span`1 buffer)
at System.IO.StreamReader.ReadBuffer(Span`1 userBuffer, Boolean& readToUserBuffer)
at System.IO.StreamReader.ReadSpan(Span`1 buffer)
at Newtonsoft.Json.JsonTextReader.ReadData(Boolean append, Int32 charsRequired)
at Newtonsoft.Json.JsonTextReader.ReadData(Boolean append)
at Newtonsoft.Json.JsonTextReader.ReadStringIntoBuffer(Char quote)
at Newtonsoft.Json.JsonTextReader.ParseProperty()
at Newtonsoft.Json.JsonTextReader.ParseObject()
at Newtonsoft.Json.JsonTextReader.Read()
at Newtonsoft.Json.JsonWriter.WriteToken(JsonReader reader, Boolean writeChildren, Boolean writeDateConstructorAsDate, Boolean writeComments)
at Newtonsoft.Json.Linq.JTokenWriter.WriteToken(JsonReader reader, Boolean writeChildren, Boolean writeDateConstructorAsDate, Boolean writeComments)
at Newtonsoft.Json.JsonWriter.WriteToken(JsonReader reader, Boolean writeChildren)
at Newtonsoft.Json.JsonWriter.WriteToken(JsonReader reader)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateJToken(JsonReader reader, JsonContract contract)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue, String id)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
at Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader, Type objectType)
at Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader)
at ConsoleApp1.Program.Main(String[] args) in C:\Users\Anton\source\repos\ConsoleApp1\ConsoleApp1\Program.cs:line 58
at ConsoleApp1.Program.<Main>(String[] args)
Понимаю, что под .NET 10 поддержка пока не заявлена, но на всякий случай.
Metadata
Metadata
Assignees
Labels
invalidThis doesn't seem rightThis doesn't seem right